是否有客观的方法来验证聚类算法的输出?
我正在使用scikit-learn的亲和传播聚类方法对一个由具有多个属性的对象组成的数据集进行聚类。提供给聚类算法的差异矩阵是由这些属性的加权差异组成的。我希望找到一种方法来客观地验证距离加权调整在生成的聚类中的反映。由于数据集很大且属性众多,仅通过手动检查小样本来验证生成的聚类是不切实际的。
回答:
是的:
将聚类结果交给领域专家,让他分析算法发现的结构是否合理。重点不在于是否是新的发现,而在于是否合理。
… 以及 不是:
没有自动的评估方法是公平的。所谓公平,是指它考虑了无监督聚类的目标:知识发现,即从数据中学到新的东西。
自动评估聚类结果的常见方法有两种:
-
内部凝聚性。即存在某种特定属性,如簇内方差与簇间方差的比较,以最小化这种差异。问题在于,这种方法通常很容易作弊。即构造一个得分很高的简单解决方案。因此,这种方法必须不用于基于不同假设的方法之间的比较。甚至无法公平地比较层次聚类中的不同类型的链接方法。
-
外部评估。使用带标签的数据集,通过算法重新发现现有知识的效果来评分。有时这种方法效果很好,因此被接受为评估的现状。然而,任何有监督或半监督方法当然会在这方面得分更高。因此,这一点A)偏向于有监督的方法,B)实际上完全违背了通过发现你尚未知道的东西来进行知识发现的理念。
如果你真的打算使用聚类——即从数据中学到一些东西——你将不得不检查聚类结果,最好通过一个完全独立的方法,如领域专家。如果他能告诉你,例如,聚类识别出的用户群体是一个非平凡的、尚未深入研究的群体,那么你就成功了。
然而,大多数人希望有一个“一键式”(和一分制)的评估方法,可惜的是,这是不现实的。
哦,还有,“聚类”实际上不是一个机器学习任务。实际上没有涉及到学习。对于机器学习社区来说,它是一个无人关心的丑小鸭。