簡體   English   中英

R中的K均值聚類問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM