1 前言
如同之前介绍的其它算法模型一样,对于聚类来讲我们同样会通过一些评价指标来衡量聚类算法的优与劣。在聚类任务中,常见的评价指标有:纯度(Purity)、兰德系数(Rand Index, RI)、F值(F-score)和调整兰德系数(Adjusted Rand Index,ARI)。同时,这四种评价指标也是聚类相关论文中出现得最多的评价方法。下面,我们就来对这些算法一一进行介绍。
2 聚类评价指标
假设现在有一批文档一共包含有叉形、圆形与菱形三个类别,此时你需要对其进行聚类处理,且现在某聚类算法的聚类结果如图1所示:

如图1所示,该聚类算法一共将所有的文本划分成了三个簇,那么我们该怎么来对这一结果进行评判呢?

2.1聚类纯度
在聚类结果的评估标准中,一种最简单最直观的方法就是计算它的聚类纯度(purity),别看纯度听起来很陌生,但实际上和分类问题中的准确率有着异曲同工之妙。因为聚类纯度的总体思想也用聚类正确的样本数除以总的样本数,因此它也经常被称为聚类的准确率。只是对于聚类后的结果我们并不知道每个簇所对应的真实类别,因此需要取每种情况下的最大值。具体的,纯度的计算公式定义如下:
P=(Ω,C)=1N∑kmaxj∣ωk∩cj∣(1) \begin{aligned} P=(\Omega,\mathbb{C})=\frac{1}{N}\sum_{k}\max_{j}|\omega_k\cap c_j| \end{aligned}\tag{1} P=(Ω,C)=N1k∑jmax∣ωk∩cj∣(1)
其中NNN表示总的样本数;Ω={
ω1,ω2,...,ωK}\Omega=\{\omega_1,\omega_2,...,\omega_K\}Ω={
ω1,ω2,...,ωK}表示一个个聚类后的簇,而C={
c1,2,...cJ}\mathbb{C}=\{c_1,_2,...c_J\}C={
c1,2,...cJ}表示正确的类别;ωk\omega_kωk表示聚类后第kkk个簇中的所有样本,cjc_jcj表示第jjj个类别中真实的样本。在这里PPP的取值范围为[0,1][0,1][0,1],越大表示聚类效果越好。
有了公式(1)(1)(1)之后,我们就可以通过它来计算图1中聚类结果的纯度。对于第一个簇来说:∣ω1∩c1∣=5|\omega_1\cap c_1|=5∣ω1∩c1∣=5,∣ω1∩c2∣=1|\omega_1\cap c_2|=1∣ω1∩c2∣=1,∣ω1∩c3∣=0|\omega_1\cap c_3|=0∣ω1∩c3∣=0,可以看出我们此时假设c1c_1c1对应的是叉形、c2c_2c2对应的是圆形、c3c_3c3对应的是菱形(这个对应顺序没有任何关系)。因此第一个簇聚类正确的样本数就为555。同理,按照这样的方法可以计算得到第二个簇和第三个簇聚类正确的样本数444和333。所以,对于图1所示的聚类结果来说,其最终的纯度为:
P=5+4+317=0.706(2) P=\frac{5+4+3}{17}=0.706\tag{2} P=175+4+3=0.706(2)
2.2 兰德系数与F值
2.2.1 计算原理
在介绍完了纯度这一评价指标后,我们再来看看兰德系数(Rand Index)和F值。虽然兰德系数听起来是一个陌生的名词,但它的计算过程却也与准确率的计算过程类似。同时,虽然这里也有一个叫做F值的指标,并且它的计算过程也和分类指标中的F值类似,但是两者却有着本质的差别。说了这么多,那这两个指标到底该怎么算呢?同分类问题中的混淆矩阵类似,这里我们也要先定义四种情况进行计数,然后再进行指标的计算。
为了说明兰德系数背后的思想,我们还是以图1中的聚类结果为例进行说明(为了方便观察,我们再放一张图在这里):

现在你想象一下,把这三个簇想象成三个黑色的布袋。那么对于任意一个布袋来说:①如果你从里面任取两个样本出来均是同一个类别,这就表示这个布袋中的所有样本都算作是聚类正确的;②相反,如果取出来发现存在两个样本不是同一类别的情况,则就说明存在着聚类错误的情况。其次,对于任意两个布袋来说:③如果你任意从两个布袋中各取一个样本发现两者均是不同类别,这就表示两个布袋中的样本都被聚类正确了;④相反,如果发现取出来的两个样本存在相同的情况,则说明此时也存在着聚类错误的情况。大家想一想,应该再也找不出第五种情况了。由此,我们可以做出如下定义:
- TPTPTP:表示两个同类样本点在同一个簇(布袋)中的情况数量;
- FPFPFP:表示两个非同类样本点在同一个簇中的情况数量;
- TNTNTN:表示两个非同类样本点分别在两个簇中的情况数量;
- FNFNFN:表示两个同类样本点分别在两个簇中的情况数量;
由此,我们便能得到如下所示的对混淆矩阵(Pair Confusion Matrix):

其中图2右边所示的矩阵就是根据图1中的聚类结果计算而来。因此,TP=20TP=20TP=20的含义就是在所有簇中,任一簇中任取两个样本均是同一类别的情况总数;TN=72TN=72TN=72则表示在所有簇中,任两簇中各取一个样本均不是同一类别的情况总数。
有了上面各种情况的统计值,我们就可以定义出兰德系数和F值的计算公式:
RI=TP+TNTP+FP+FN+TN(3) RI=\frac{TP+TN}{TP+FP+FN+TN}\tag{3} RI=TP+FP+FN+TNTP+TN(3)
Precision=TPTP+FPRecall=TPTP+FNFβ=(1+β2)Precision⋅Recallβ2⋅Precision+Recall(4) \begin{aligned} Precision&=\frac{TP}{TP+FP}\\[2ex] Recall&=\frac{TP}{TP+FN}\\[2ex] F_{\beta}&=(1+\beta^2)\frac{Precision\cdot Recall}{\beta^2\cdot Precision+Recall} \end{aligned}\tag{4} PrecisionRecallFβ=TP+FPTP=TP+FNTP=(1+