5

是否有客观的方法来验证聚类算法的输出?

我正在对由具有许多属性的对象组成的数据集使用 scikit-learn 的亲和力传播聚类。提供给聚类算法的差分矩阵由这些属性的加权差分组成。我正在寻找一种方法来客观地验证距离权重的调整,如结果集群中所反映的那样。数据集很大并且具有足够的属性,因此手动检查小示例不是验证生成的集群的合理方法。

4

2 回答 2

9

是的

将集群交给领域专家,让他分析算法找到的结构是否合理。与其说是新的,不如说是明智的。

...和

没有可用的自动评估是公平的。从某种意义上说,它考虑了无监督聚类的目标:知识发现又名:学习有关数据的新知识。

自动评估聚类有两种常用方法:

  • 内部凝聚力。即有一些特定的属性,例如与集群间方差相比,集群内方差要最小化。问题是作弊通常是微不足道的。即构建一个分数非常好的微不足道的解决方案。因此,不得使用此方法比较基于不同假设的方法。您甚至不能公平地比较不同类型的层次聚类链接。

  • 外部评价。您使用标记的数据集,并根据算法重新发现现有知识的程度对算法进行评分。有时这很有效,因此它是一种公认​​的评估技术。然而,任何监督半监督方法当然会在这方面得分更高。因此,它是 A) 偏向有监督的方法,并且 B) 实际上完全违背了发现你还不知道的东西的知识发现思想。

如果您真的打算使用集群——即了解一些关于您的数据的信息——您将不得不在某些时候检查集群,最好通过完全独立的方法,例如领域专家。如果他可以告诉您,例如,通过聚类确定的用户组是一个尚未仔细调查的重要组,那么您就是赢家。

但是,不幸的是,大多数人都希望进行“一键式”(和一分)评估。

哦,“聚类”并不是真正的机器学习任务。实际上并没有涉及到学习。对于机器学习社区来说,它是无人关心的丑小鸭。

于 2012-10-01T22:34:11.330 回答
4

还有另一种方法可以通过计算子折叠的稳定性度量来评估聚类质量,有点像监督模型的交叉验证:

  • 将数据集拆分为 3 折 A、B 和 C。使用您的算法在 A+B 和 A+C 上计算两个聚类。计算交叉点 A 上 2 个标签的调整后的兰德指数或调整后的互信息,并将此值视为算法稳定性得分的估计值。

  • 通过改组数据并将其分成 3 个其他折叠 A'、B' 和 C' 重复冲洗并重新计算稳定性分数。

  • 平均 5 或 10 次运行的稳定性分数,以粗略估计稳定性分数的标准误差。

您可以猜到,这是一种计算机密集型评估方法。

了解这种基于稳定性的聚类算法评估在实践中是否真的有用以及确定它何时无法产生有效的模型选择标准仍然是一个开放的研究领域。请参阅Ulrike von Luxburg的《聚类稳定性:概述》和其中的参考资料,了解有关这些问题的最新技术的概述。

注意:如果您想使用此策略来选择 k-means 中的最佳 k 值,则使用 Adjusted for Chance 指标(例如 ARI 或 AMI)非常重要。NMI 和 V-measure 等未经调整的指标将倾向于任意偏爱具有更高 k 的模型。

于 2012-10-03T10:15:40.393 回答