【问题标题】:Math: Is this k-means clustering?数学:这是 k 均值聚类吗?
【发布时间】:2013-10-25 18:09:34
【问题描述】:

你好!我在一条线上有一些点。这些点没有 Y 维度,只有 X 维度。我只将它们放置在 Y 维度上,因为它希望能够在同一个位置放置多个点。

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

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

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

谢谢。

【问题讨论】:

  • 国际海事组织你只是在错误的网站上! :) 试试math.stackexchange.com
  • 图像不起作用(它给出了一个红十字),但是对于一维数据集,我猜你可以制作集群,然后绘制每个集群的点(即集群作为 x 轴和点作为 Y 轴,在 x 轴上可能有一条线来描述质心?)另见:stackoverflow.com/questions/7869609/…
  • @Adriano 我不同意:stats.stackexchange.com
  • @Anony-Mousse 你是对的!

标签: math cluster-analysis


【解决方案1】:

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

  1. 选择您想要的集群数量
  2. 随机选择k点(您可以重复此操作以避免局部最优)
  3. 找出彼此点到这些k 中心的距离
  4. 将点分配到最近的中心
  5. 为每组点计算平均值
  6. 如果平均值发生变化,请将聚类中心移至新平均值并转到 3
  7. 否则完成

或者您可以使用 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

我把结果放在对角线上以便更好地显示它,但真实数据是一维的:

【讨论】:

    【解决方案2】:

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

    但是,在我看来,您好像想做一些非常原始的模式搜索。在一维中,最适合您的方法是Kernel Density Estimation,然后选择局部密度最大值。

    “聚类分析”确实听起来更花哨,但经典统计“KDE”可能会产生更好的结果。特别是,您不必事先修复“k”,它会更加健壮。噪音。

    【讨论】:

      猜你喜欢
      • 2014-07-24
      • 2015-02-09
      • 2017-12-30
      • 2019-06-18
      • 1970-01-01
      • 2017-01-15
      • 2016-05-20
      • 2012-06-18
      • 2020-12-18
      相关资源
      最近更新 更多