一个好的聚类方法可以产生高品质簇,是的簇内相似度高,簇间相似度低。一般来说,评估聚类质量有两个标准,外部评价指标和内部评价指标。
外部质量评价指标是基于已知分类标签数据集进行评价的,这样可以将原有标签数据与聚类输出结果进行对比。
在聚类结果的评估标准中,一种最简单最直观的方法就是计算它的聚类纯度(purity),别看纯度听起来很陌生,但实际上分类的准确率有着异曲同工之妙。因为聚类纯度也用聚类正确的样本数除以总的样本数。
具体的,纯度(Purity)的计算公式定义如下:
其中, N 表示总的样本个数, Ω = { w 1 , w 2 , . . . , w K } \Omega = \{ w_1, w_2,...,w_K\} Ω={w1,w2,...,wK}表示聚类簇 (cluster) 划分, C = { c i , c 2 , . . . , c J } C = \{ c_i, c_2,...,c_J\} C={ci,c2,...,cJ}表示真实类别 (class) 划分。
NMI (Normalized Mutual Information) 即归一化互信息。
其中, I I I 表示互信息(Mutual Information), H 为熵,当 log 取 2 为底时,单位为 bit,取 e 为底时单位为 nat。
其中, P ( w k ) , P ( c j ) , P ( w k ∩ c j ) P(w_k), P(c_j), P(w_k ∩ c_j) P(wk),P(cj),P(wk∩cj)可以分别看作样本 (document) 属于聚类簇 w k w_k wk, 属于类别 c j c_j cj, 和同时属于两者的概率。第二个等价式子则是由概率的极大似然估计推导而来。
互信息 I ( Ω ; C ) I(\Omega; C) I(Ω;C) 表示给定类簇信息 C C C 的前提条件下,类别信息 Ω \Omega Ω的增加量,或者说其不确定度的减少量。直观地,互信息还可以写出如下形式:
NMI则可以解决上述问题,因为熵会随着簇的数目的增长而增大。当 K = N K=N K=N时, H ( Ω ) H(\Omega) H(Ω)会达到其最大值 l o g N log N logN,此时就能保证 NMI 的值较低。之所以采用 ( H ( Ω ) + H ( C ) ) / 2 (H(\Omega) + H(C))/2 (H(Ω)+H(C))/2 作为分母,是因为它是 I ( Ω ; C ) I(\Omega; C) I(Ω;C)的紧上界,因此可以保证 NMI ∈[0, 1]。
与分类问题中的混淆矩阵类似,对于聚类问题中的对混淆矩阵,我们可以做出如下定义:
TP:表示两个同类样本点在同一个簇(布袋)中的情况数量;
FP:表示两个非同类样本点在同一个簇中的情况数量;
TN:表示两个非同类样本点分别在两个簇中的情况数量;
FN:表示两个同类样本点分别在两个簇中的情况数量;
正确决策:
错误决策:
调整兰德系数(ARI)是兰德系数(RI)的一个改进版本,目的是为了去掉随机标签对于兰德系数评估结果的影响。
那具体的ARI该怎么计算呢?下面我们还是以上图中的聚类结果为例来进行讲解。
如上图所示, X X X(cluster) 表示聚类算法认为的聚类结果,每个圆圈代表一个簇;而 Y Y Y 表示我们根据正确标签对聚类结果标记后的结果(也就是每个样本的形状,形状一样则属于同一类)。因此,根据聚类得到的结果和真实标签我们便能得到如下所示的列联表( contingency table):
其中 X = { X 1 , X 2 , . . . , X r } X = \{X_1,X_2,...,X_r\} X={X1,X2,...,Xr}表示聚类得到 r 个簇的集合,而 Y = { Y 1 , Y 2 , . . . , Y s } Y = \{Y_1,Y_2,...,Y_s\} Y={Y1,Y2,...,Ys}表示根据样本正确标签对聚类结果修正后的集合,
n i j n_{ij} nij表示 X i X_i Xi 与 Y j Y_j Yj相交部分的样本数量,即 n i j = X i ∩ Y j n_{ij} = X_i ∩ Y_j nij=Xi∩Yj。
根据这张列联表我们便能够得到ARI的计算公式:
其中 ARI 的取值范围为[-1, 1],越大也就表示聚类效果越好。
虽然上面这张表和公式开起来很复杂,但其实只要你看一遍具体的计算过程就会发现也就那么回事。我们就能够得到如下所示的列联表:
根据此表可得:
所以有:
同时,根据各部分的意义我们还可以将公式写成:
Purity, NMI, RI 等上述指标均需要给定 truth label 才能对 cluster label 进行评价,但是均不要求后者的类标与前者一致。那什么时候需要进行类标签的 best map 呢?例如,我们需要对预测结果和真实值之间统计聚类正确的比例时就需要进行最佳类标的重现分配,这样才能保证统计的正确。
聚类精确度 (Accuracy, AC) 用于比较获得标签和数据提供的真实标签。
其中, r i , s i r_i, s_i ri,si 分别表示数据 x i x_i xi所对应的获得的标签和真实标签, n n n 为数据总的个数, δ \delta δ 表示指示函数如下:
而式中的 map 则表示最佳类标的重现分配,以才能保证统计的正确。一般的该最佳重分配可以通过匈牙利算法 (Kuhn-Munkres or Hungarian Algorithm) 实现,从而在多项式时间内求解该任务(标签)分配问题。
内部评价指标是利用数据集的属性特征来评价聚类算法的优劣。通过计算总体的相似度,簇间平均相似度或簇内平均相似度来评价聚类质量。
紧密度(Compactness):每个聚类簇中的样本点到聚类中心的平均距离。对应聚类结果,需要使用所有簇的紧密度的平均值来衡量聚类算法和聚类各参数选取的优劣。紧密度越小,表示簇内的样本点越集中,样本点之间聚类越短,也就是说簇内相似度越高。
分割度(Seperation):是个簇的簇心之间的平均距离。分割度值越大说明簇间间隔越远,分类效果越好,即簇间相似度越低。
误差平方和 (SSE:Sum of squares of errors):类中数据聚类距离类中心的平方损失之和,即K-means算法的优化目标,表示为:
其中, x i k x_{ik} xik表示第k个类中第i个样本点, u k u_k uk表示第k个类的中心点。
轮廓系数(Silhouette Coefficient)是聚类效果好坏的一种评价方式。轮廓系数取值范围为[-1,1],取值越接近1则说明聚类性能越好,相反,取值越接近-1则说明聚类性能越差。为了求SC,我们作出以下定义:
则,针对某个样本的轮廓系数s为:
而聚类总的轮廓系数SC为:
轮廓系数优点:
轮廓系数的缺点:
Calinski-Harabasz指数的本质是:簇间距离与簇内距离的比值,且整体计算过程与方差计算方式类似,所以又将其称之为方差比准则。
CH指标的计算公式为:
其中 B k B_k Bk为类间的协方差矩阵, W k W_k Wk类内数据的协方差矩阵,详细公式如下:
其中 c q c_q cq表示类q的中心点, c e c_e ce表示数据集的中心点, n q n_q nq表示类q中的数据的数目, C q C_q Cq表示类q的数据集合。
Calinski-Harabasz指数的分数越大说明越好(类别内部协方差越小越好,类别之间协方差越大越好)。
Davies-Bouldin Index(由大卫L·戴维斯和唐纳德·Bouldin提出)是一种评估是一种评估度量的聚类算法。
DB计算任意两类别的类内距离平均之和除以该两类中心距离,并求最大值。DB越小意味着类内距离越小同时类间距离越大。
其中 s i s_i si表示类中样本点分散度, M i j M_{ij} Mij则就是第 i 类与第 j 类中心的距离。计算公式如下所示:
其中 X i j X_{ij} Xij表示第 i 类中第 j 个数据点; A i A_i Ai表示第 i 类的中心;n表示第i类中数据点的个数;
【1】https://zhuanlan.zhihu.com/p/53840697
【2】https://zhuanlan.zhihu.com/p/343667804
【3】https://blog.csdn.net/xiaolong124/article/details/126345406