我在MATLAB中创建了一个带有4个定义模式/类的三维随机数据集.我在数据上应用了K-means算法,以了解K-means如何根据创建的4个模式/类对我的样本进行分类.
我需要以下帮助;
我可以使用什么函数/代码来评估K-means算法如何正确识别我的样本类?假设我设置K = 4,如下图所示:
如何自动识别班级数(K)?假设我的数据中的类未知?
我的目标是评估K-mean的准确性以及数据的变化(通过预处理)如何影响算法识别类的能力.使用MATLAB代码的示例会很有帮助!
与已知类标签相比,衡量聚类"好"的一个基本指标称为纯度.现在,这是一个监督学习的例子,你可以在其中了解一个外部指标,它是基于真实世界数据的实例标签.
纯度的数学定义如下:
在话这是什么意思是,来自斯坦福大学的教授引用在这里,
为了计算纯度,将每个聚类分配给聚类中最常见的类,然后通过计算正确分配的文档的数量并除以N来测量该分配的准确性.
一个简单的例子就是如果你有一个非常天真的聚类,它是通过Kmeans生成的,其中k = 2看起来像:
Cluster1 Label 1 A 5 B 7 B 3 B 2 B Cluster2 Label 4 A 6 A 8 A 9 B
在Cluster1中,标签B有4个实例,标签A有1个实例,而Cluster2有3个实例,标签为A,1个实例为集群B.现在,您正在寻找总纯度,这将是每个集群的纯度之和在这种情况下,k = 2.因此,Cluster1的纯度是给定标签的最大实例数除以Cluster1中的实例总数.
因此Cluster1的纯度是:
4/5 = 0.80
这四个来自这样一个事实:发生最多的标签(B
)发生了4次,并且集群中总共有5个实例.
因此,Cluster2的纯度为:
3/4 = 0.75
现在总纯度只是纯度的总和1.55
.那告诉我们什么呢?如果群集的纯度为1,则认为该群集是"纯净的",因为它表示该群集中的所有实例都具有相同的标签.这意味着您的原始标签分类非常好,并且您的Kmeans做得非常好.整个数据集的"最佳"纯度分数将等于原始的K数群集,因为这意味着每个群集的个体纯度分数为1.
但是,您需要意识到纯度并不总是最佳或最有说服力的指标.例如,如果您有10个点并且您选择了k = 10,则每个簇的纯度为1,因此总纯度为10,等于k.在这种情况下,最好使用不同的外部指标,如精确度,召回率和F度量.如果可以,我建议调查一下.再次重申一下,这只适用于有监督的学习,在这里您可以预先了解标签系统,我相信您的问题就是这样.
回答你的第二个问题......如果没有任何先前的数据知识,选择你的K个簇是Kmeans最困难的部分.有一些技术可以通过选择初始K数量的聚类和质心来缓解所提出的问题.可能最常见的是一种名为Kmeans ++的算法.我建议调查一下以获取更多信息.