【问题标题】:Matlab Clustering : not working properly over large set of dataMatlab聚类:无法在大量数据上正常工作
【发布时间】:2017-03-06 07:48:30
【问题描述】:

我有一组数据,可以分为两组。沿 y 轴的垂直设置和沿 x 轴的水平设置。我试图分别用蓝色和红色绘制它们。但是正如您所看到的,一些蓝色与红色混合在一起。有人可以帮助我使用聚类正确地做到这一点吗?我使用 kmeans 来做到这一点。

[cidx2,cmeans2] = kmeans(minSpikeV,2);

但似乎效果不佳。

我按照@mpaskov 的说法做了。但现在我明白了。那些红色矩形应该是蓝色方块。谁能帮帮我吗 ?

【问题讨论】:

  • 由于 kmeans 是一种启发式算法,因此有时这是典型的行为(它只保证收敛到某个局部最优值,因为问题是具有多个局部最小值的非凸优化问题;它是 np-hard)。增加更多鲁棒性的经典方法是使用不同的随机种子(多开始)多次聚类。 mpaskov 的回答给出了一些关于如何手动操作的想法(我使用的所有实现都已经提供了开箱即用的功能)
  • 这个数据对我来说看起来更适合 DBSCAN,但也许 Matlab k-means 不是很好。您是否尝试在 ELKI 中对数据进行聚类?
  • @Anony-Mousse 那是什么?
  • 我首选的集群工具。速度非常快,有很多选项可供选择。在那里尝试 KMeansPlusPlusInitialization,或者最远的点。
  • @Anony-Mousse 非常感谢您的建议。我也会试试的

标签: algorithm matlab sorting cluster-analysis


【解决方案1】:

您可以使用不同的方式来初始化方法或自己指定它们。

% uses random samples
[cidx2,cmeans2] = kmeans(minSpikeV,2, 'Start', 'sample');

% not 100% on the dimensions, but I can not try as I do not have the toolbox for kmeans
[cidx2,cmeans2] = kmeans(minSpikeV,2, 'Start', [-0.05,2; -0.25,0.1]); 

阅读documentation中的详细信息

【讨论】:

  • 感谢 mpaskov 和 sascha。我还在试图弄清楚你说什么。感谢您的帮助
  • @TMH 基本上,kmeans 从两个值开始,它们是对每个集群中心位置的猜测。然后它执行迭代以改进它们。如果您从一个非常糟糕的点开始,它可能不会收敛并分离两个集群。现代kmeans算法尝试不同的起点并使用“最佳”的起点,不确定matlab是否这样做。但它确实允许您选择您期望集群围绕的起点或启动算法的不同方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多