推文介绍:
如同之前已经接受过的分类算法一样,对于聚类算法来讲同样也会通过一些评价指标来衡量聚类算法的优与劣。在聚类任务中,常见的评价指标有纯度(Purity)、兰德系数(Rand Index, RI)、F值(Fscore)和调整兰德系数(Adjusted Rand Index,ARI)这4种外部评价指标。本节内容将会详细介绍这4中指标的原理与实现方式,同时订阅本专栏也可阅读更多优质内容。
11.6 聚类外部评价指标#
经过前面几节内容的介绍,相信各位读者对于聚类算法已经有了一定的了解。不过正如之前介绍的分类算法模型一样,对于聚类算法来讲同样也会通过一些评价指标来衡量聚类结果的优与劣。在聚类任务中,常见的评价指标有纯度(Purity)、兰德系数(Rand Index, RI)、F值(Fscore)和调整兰德系数(Adjusted Rand Index, ARI)等。之所以称之为外部评价指标(External metrics),是因为这样的评价指标在计算结果的时候需要依赖样本的真实标签,在11.8节内容中我们还将介绍只依赖于样本本身的评价方法,即内部评价指标。下面,分别来对这4种指标一一进行介绍。
假设现在有一批文档,一共包含叉形、圆形与菱形3个类别。此时需要对其进行聚类处理,并且现在某聚类算法的聚类结果如图11-11所示。

从图11-11可知,该聚类算法将所有的文本一共划分成了3个簇。面对这样的聚类结果,应该怎样来对其进行评判呢?
11.6.1 聚类纯度#
在聚类结果的评估标准中,一种最简单最直观的方法就是计算它的聚类纯度。别看纯度听起来很陌生,但实际上和分类问题中的准确率有着异曲同工之妙。因为聚类纯度的总体思想也用聚类正确的样本数除以总的样本数,因此它也经常被称为聚类的准确率。只是对于聚类后的结果我们并不知道每个簇所对应的真实类别,因此需要取每种情况下的最大值。具体地,将纯度的计算公式定义为[1]
$$ P=(\Omega ,\mathbb{C})=\frac{1}{N}\sum\limits_{k}{\underset{j}{\mathop{\max }}\,}|{{\omega }_{k}}\bigcap {{c}_{j}}|\tag{11-7} $$其中,$N$表示总的样本数; $\Omega=\{\omega_1,\omega_2,...,\omega_K\}$表每一个聚类后的簇; 而$\mathbb{C}=\{c_1,_2,...c_J\}$表示正确的类别; $\omega _k$表示聚类后第$k$个簇中的所有样本; $c_j$表示第$j$个类别的真实样本数。在这里$P$的取值范围为$[0,1]$,其值越大表示聚类效果越好。
有了式(11-7)以后就可以通过它来计算图11-11中聚类结果的纯度。对于第1个簇来讲,$|{{\omega }_{1}}\bigcap {{c}_{1}}|=5$,$|{{\omega }_{1}}\bigcap {{c}_{2}}|=1$,$|{{\omega }_{1}}\bigcap {{c}_{3}}|=0$,可以看出此时假设$c_1$对应的是叉形、$c_2$对应的是圆形、$c_3$对应的是菱形(这个对应顺序没有任何关系),因此第1个簇聚类正确的样本数为5。同理,按照这样的方法可以计算得到第2个簇和第3个簇聚类正确的样本数分别为4和3,所以对于图11-11所示的聚类结果来讲,其最终的纯度为
$$ P=\frac{5+4+3}{17}\approx 0.706\tag{11-8} $$11.6.2 兰德系数与$\text{F}$值#
在介绍完纯度这一评价指标后,我们再来看一看兰德系数(Rand Index)和$\text{F}$值。虽然兰德系数听起来是一个陌生的名词,但它的计算过程却与准确率的计算过程类似。同时,虽然这里也有一个叫做$\text{F}$值的指标,并且它的计算过程也和分类指标中的$\text{F}$值类似,但是两者却有着本质的差别。讲了这么多,这两个指标到底该怎么算呢?同分类问题中的混淆矩阵类似,这里也要先定义4种情况以便进行计数,然后进行指标的计算。
1. 计算原理
为了说明兰德系数背后的思想,我们这里还是以图11-11中的聚类结果为例进行说明。现在请各位读者想象一下,把这3个簇想象成3个黑色的布袋。对于任意一个布袋来讲: ①如果从里面任取两个样本均是同一个类别,这就表示这个布袋中的所有样本都算作是聚类正确的。②相反,如果取出来后发现存在两个样本不是同一类别的情况,则说明存在着聚类错误的情况。
其次,对于任意两个布袋来讲。③如果任意从两个布袋中各取一个样本后发现两者均是不同类别的,这就表示两个布袋中的样本都被聚类正确了。④相反,如果发现取出来的两个样本存在相同的情况,则说明此时也存在着聚类错误的情况。各位读者想一想,此时应该再也找不出第5种情况了。由此,可以做出如下定义。
TP: 表示两个同类样本点在同一个簇(布袋)中的情况数量,即同簇同类的样本对。
FP: 表示两个非同类样本点在同一个簇中的情况数量,同簇异类的样本对。
TN: 表示两个非同类样本点分别在两个簇中的情况数量,即异簇异类的样本对。
FN: 表示两个同类样本点分别在两个簇中的情况数量,即异簇同类的样本对。
由此,根据图11-11所示的聚类结果便可以得到如表11-3所示的对混淆矩阵(Pair Confusion Matrix)。

其中表11-3里TP=20的含义是在所有簇的任一簇中任取两个样本均是同一类别的情况总数。TN=72则表示在所有簇的任两簇中各取一个样本均不是同一类别的情况总数。
有了上面各种情况的统计值后便可以定义出兰德系数和$\text{F}$值的计算公式为[1]
$$ \text{RI}=\frac{\text{TP}+\text{TN}}{\text{TP}+\text{FP}+\text{FN}+\text{TN}}\tag{11-9} $$$$ \text{Precision}=\frac{\text{TP}}{\text{TP}+\text{FP}}\tag{11-10} $$$$ \text{Recall}=\frac{\text{TP}}{\text{TP}+\text{FN}} \tag{11-11} $$$$ {{\text{F}}_{\beta }}=(1+{{\beta }^{2}})\frac{\text{Precision}\cdot \text{Recall}}{{{\beta }^{2}}\cdot \text{Precision}+\text{Recall}}\tag{11-12} $$从上面的计算公式来看,式(11-9)~式(11-12)从形式上看都非常像分类问题中的准确率与$\text{F}$值,但是有着本质的区别。同时,在这里$\text{RI}$和$\text{F}_{\beta}$ 的取值范围均为$[0,1]$,取值越大表示聚类效果越好。
2. 计算过程
同时,根据式(11-9)~式(11-12)就能够计算得到图11-11中聚类结果的兰德系数和$\text{F}_1$值分别为
$$ \begin{aligned} &\text{RI}=\frac{20+72}{20+20+24+72}\approx 0.68 \\[1ex] &\text{Precision}=\frac{20}{20+20}=0.5 \\[1ex] &\text{Recall}=\frac{20}{20+24}\approx 0.46 \\[1ex] &{{\text{F}}_{1}}=2\times \frac{0.5\times 0.46}{0.5+0.46}\approx 0.48 \end{aligned}\tag{11-13} $$现在最后的结果计算完了,但还有一个疑问没有解决,即表11-3中各个情况下的值到底应该怎么计算。下面我们就来对每个值进行计算。
(1) $\text{TP}$ 表示两个同类样本点在同一个簇中的情况数量,因此根据图11-11中的聚类结果有
$$ \text{TP}=\binom{5}{2}+\binom{4}{2}+\binom{3}{2}+\binom{2}{2}=20\tag{11-14} $$其分别表示的含义是,对于簇1来讲从5个叉形中取2个的情况; 对于簇2来讲从4个圆形中取2个的情况; 对于簇3来讲从3个菱形中取2个及从2个叉形中取2个的情况。
在计算完成$\text{TP}$后,我们发现其他3种情况都无法单独地进行计算,因为都是交叉混合的情况,因此可以同时计算多种组合下的情况数。
(2) 由4种情况的定义可知,$\text{TP}+\text{FP}$表示的是同一簇中任取两个样本点的情况数,即包含了同类和非同类,因此根据图11-11中的聚类结果有
$$ \text{TP}+\text{FP}=\binom{6}{2}+\binom{6}{2}+\binom{5}{2}=40\tag{11-15} $$(3) 同理,$\text{TP}+\text{FN}$表示的是任意两个同类样本点分布在同一簇和非同一簇的所有情况的总和,所以有
$$ \text{TP}+\text{FN}=\binom{8}{2}+\binom{5}{2}+\binom{4}{2}=44\tag{11-16} $$