Matlab:kmeans聚类给出了意想不到的聚类

     2023-03-12     255

关键词:

【中文标题】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 维度上是不相等的。因此,对于某些点对,欧几里德距离在视觉集群之间不如在集群内那么远。

您可以考虑对这些数据使用混合高斯分布模型。

【讨论】:

用于在 KMeans 聚类中选择适当数量的聚类的轮廓索引

】用于在KMeans聚类中选择适当数量的聚类的轮廓索引【英文标题】:SilhouetteIndexforselectingapropernumberofclustersinKMeansclustering【发布时间】:2014-02-0207:11:32【问题描述】:我正在使用轮廓索引在KMeans聚类中选择适当数量的聚类。剪影... 查看详情

KMeans 聚类后的聚类点(scikit learn)

】KMeans聚类后的聚类点(scikitlearn)【英文标题】:clusterpointsafterKMeansclustering(scikitlearn)【发布时间】:2015-11-2019:32:30【问题描述】:我已经使用sklearn使用Kmeans完成了聚类。虽然它有一种打印质心的方法,但我发现scikit-learn没有... 查看详情

如何使用 KMEANS 计算每个记录的聚类距离?

】如何使用KMEANS计算每个记录的聚类距离?【英文标题】:HowtocomputeclusterdistancefromeachrecordusingKMEANS?【发布时间】:2019-05-2508:25:29【问题描述】:我在包含两个集群的数据集上应用了Kmeans算法。我的数据集形状是(506,13)。如何获... 查看详情

r语言聚类分析之基于划分的聚类kmeans实战:基于菌株数据

R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据 目录R语言聚类分析之基于划分的聚类KMeans实战:基于菌株数据 查看详情

r语言聚类分析之基于划分的聚类kmeans实战:基于葡萄酒数据

R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据目录R语言聚类分析之基于划分的聚类KMeans实战:基于葡萄酒数据 查看详情

以列表格式获取 KMeans 之后的聚类点

】以列表格式获取KMeans之后的聚类点【英文标题】:GetclusterpointsafterKMeansinalistformat【发布时间】:2018-10-2203:43:52【问题描述】:假设我使用sklearn\'sK-means对一个数据集进行聚类。我可以使用KMeans.cluster_centers_轻松查看质心,但我... 查看详情

奇怪的聚类输出(scikitlean kmeans)

】奇怪的聚类输出(scikitleankmeans)【英文标题】:Weirdclusteringoutput(scikitleankmeans)【发布时间】:2021-08-1814:35:44【问题描述】:我有一个不平衡的数据集,总共有四个标签。其中两个的出现频率比另外两个高得多。我有将近一百... 查看详情

OpenCV 聚类函数 cv KMeans2() - 啥是数组中的聚类中心类型?

】OpenCV聚类函数cvKMeans2()-啥是数组中的聚类中心类型?【英文标题】:OpenCV\'sclusteringfunctioncvKMeans2()-whatisatypeofclustercenterinarray?OpenCV聚类函数cvKMeans2()-什么是数组中的聚类中心类型?【发布时间】:2011-01-0522:50:33【问题描述】:... 查看详情

为基于 KMeans 的聚类算法创建条形图的问题

】为基于KMeans的聚类算法创建条形图的问题【英文标题】:ProblemwithcreatingbarplotsforKMeans-basedclusteringalgorithm【发布时间】:2021-12-0313:00:28【问题描述】:我正在努力为基于KMeans的聚类算法绘制条形图。问题是我想以这样的方式演... 查看详情

r语言kmeans聚类抽取聚类簇:fpc包的kmeansruns函数通过calinski-harabasz准则和平均轮廓系数(asw)为kmeans选择最优的聚类k值并与层次聚类的最优k值进行比较

R语言Kmeans聚类、抽取Kmeans聚类找到的聚类簇:fpc包的kmeansruns函数通过Calinski-Harabasz准则和平均轮廓系数(Averageaveragesilhouettewidth“ASW”)为Kmeans选择最优的聚类K值、并与层次聚类的最佳K值进行比较 目录 查看详情

基于网格的聚类算法clique

基于网格的聚类算法CLIQUE  聚类算法很多,包括基于划分的聚类算法(如:kmeans),基于层次的聚类算法(如:BIRCH),基于密度的聚类算法(如:DBScan),基于网格的聚类算法等等。基于划分和层次聚类方法都无法发现... 查看详情

K 表示不使用 x 轴的聚类

】K表示不使用x轴的聚类【英文标题】:Kmeansclusteringnotusingx-axis【发布时间】:2021-07-0111:13:49【问题描述】:我正在尝试将k-means聚类为3组。df3Entriestmax09449.400000110479.833333212827.000000310519.28571446978.571429...我目前正在做:kmeans=KMeans(n... 查看详情

聚类算法-kmeans

参考技术Akmeans即k均值算法。k均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的。给定一个数据点集合和需要的聚类数目k,k由用户指定,k均值算法根据某个距离函数反复把数据分入k... 查看详情

如何使用 KMeans 在 RED、GREEN 和 BLUE 通道上进行主色提取的聚类

】如何使用KMeans在RED、GREEN和BLUE通道上进行主色提取的聚类【英文标题】:HowdoesclusteringhappenoverRED,GREENANDBLUEChannelsfordominantcolorextractionusingKMeans【发布时间】:2020-10-1720:26:51【问题描述】:我有一个尺寸为(500,500,3)的rgb图像。我试... 查看详情

[matlab]18.matlab自带kmeans函数的求点集的重心

k -means聚类是一种分区方法。该函数kmeans将数据分区为k个互斥集群,并返回它为每个观察分配的集群的索引。与层次聚类不同,k -means聚类对实际观察(而不是较大的相异度度量集)进行操作,并创建单个级别的聚类。这... 查看详情

matlab聚类分析kmeans和cluster的区别

kmeans是K均值聚类cluster是层次聚类从总体思想上k均值是由上到下的,他是在你给定所分的类数后,保证这K类之间获得最大的划分。而层次聚类是由下到上的,它把每一个个元素视为一类,然后距离最短的两类合为一类,逐渐合... 查看详情

聚类算法总结

 1     什么是聚类算法?聚类算法就是根据特定的规则,将数据进行分类。分类的输入项是数据的特征,输出项是分类标签,它是无监督的。常见的聚类规则包括:1)基于原型的,例如有通过质心或中心点... 查看详情

使用 kmeans 对数据进行聚类时出错

】使用kmeans对数据进行聚类时出错【英文标题】:Errorwhileclusteringdatawithkmeans【发布时间】:2011-12-0818:42:19【问题描述】:我正在尝试对此处显示的输入数据执行k均值算法的聚类:https://cwiki.apache.org/MAHOUT/clustering-of-synthetic-control-... 查看详情