作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
示例:
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),Col{clus},'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,我发现我又犯了同样的错误
最佳答案
kmeans 可能对初始质心位置敏感。问题似乎在于用于选择起点的算法。例如,您可以通过运行以下命令获得预期的答案:
[idx,cntrd] = kmeans(PC(:,1:2),3, 'start', [-0.05 0; 0 0; 0.05 0]);
外表也可能具有欺骗性。在这种情况下,数据的离散度在 x 和 y 维度上不相等。因此,对于某些点对,视觉簇之间的欧几里德距离不像簇内的那么远。
您可以考虑对此数据使用混合高斯分布模型。
关于Matlab:kmeans 聚类给出了意想不到的聚类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30024653/
我是一名优秀的程序员,十分优秀!