9.1 聚类任务
在无监督学习中,训练样本的标记信息是未知的,目标是通过对无标记样本的学习来揭示数据的内在性质及规律。
本章中,我们探索其中常用的“聚类"算法。它的目的是把数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个簇(cluster)。
聚类既能作为一个独立的过程,去探索数据之间的内在联系,也可以作为分类等其他学习任务的前驱过程.
9.2 性能度量
聚类性能度量也叫做聚类“有效性指标”(validity index)。一方面,与监督学习中的性能度量作用类似,我们需要一种评价指标来聚类算法的好坏;另一方面,如果我们能明确最终要用的指标,那么我们就可以直接将其作为优化目标。
聚类性能度量大概有两类,一类是把聚类结果与某个参考模型进行比较,称为外部指标,另一类是直接考察聚类结果而不用任何参考模型,称为内部指标。
对于数据集D={
x1,x2,...,xm}D=\{x_1,x_2,...,x_m\}D={
x1,x2,...,xm},我们假设通过聚类给出的簇划分为C={
C1,C2,...,Ck}C=\{C_1,C_2,...,C_k\}C={
C1,C2,...,Ck},参考模型给出的簇划分为C∗={
C1∗,C2∗,...,Ck∗}C^*=\{C^*_1,C^*_2,...,C^*_k\}C∗={
C1∗,C2∗,...,Ck∗}我们将样本两两匹配考虑
a=∣SS∣,SS={
(xi,xj)∣λi=λj,λi∗=λj∗,i<j}b=∣SD∣,SD={
(xi,xj)∣λi=λj,λi∗≠λj∗,i<j}c=∣DS∣,DS={
(xi,xj)∣λi≠λj,λi∗=λj∗,i<j}d=∣DD∣,DD={
(xi,xj)∣λi≠λj,λi∗≠λj∗,i<j}\begin{aligned} a=&|SS|, &SS=&\{(x_i,x_j)|\lambda_i=\lambda_j,\lambda^*_i=\lambda^*_j,i\lt j\} \\ b=&|SD|, &SD=&\{(x_i,x_j)|\lambda_i=\lambda_j,\lambda^*_i\ne\lambda^*_j,i\lt j\} \\ c=&|DS|, &DS=&\{(x_i,x_j)|\lambda_i\ne\lambda_j,\lambda^*_i=\lambda^*_j,i\lt j\} \\ d=&|DD|, &DD=&\{(x_i,x_j)|\lambda_i\ne\lambda_j,\lambda^*_i\ne\lambda^*_j,i\lt j\} \end{aligned} a=b=c=d=∣SS∣,∣SD∣,∣DS∣,∣DD∣,SS=SD=DS=DD={
(xi,xj)∣λi=λj,λi∗=λj∗,i<j}{
(xi,xj)∣λi=λj,λi∗̸=λj∗,i<j}{
(xi,xj)∣λi̸=λj,λi∗=λj∗,i<j}{
(xi,xj)∣λi̸=λj,λi∗̸=λj∗,i<j}
基于以上的定义,我们可以导出下列常用的外部指标:
- Jaccard 系数
JC=aa+b+cJC=\frac{a}{a+b+c}JC=a+b+ca - FM 指数
FMI=aa+baa+cFMI=\sqrt{\frac{a}{a+b} \frac{a}{a+c}}FMI=a+baa+ca - Rand 指数
RI=a+dm(m−1)/2,m=a+b+c+dRI=\frac{a+d}{m(m-1)/2},m=a+b+c+dRI=m(m−1)/2a+d,m=a+b+c+d
以上的指标均分布在[0, 1]区间,越大越好。
考虑聚类结果的簇划分C={
C1,C2,...,Ck}C=\{C_1,C_2,...,C_k\}C={
C1