[英]Problems with K-means clustering in R
當我嘗試對標准虹膜數據進行K均值聚類時
library('tidyverse')
iris_Cluster <- kmeans(iris[, 3:4], 2, nstart = 10)
iris$cluster <- as.factor(iris_Cluster$cluster)
p_iris <- ggplot(iris, aes(x = Petal.Length, y = Petal.Width, color=cluster)) + geom_point()
print(p_iris)
我得到的觀點是屬於錯誤集群的。 問題是什么? 這是K-means聚類算法的弱點嗎? 如何獲得適當的結果? 有什么好的分區聚類算法?
是的,根據平方和目標,該點屬於紅色群集。
考慮例如DBSCAN。
屬於“錯誤”群集的點是點99。它的Petal.Length = 3,而Petal.Width = 1.1。 您可以從以下位置獲取群集的中心
iris_Cluster$centers
Petal.Length Petal.Width
1 4.925253 1.6818182
2 1.492157 0.2627451
您可以使用以下方法查看從點99到聚類中心的距離
as.matrix(dist(rbind(iris_Cluster$centers, iris[99,3:4])))
1 2 99
1 0.000000 3.714824 2.011246
2 3.714824 0.000000 1.724699
99 2.011246 1.724699 0.000000
點99 是在(1.49,0.26)更靠近所述簇中心。 問題在於,k均值選擇的是最接近點的聚類中心,而不是基於諸如附近點的聚類之類的東西而有意義的中心。 正如@ Anony-Mousse所建議的那樣,DBSCAN可能更適合您。 DB部分代表“基於密度”,它創建群集,這些群集中的點可以通過高密度區域進行連接。 另一種選擇是單鏈路分層群集,該群集傾向於將相互靠近的點放在同一群集中。
模仿您的代碼,但使用hclust
:
library(ggplot2)
iris_HC <- hclust(dist(iris[,3:4]), method="single")
iris_Cluster <- cutree(iris_HC, 2)
iris$cluster <- as.factor(iris_Cluster)
p_iris <- ggplot(iris, aes(x=Petal.Length, y=Petal.Width, color=cluster)) + geom_point()
print(p_iris)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.