我一直在尝试scipy中的kmeans聚类算法实现。是否有任何标准的,明确定义的指标可用于衡量所生成集群的质量?
即,我有通过kmeans聚类的数据点的预期标签。现在,一旦我获得了已生成的聚类,如何根据预期的标签评估这些聚类的质量?
答案 0 :(得分:0)
Kmeans试图最小化到集群中心的平方距离总和。我会将这个结果与Kmeans集群进行比较,结果使用你得到的集群,如果你按照预期的标签排序。
结果有两种可能性。如果KMeans平方和大于预期的标签聚类那么你的kmeans实现是错误的,或者没有从一组好的初始聚类分配开始,你可以考虑增加你使用或调试它的随机启动次数。如果KMeans平方和小于预期的标签聚类平方和,并且KMeans聚类与预期的标签聚类不太相似(即,从预期的标签聚类中随机选择的两个点通常不在当它们不在KMeans聚类中时,相同的预期标签聚类)然后聚类中心的平方和不是将您的点分成聚类的好方法,您需要使用不同的距离函数或查看不同的属性或使用一种不同的聚类。
答案 1 :(得分:0)
在您的情况下,当您拥有样本真实标签时,验证非常简单。 首先,计算混淆矩阵(http://en.wikipedia.org/wiki/Confusion_matrix)。然后,从中得出所有相关的度量:真阳性,假阴性,假阳性和真阴性。然后,您可以找到精确度,召回率,未命中率等。
确保您了解以上所有内容的含义。它们基本上告诉您集群预测/识别数据的真实性质的程度。
如果你正在使用python,只需使用sklearn包: http://scikit-learn.org/stable/modules/model_evaluation.html
此外,运行一些内部验证很好,看看你的集群是如何分离的。已知内部有效性措施,例如: 轮廓 DB索引 邓恩指数 Calinski-Harabasz测量 伽玛得分 标准化切割 等
在此处阅读更多内容:群集有效性指数的广泛比较研究 Olatz Arbelaitz,Ibai Gurrutxaga,Javier Muguerza,JesúsM.Pérez,IñigoPerona
答案 2 :(得分:0)
我当时正在用Spark的KMeans做这件事。
我正在使用:
点到最近中心的平方距离总和 (在computeCost()中实施)。
不平衡因素(见 Unbalanced factor of KMeans? 实施和 Understanding the quality of the KMeans algorithm 作为解释)。
当数量较小(越少越好)时,两个数量都会保证更好的聚类。