你好!我在一条线上有一些点。这些点没有 Y 维度,只有 X 维度。我只将它们放置在 Y 维度中,因为这希望能够在同一个位置放置多个点。
我想找到 n 个质心(密度最大的点)。
我放置了例如质心(=绿线)来说明我的意思。这些示例质心没有计算出来,我只是猜测它们会在哪里。
在我深入研究数学之前,我想知道这是否可以通过 k-means-clustering 来解决,或者我是否走错了方向。
谢谢你。
你好!我在一条线上有一些点。这些点没有 Y 维度,只有 X 维度。我只将它们放置在 Y 维度中,因为这希望能够在同一个位置放置多个点。
我想找到 n 个质心(密度最大的点)。
我放置了例如质心(=绿线)来说明我的意思。这些示例质心没有计算出来,我只是猜测它们会在哪里。
在我深入研究数学之前,我想知道这是否可以通过 k-means-clustering 来解决,或者我是否走错了方向。
谢谢你。
您可以使用 K-means,实际上实现非常简单:
k
点(您可以重复此操作以避免局部最优)k
中心的距离或者您可以使用 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
我将结果放在对角线中以更好地显示它,但实际数据是一维的:
K-means 对噪声相当敏感,你似乎有很多噪声。但是,是的,它可能会在某种程度上起作用。另外,它没有利用您的数据只是一维的。
但是,在我看来,您好像想做一些非常原始的模式搜索。在 1D 中,最适合您的方法是Kernel Density Estimation,然后选择局部密度最大值。
“聚类分析”确实听起来更花哨,但经典统计“KDE”可能会产生更好的结果。特别是,您不必事先修复“k”,它会更加健壮。噪音。