全面瞭解R語言中的k-means如何聚類?

shenmanli發表於2017-11-09
下面將在iris資料集上演示k-means聚類的過程。
先從iris資料集中移除Species屬性,然後再對資料集iris呼叫函式kmeans,並將聚類結果儲存在變kmeans.result中。
在下面的程式碼中,簇的數目設定為3。
iris2 <- iris
iris2$Species <- NULL
(kmeans.result <- kmeans(iris2, 3))  


將聚類結果與類標號(Species)進行比較,檢視相似的物件是否被劃分到同一個簇中。
table(iris$Species, kmeans.result$cluster)
 從上面的聚類結果可以看出,setosa類與其他的兩個類很容易就劃分開了,而versicolor類與virginica類之間存在小範圍的重疊。


k-means聚類的結果圖


然後,繪製所有的簇以及簇中心,如圖所示。
注意,資料集有4個維度,而繪圖只使用了前兩個維度的資料。



圖中所示的一些靠近綠色中心(用星號標記)的黑點實際上在4維空間中更靠近黑色中心。
要注意,多次執行得到的k-means聚類結果可能不同,這是因為初始的簇中心是隨機選擇的。
plot(iris2[c("Sepal.Length", "Sepal.Width")], col = kmeans.result$cluster)
# plot cluster centers

points(kmeans.result$centers[,c("Sepal.Length", "Sepal.Width")], col = 1:3, pch = 8, cex=2)



相關文章