【发布时间】: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),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,我发现我又犯了同样的错误
【问题讨论】:
-
第一个建议(实际上只是一个旁注)是您可以使用
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 个集群都是错误的。图片有帮助吗?
标签: matlab cluster-analysis k-means