数学:这是k-means聚类吗?

时间:2013-10-17 09:58:32

标签: math cluster-analysis

enter image description here

您好!我有一些观点。这些点没有Y维度,只有X维度。我只将它们放在Y维度上,因为这样可以在同一个位置放置多个点。

我想找到n个质心(密度最大的斑点)。

我放置了例如质心(=绿线)来表示我的意思。这些示例性质心没有计算,我只是猜测它们会在哪里。

在深入研究数学之前,我想知道这是否可以通过k-means-clustering解决,或者我是否朝着错误的方向前进。

谢谢。

2 个答案:

答案 0 :(得分:0)

K-means对噪音很敏感,你似乎有很多噪音。但是,它可能会在某种程度上起作用。此外,它没有利用您的数据只是一维。

然而,听起来好像你想做一些非常原始的模式寻求。在1D中,最合适的方法是Kernel Density Estimation,然后选择局部密度最大值。

“聚类分析”肯定听起来更加花哨,但是经典统计“KDE”可能会产生更好的结果。特别是,您不必事先修复“k”,而且它将更加强大。噪声

答案 1 :(得分:0)

您可以使用K-means,实际上实现非常简单:

  1. 选择所需的群集数
  2. 随机选择k点(您可以重复此操作以避免局部最优)
  3. 找到这些k中心的其他点的距离
  4. 将点数分配到最近的中心
  5. 对于每组点数计算平均值
  6. 如果平均值发生变化,请将群集的中心移至新的平均值,然后转到3
  7. 否则完成
  8. 或者您可以使用matlab为您执行此操作:

    k = 2;
    rng('default') % For reproducibility
    X = [randn(100,1)+ones(100,1);...
         randn(100,1)-ones(100,1)];
    
    opts = statset('Display','final');
    [idx,ctrs] = kmeans(X,k,'Distance','city','Replicates',5,'Options',opts);
    
    plot(X(idx==1,1),X(idx==1,1),'r.','MarkerSize',12)
    hold on
    plot(X(idx==2,1),X(idx==2,1),'b.','MarkerSize',12)
    plot(ctrs(:,1),ctrs(:,1),'kx','MarkerSize',12,'LineWidth',2)
    plot(ctrs(:,1),ctrs(:,1),'ko','MarkerSize',12,'LineWidth',2)
    legend('Cluster 1','Cluster 2','Centroids','Location','NW')
    hold off
    

    我把结果放在对角线上以便更好地显示,但实际数据是1D:

    enter image description here