【问题标题】:Why is k-means clustering ignoring a significant patch of data?为什么 k-means 聚类会忽略大量数据?
【发布时间】:2018-01-26 00:34:37
【问题描述】:

我正在处理一组坐标,并且希望动态地(我有许多组需要通过此过程)了解数据中有多少不同的组。我的方法是应用 k-means 来调查它是否会找到质心并且我可以从那里开始。

当绘制一些具有 6 个不同聚类的数据(视觉上)时,k-means 算法会继续忽略两个重要聚类,同时将许多质心放入另一个聚类。

见下图:

红色是坐标数据点,蓝色是 k-means 提供的质心。在这种特定情况下,我选择了 15(任意),但它仍然无法识别右侧的那些数据块,而是在它们之间放置一个中点,同时将 8 放入右上角的集群中。

诚然,右上角的数据点略多一些,但数量不多。

我在 R 中使用标准的 k-means 算法,只输入 x 和 y 坐标。我尝试过标准化数据,但这并没有什么区别。

对于为什么会这样,或者可以应用其他潜在方法来尝试动态了解数据中不同集群的数量有什么想法吗?

【问题讨论】:

  • 您可以尝试标准化数据,并增加iter.maxnstart(可能是iter.max = 500nstart = 25)?你有机会发布你的数据吗?
  • 如果您提供带有示例输入数据的reproducible example 会更容易提供帮助,这样我们就可以运行并测试代码以查看发生了什么。
  • 这很有效 - 谢谢!

标签: r cluster-analysis k-means


【解决方案1】:

K-means 是一种随机算法,它会陷入局部最小值

由于这些问题,通常多次运行 k-means,并使用最小二乘法保持结果,即找到的局部最小值中的最佳值。

【讨论】:

    【解决方案2】:

    你可以试试自组织地图

    这是一种基于神经网络的聚类算法,它创建训练样本输入空间的离散表示,称为映射,因此是一种进行降维 (SOM) 的方法。

    这个算法非常适合聚类,因为不需要先验选择聚类的数量(在 k-mean 中你需要选择 k,这里没有)。在您的情况下,它有望自动找到最佳集群数量,并且您实际上可以将其可视化。

    你可以找到一个非常好的 python 包,叫做 somoclu,它已经实现了这个算法,并且可以很容易地可视化结果。否则,您可以使用 R。Here 您可以找到包含教程的博客文章,以及 Cran SOM 的包装手册。

    【讨论】:

      猜你喜欢
      • 2013-02-07
      • 2014-06-04
      • 2015-04-11
      • 2021-04-29
      • 2010-11-22
      • 2011-08-13
      • 2013-08-08
      • 2013-02-14
      • 2018-01-14
      相关资源
      最近更新 更多