【问题标题】:Problems with K-means clustering in RR中的K-means聚类问题
【发布时间】:2018-04-05 17:04:30
【问题描述】:

当我尝试对标准虹膜数据进行 K-means 聚类时

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聚类算法的弱点吗?如何得到合适的结果?分区聚类有哪些好的算法?

【问题讨论】:

  • 您需要进行缩放,使 x 轴与 y 轴相同。然后,您将在所谓的杂散点上获得不同的视觉修复。
  • 如果您想询问其他聚类方法,请联系Cross ValidatedData Science。这不是一个适合 Stack Overflow 的特定编程问题。这个问题不是 R 独有的。

标签: r algorithm cluster-analysis k-means


【解决方案1】:

属于“错误”簇的点是点 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-means 选择的聚类中心是 最接近一点,而不是基于事物有意义的中心 像附近点的集群。正如@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)

【讨论】:

    【解决方案2】:

    是的,根据平方和目标,这个点属于红色集群。

    考虑一下,例如 DBSCAN。

    【讨论】:

      猜你喜欢
      • 2016-02-25
      • 2019-11-18
      • 2013-02-07
      • 2018-02-10
      • 2017-08-18
      • 2020-08-27
      • 2015-04-11
      • 2015-05-29
      • 2019-12-18
      相关资源
      最近更新 更多