聚类往往不像分类一样有一个最优化目标和学习过程,而是一个统计方法,将相似的数据和不相似的数据分开。就我个人理解,在数据质量高的情况下,一个好的聚类结果表明了数据中相对稳定的某种“模式 or 分布”,这个模式不会因为个别数据点的增删改而改变,且能够将数据尽可能分开。
关于无监督聚类的评价指标,在完全没有ground-truth的情况下,我了解到的方法有以下几个:聚类趋势(聚类前)
霍普金斯统计量(Hopkins Statistic)评估给定数据集是否存在有意义的可聚类的非随机结构。如果一个数据集是有随机的均匀的点生成的,虽然也可以产生聚类结果,但该结果没有意义。聚类的前提需要数据是非均匀分布的。该值在区间[0, 1]之间,[0.01, 0.3]表示数据结构regularly spaced,该值为0.5时数据是均匀分布的,[0.7, 0.99]表示聚类趋势很强。聚类质量
因为没有标签,所以一般通过评估类的分离情况来决定聚类质量。类内越紧密,类间距离越小则质量越高。我用到过的有sklearn中的Silhouette Coefficient和Calinski-Harabaz Index,sklearn里面解释的很清楚,直接把数据和聚类结果作为输入就可以了。交叉验证
这个验证主要是针对kmeans等划分聚类方法。参见《数据挖掘:概念与技术》中的10.6.2,原文如下:首先,把给定的数据集D划分成m个部分。然后,使用m-1各部分建立一个聚类模型,并使用剩下的一部分检验聚类的质量。例如,对于检验集中的每个点,我们可以找出最近的形心。因此,我们可以使用检验集中的所有点与他们的最近形心之间的距离的平方和来度量聚类模型拟合检验集的程度。对于任意整数k>0,