Matlab:kmeans聚类给出了意想不到的聚类
Posted
技术标签:
【中文标题】Matlab:kmeans聚类给出了意想不到的聚类【英文标题】:Matlab: kmeans clustering gives unexpected clusters 【发布时间】:2015-07-13 12:22:18 【问题描述】:例子:
load kmeansdata %provides X variable
Y=bsxfun(@minus,X,mean(X,2))'/sqrt(size(X,2)-1); %normalized and means adjusted
[~,~,PC] = svd(Y); %
plot(PC(:,1),PC(:,2),'m.','markersize',15)
绘制前两列,你会得到看起来像 3 个集群。我想使用 kmeans 识别这些集群,并以不同颜色绘制集群作为 prood。我试过了:
[idx,cntrd] = kmeans(PC(:,1:2),3,'Distance','sqEuclidean');%,'Distance','correlation');
cluster=3;
Col = '.b','.r','.g','.y','.m','.c','.k'; % Cell array of colours.
figure;
hold on
for clus=1:cluster
plot(PC(idx==clus,1),PC(idx==clus,2),Colclus,'MarkerSize',12)
end
plot(cntrd(:,1),cntrd(:,2),'kx','MarkerSize',15,'LineWidth',3) %plotting the centroids of the clusters
群集质心已关闭,颜色也不是我所期望的。有人可以帮忙吗?
编辑:有点回答:
我从 mathworks 网站复制了这段代码并替换了我的 kmeans 行:
opts = statset('Display','final');
[idx,C] = kmeans(PC(:,1:2),3,'Distance','cityblock',...
'Replicates',5,'Options',opts);
它似乎有效,但我不太明白 opts 的作用。我假设,复制只是重复 kmeans 5 次,并为质心选择某种平均值。我还重新启动了 matlab,以防出现某种故障
编辑:忽略上面:
我认为问题已经解决,所以我尝试寻找合适的 k 值。我输入 k=1,运行所有内容,然后 k=2,然后 k=3,我发现我又犯了同样的错误
【问题讨论】:
第一个建议(实际上只是一个旁注)是您可以使用gscatter
轻松地将组绘制为不同的颜色。其次,您是否尝试过使用'Replicates',5
选项但坚持使用默认欧几里得距离而不是使用cityblock
?也可以尝试去掉opts
部分,也许你不需要它......
查看mathworks.com/help/stats/statset.html 了解opts
正在做什么。 Display
属性似乎只影响函数的控制台输出,即它给你的反馈。顺便说一句,我认为你是对的 replicate
: mathworks.com/help/stats/kmeans.html#bueftl4-1
@Dan 我运行了在我的第一个“编辑:有点回答:”部分中显示的代码(其中包括 cityblock 参数,它不再按预期工作。我在没有distance/cityblock 对,使其使用默认值,但我仍然无法按预期工作。在这两种情况下,质心都是错误的(其中两个在中间集群中,第三个看起来正确),并且两者的配色方案是错误的(左侧和中间簇的上半部分是红色的,底部是蓝色的,尽管右侧的簇看起来是正确的绿色)。
您是否尝试将复制参数数增加到大于 5?
@Dan 我将重复次数更改为 10(同样没有距离名称/对),情况更糟。在至少最后一个(右侧)集群具有正确的质心并以绿色着色之前,现在所有 3 个集群都是错误的。图片有帮助吗?
【参考方案1】:
kmeans 可以对初始质心位置敏感。问题似乎是用于选择起点的算法。例如,您可以通过运行以下命令获得预期的答案:
[idx,cntrd] = kmeans(PC(:,1:2),3, 'start', [-0.05 0; 0 0; 0.05 0]);
外表也可能具有欺骗性。在这种情况下,数据的分散在 x 和 y 维度上是不相等的。因此,对于某些点对,欧几里德距离在视觉集群之间不如在集群内那么远。
您可以考虑对这些数据使用混合高斯分布模型。
【讨论】:
以上是关于Matlab:kmeans聚类给出了意想不到的聚类的主要内容,如果未能解决你的问题,请参考以下文章