是否有客观的方法来验证群集算法的输出?
我正在对由具有许多属性的对象组成的数据集使用scikit-learn的亲和传播聚类。提供给聚类算法的差异矩阵由这些属性的加权差异组成。我正在寻找一种方法来客观地验证距离权重中的调整,如结果簇中所反映的那样。数据集很大,并且具有足够的属性,手动检查小示例不是验证生成的集群的合理方法。
答案 0 :(得分:9)
是强>:
将群集提供给域专家,并让他分析算法找到的结构是否明智。如果它是新的,那不是很多,但如果它是明智的。
...和否:
fair 没有自动评估。从某种意义上说,它将无监督聚类的目标考虑在内:知识发现又名:了解有关数据的新内容。
自动评估群集有两种常用方法:
内部凝聚力。即有一些特殊的属性,如in-cluser方差,与群集间方差相比,最小化。问题在于作弊通常是微不足道的。即构建一个非常好的微不足道的解决方案。因此,此方法必须不能用于比较基于不同假设的方法。你甚至不能公平地比较不同类型的连接来进行层次聚类。
外部评估。您使用带标签的数据集,并根据他们重新发现现有知识的程度对算法进行评分。有时这很有效,因此它是一种可接受的评估技术。然而,任何监督的或半监督方法当然会在这方面得分更高。因此,它是A)偏向向监督方法,并且B)实际上完全反对知识发现找到你所做的事情的想法尚未知道。
如果您真的想要使用群集 - 即了解您的数据 - 您将在某个时候必须检查群集,最好是通过完全独立的方法(如域专家)。如果他可以告诉你,例如群集标识的用户组是非平凡组尚未密切调查,那么您就是胜利者。
然而,不幸的是,大多数人都希望进行“一键式”(和一次评分)评估。
哦,“群集”不真的是机器学习任务。实际上没有涉及学习。对于机器学习社区来说,这是一个无人问津的丑小鸭。
答案 1 :(得分:3)
还有另一种通过在子折叠上计算稳定性度量来评估聚类质量的方法,有点像监督模型的交叉验证:
将数据集拆分为A,B和C三倍。在A + B和A + C上使用算法计算两个聚类。计算其交叉点A上2个标签的调整兰特指数或调整后的互信息,并将该值视为算法稳定性得分的估计值。
通过改组数据并将其分成3个其他折叠A',B'进行冲洗重复。和C'并重新计算稳定性分数。
平均5或10次运行的稳定性得分,以粗略估计稳定性得分的标准误差。
您可以猜测这是计算机密集型评估方法。
这仍然是一个开放的研究领域,以了解这种基于稳定性的聚类算法评估是否在实践中真正有用,并确定何时无法产生有效的模型选择标准。请参阅Ulrike von Luxburg的Clustering Stability: An Overview及其中的参考资料,了解有关这些事项的最新技术水平。
注意:如果您想使用此策略以k-means选择k的最佳值,则使用Adjusted for Chance指标(如ARI或AMI)非常重要。非调整指标(如NMI和V-measure)倾向于倾向于任意选择k值较高的模型。