2013-04-29 89 views
4

我想分配數據點(通過歐幾里得距離)到已知的,預定義的一組中心點,將點分配給最接近的固定中心點。kmeans分類到預定的質心

我有這種感覺,我可能過於複雜/缺少一些基本的東西,但我試圖用kmeans實現與預定的中心和沒有迭代做到這一點。然而,按照下面的代碼,可能是因爲算法會做一次迭代,這不起作用(美元中心已「移動」,並不等於原來的質心)

是否有另一種簡單的分配方式矩陣X中的點到最近的中心?

提前許多感謝,W

x <- rbind(matrix(rnorm(100, sd = 0.3), ncol = 2), matrix(rnorm(100, mean = 1, sd = 0.3), ncol = 2)) 
colnames(x) <- c("x", "y") 

vector=c(0.25,0.5,0.75,1) 
ccenters <- as.matrix(cbind(vector,vector)) 
colnames(ccenters) <- c("x", "y") 
ccenters 

(cl <- kmeans(x, centers=ccenters,iter.max=1)) 
plot(x, col = cl$cluster) 
points(cl$centers, col = 1:4, pch = 8, cex = 2) 
cl$centers 
cl$centers==ccenters 

回答

3

您可以直接計算出每個點與各中心和 看看最近的中心之間的距離。

# All the distances (you could also use a loop) 
distances <- outer( 
    1:nrow(x), 
    1:nrow(ccenters), 
    Vectorize(function(i,j) { 
    sum((x[i,] - ccenters[j,])^2) 
    }) 
) 

# Find the nearest cluster 
clusters <- apply(distances, 1, which.min) 

# Plot 
plot(x, col=clusters, pch=15) 
segments(ccenters[clusters,1], ccenters[clusters,2], x[,1], x[,2], col=clusters)