改进的K均值聚类(Ward准则)速度提高

时间:2014-05-26 16:24:46

标签: c++ performance algorithm k-means

我使用k-means聚类和随机初始化来进行聚类识别。算法适用于漂亮的数据。但是,如果我使用具有许多噪声的数据,那么我的k-means算法会失去其稳健性,并为同一数据集上的每次运行提供不同的解决方案。

所以我决定改进我的k-means聚类以最小化Ward标准:

  1. 执行标准k-means聚类
  2. 通过点和所有聚类并找到点P和聚类A和B,就好像我将点P从聚类A移动到聚类B,然后该聚类的区域标准将是最小的
  3. 如果找到此点,请将其从A移至B,更新群集中心并继续2
  4. 我用c ++ here编写了这个算法。然而,问题是,这种方法非常缓慢,我正在处理每个大约20 000点的集群。

    你能给我一个更好的解决方案吗,或者你能帮我加速这个算法吗?

1 个答案:

答案 0 :(得分:2)

我终于找到了解决方案。我意识到了:

  • 我对Ward的态度真的没用了
  • PCA对我来说无法使用,因为我只使用1D群集。
  • 在我实施k-means ++之后,正如Micka所说,k-means的可靠性得到了提高。然而,偶尔它仍然提供不好的解决方案。 (实验上相同数据的5个聚类中的1个是坏的)

对我有帮助的是Mean normalization。我做了5x k-means,计算了每次迭代的聚类中心的平均值。最后用计算方法运行k-means作为初始解。