Chapter 9 Clustering
9.1 聚类任务
聚类(clustering)是一种研究多、应用广的一种无监督学习(unsupervised learning)算法。将数据集中的样本划分为若干不相交子集,每个子集亦称为‘簇’(cluster)。
样本集含有m个n维的无标记样本:
D
=
{
x
1
,
x
2
,
.
.
.
,
x
m
}
D=\left\{ \boldsymbol{x}_1,\boldsymbol{x}_{2},...,\boldsymbol{x}_m \right\}
D={x1,x2,...,xm}
其中
x
i
=
(
x
i
1
;
x
i
2
;
.
.
.
;
x
i
n
)
\boldsymbol{x}_i=\left( x_{i1};x_{i2};...;x_{in} \right)
xi=(xi1;xi2;...;xin)为n维向量
聚类算法运行后将样本集划分为k个不相交的簇:
{
C
l
∣
l
=
1
,
2
,
.
.
.
,
k
}
\left\{ C_l\,\, \mid \,\,l=1,2,...,k \right\}
{Cl∣l=1,2,...,k}
则样本
x
j
\boldsymbol{x}_j
xj的簇标记(cluster label)为:
λ
j
∈
{
1
,
2
,
.
.
.
,
k
}
\lambda _j\in \left\{ 1,2,...,k \right\}
λj∈{1,2,...,k}
将每个样本的簇标记整合成向量,得到样本集的聚类结果:
λ
=
(
λ
1
,
λ
2
,
.
.
.
,
λ
m
)
\boldsymbol{\lambda }=\left( \lambda _1,\lambda _2,...,\lambda _m \right)
λ=(λ1,λ2,...,λm)
9.2 性能度量
聚类性能度量亦称聚类有效性指标(validty index),用以评价聚类结果的好坏,有些亦可作为聚类过程的优化目标。
- 外部指标(external index)
将聚类结果与参考模型(reference model)比较,当聚类划分的簇为 C = { C 1 , C 2 , . . . , C k } \boldsymbol{C}=\left\{ C_1,C_2,...,C_k \right\} C={C1,C2,...,Ck},参考模型划分的簇为 C ∗ = { C 1 ∗ , C 2 ∗ , . . . , C k ∗ } \boldsymbol{C}^*=\left\{ C_{1}^{*},C_{2}^{*},...,C_{k}^{*} \right\} C∗={C1∗,C2∗,...,Ck∗}时,定义:
在C中隶属相同簇,在C*中隶属相同簇的样本对集合SS(Same Same): a = ∣ S S ∣ , ∣ S S ∣ = { ( x j , x j ) ∣ λ i = λ j , λ i ∗ = λ j ∗ , i < j } a=\left| SS \right|, \left| SS \right|=\left\{ \left( x_j,x_j \right) \,\, \mid \,\,\lambda _i=\lambda _j,\lambda _{i}^{*}=\lambda _{j}^{*},i<j \right\} a=∣SS∣,∣SS∣={(xj,xj)∣λi=λj,λi∗=λj∗,i<j}
在C中隶属相同簇,在C*中隶属相同簇的样本对集合SS(Same Same): a = ∣ S S ∣ , ∣ S S ∣ = { ( x j , x j ) ∣ λ i = λ j , λ i ∗ = λ j ∗ , i < j } a=\left| SS \right|, \left| SS \right|=\left\{ \left( x_j,x_j \right) \,\, \mid \,\,\lambda _i=\lambda _j,\lambda _{i}^{*}=\lambda _{j}^{*},i<j \right\} a=∣SS∣,∣SS∣={(xj,xj)∣λi=λj,λi∗=λj∗,i<j}
在C中隶属相同簇,在C*中隶属不同簇的样本对集合SD(Same Different): b = ∣ S S ∣ , ∣ S S ∣ = { ( x j , x j ) ∣ λ i = λ j , λ i ∗ ≠ λ j ∗ , i < j } b=\left| SS \right|, \left| SS \right|=\left\{ \left( x_j,x_j \right) \,\, \mid \,\,\lambda _i=\lambda _j,\lambda _{i}^{*}\ne \lambda _{j}^{*},i<j \right\} b=∣SS∣,∣SS∣={(xj,xj)∣λi=λj,λi∗=λj∗,i<j}
在C中隶属不同簇,在C*中隶属相同簇的样本对集合DS(Different Same): c = ∣ S S ∣ , ∣ S S ∣ = { ( x j , x j ) ∣ λ i ≠ λ j , λ i ∗ = λ j ∗ , i < j } c=\left| SS \right|, \left| SS \right|=\left\{ \left( x_j,x_j \right) \,\, \mid \,\,\lambda _i\ne \lambda _j,\lambda _{i}^{*}=\lambda _{j}^{*},i<j \right\} c=∣SS∣,∣SS∣={(xj,xj)∣λi=λj,λi∗=λj∗,i<j}
在C中隶属不同簇,在C*中隶属不同簇的样本对集合DD(Different Different): d = ∣ S S ∣ , ∣ S S ∣ = { ( x j , x j ) ∣ λ i ≠ λ j , λ i ∗ ≠ λ j ∗ , i < j } d=\left| SS \right|, \left| SS \right|=\left\{ \left( x_j,x_j \right) \,\, \mid \,\,\lambda _i\ne \lambda _j,\lambda _{i}^{*}\ne \lambda _{j}^{*},i<j \right\} d=∣SS∣,∣SS∣={(xj,xj)∣λi=λj,λi∗=λj∗,i<j}
由上述定义得到下表中聚类性能度量评价外部指标:
性能度量外部指标 | 表达式([0,1]内越大越好) |
---|---|
Jaccard系数 | J C = a a + b + c JC=\frac{a}{a+b+c} JC=a+b+ca |
FM系数 | F M I = a a + b ⋅ a a + c FMI=\sqrt{\frac{a}{a+b}\cdot \frac{a}{a+c}} FMI=a+ba⋅a+ca |
Rand系数 | R I = 2 ( a + d ) m ( m − 1 ) RI=\frac{2\text{(}a+d\text{)}}{m\left( m-1 \right)} RI=m(m−1)2(a+d) |
- 内部指标(internal index)
当聚类划分的簇为 C = { C 1 , C 2 , . . . , C k } \boldsymbol{C}=\left\{ C_1,C_2,...,C_k \right\} C={C1,C2,...,Ck},定义:
样本之间的距离(以2-范数/欧式距离为例): d i s t ( x i , x j ) = ∣ ∣ x i − x j ∣ ∣ 2 = ∣ x i 1 − x j 1 ∣ 2 + ∣ x i 2 − x j 2 ∣ 2 + . . . + ∣ x i n − x j n ∣ 2 dist\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right) =||\boldsymbol{x}_i-\boldsymbol{x}_j||_2=\sqrt{|\boldsymbol{x}_{i1}-\boldsymbol{x}_{j1}|^2+|\boldsymbol{x}_{i2}-\boldsymbol{x}_{j2}|^2+...+|\boldsymbol{x}_{in}-\boldsymbol{x}_{jn}|^2} dist(xi,xj)=∣∣xi−xj∣∣2=∣xi1−xj1∣2+∣xi2−xj2∣2+...+∣xin−xjn∣2
簇的中心点: μ = 1 ∣ C ∣ ∑ i = 1 ∣ C ∣ x i \mu =\frac{1}{|C|}\sum_{i=1}^{|C|}{x_i} μ=∣C∣1i=1∑∣C∣xi
簇C内样本间平均距离: a v g ( C ) = 2 ∣ C ∣ ( ∣ C ∣ − 1 ) ∑ d i s t ( x i , x j ) , 1 ⩽ i < j ⩽ ∣ C ∣ avg\left( C \right) =\frac{2}{|C|\left( |C|-1 \right)}\sum{dist\left( \boldsymbol{x}_i,\boldsymbol{x}_j \right)}\,\, ,1\leqslant i<j\leqslant |C| avg(C)=∣C∣(∣C∣−1)2∑dist(xi,xj),1⩽i<j⩽∣C∣
簇C内样本间最远距离:
d i a m ( C ) = max d i s t ( x i , x j ) , 1 ⩽ i < j ⩽ ∣ C ∣ diam\left( C \right) =\max dist\left( \boldsymbol{x}_i\text{,}\boldsymbol{x}_j \right) , 1\leqslant i<j\leqslant |C| diam(C)=maxdist(xi,xj),1⩽i<j⩽∣C∣
簇 C i C_i Ci与簇 C i C_i Ci最近样本间的距离: d min ( C i , C j ) = min d i s t ( x i , x j ) , x i ∈ C i , x j ∈ C j d_{\min}\left( C_i,C_j \right) =\min dist\left( \boldsymbol{x}_i,\boldsymbol{x}_j \right) , x_i\in C_i,x_j\in C_j dmin(Ci,Cj)=mindist(xi,xj),xi∈Ci,xj∈Cj
簇 C i C_i Ci与簇 C i C_i Ci中心点之间的距离: d c e n ( C i , C j ) = d i s t ( μ i , μ j ) d_{cen}\left( C_i,C_j \right) =dist\left( \boldsymbol{\mu }_i,\boldsymbol{\mu }_j \right) dcen(Ci,Cj)=dist(μi,μj)
由上述定义得到下表中聚类性能度量评价内部指标:
性能度量内部指标 | 表达式 |
---|---|
DB指数(越小越好) | D B I = 1 k ∑ i = 1 k max j ≠ i ( a v g ( C i ) + a v g ( C j ) d c e n ( C i , C j ) ) DBI=\frac{1}{k}\sum_{i=1}^k{\underset{j\ne i}{\max}\left( \frac{avg\left( C_i \right) +avg\left( C_j \right)}{d_{cen}\left( C_i,C_j \right)} \right)} DBI=k1∑i=1kj=imax(dcen(Ci,Cj)avg(Ci)+avg(Cj)) |
Dunn指数(越大越好) | D I = min 1 ⩽ i ⩽ k { min j ≠ i ( d min ( C i , C j ) max 1 ⩽ l ⩽ k d i a m ( C l ) ) } DI=\underset{1\leqslant i\leqslant k}{\min}\left\{ \underset{j\ne i}{\min}\left( \frac{d_{\min}\left( C_i,C_j \right)}{\underset{1\leqslant l\leqslant k}{\max}\,\,diam\left( C_l \right)} \right) \right\} DI=1⩽i⩽kmin{j=imin(1⩽l⩽kmaxdiam(Cl)dmin(Ci,Cj))} |
9.3 距离度量
d i s t ( ⋅ , ⋅ ) dist\left( \cdot ,\cdot \right) dist(⋅,⋅) 是一种距离度量(distance measure),需要满足非负性、同一性、对称性、直递性。
- 有序属性距离度量——闵可夫斯基距离(minkowski distance)
p 取值 | 名称 | 表达式 |
---|---|---|
p ⩾ 1 p\geqslant 1 p⩾1 | 闵可夫斯基距离 | d i s t m k ( x i , x j ) = ( ∑ u = 1 n ∥ x i u − x j u ∥ p ) 1 p dist_{mk}\left( \boldsymbol{x}_i,\boldsymbol{x}_j\right)=\left( \sum_{u=1}^n{\|x_{iu}-x_{ju}\|^p} \right) ^{\frac{1}{p}} distmk(xi,xj)=(∑u=1n∥xiu−xju∥p)p1 |
p = 1 p=1 p=1 | 曼哈顿距离 | d i s t m a n ( x i , x j ) = ∥ ∥ x i − x j ∥ ∥ 1 = ∥ x i 1 − x j 1 ∥ + ∥ x i 2 − x j 2 ∥ + . . . + ∥ x i n − x j n ∥ dist_{man}\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right) =\|\|\boldsymbol{x}_i-\boldsymbol{x}_j\|\|_1=\|x_{i1}-x_{j1}\|+\|x_{i2}-x_{j2}\|+...+\|x_{in}-x_{jn}\| distman(xi,xj)=∥∥xi−xj∥∥1=∥xi1−xj1∥+∥xi2−xj2∥+...+∥xin−xjn∥ |
p = 2 p=2 p=2 | 欧式距离(多维向量常用) | d i s t e d ( x i , x j ) = ∥ ∥ x i − x j ∥ ∥ 2 = ∥ x i 1 − x j 1 ∥ 2 + ∥ x i 2 − x j 2 ∥ 2 + . . . + ∥ x i n − x j n ∥ 2 dist_{ed}\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right) =\|\|\boldsymbol{x}_i-\boldsymbol{x}_j\|\|_2=\sqrt{\|x_{i1}-x_{j1}\|^2+\|x_{i2}-x_{j2}\|^2+...+\|x_{in}-x_{jn}\|^2} disted(xi,xj)=∥∥xi−xj∥∥2=∥xi1−xj1∥2+∥xi2−xj2∥2+...+∥xin−xjn∥2 |
-
无序属性距离度量——Value Different Metric(VDM)
属性u上取值为a的样本数量定义为 m u , a m_{u,a} mu,a
在第i个样本簇中,在属性u上取值为a的样本数量定义为 m u , a , i m_{u,a,i} mu,a,i
样本簇数量为k
在属性u上两个离散值a,b之间的VDM距离为:
V D M p ( a , b ) = ∑ i = 1 k ∣ m u , a , i m u , a − m u , b , i m u , b ∣ p VDM_p\left( a,b \right) =\sum_{i=1}^k{|\frac{m_{u,a,i}}{m_{u,a}}-\frac{m_{u,b,i}}{m_{u,b}}|^p} VDMp(a,b)=i=1∑k∣mu,amu,a,i−mu,bmu,b,i∣p -
混合属性距离度量——结合闵可夫斯基距离和VDM距离,假设样本集有 n c n_{c} nc个有序属性, n − n c n-n_{c} n−nc个无序属性,则有:
M i n k o v D M p ( x i , x j ) = ( ∑ u = 1 n c ∣ x i u − x j u ∣ p + ∑ u = n c + 1 n V D M p ( x i u − x j u ) ) 1 p MinkovDM_p\left( \boldsymbol{x}_{\boldsymbol{i}},\boldsymbol{x}_{\boldsymbol{j}} \right) =\left( \sum_{u=1}^{n_c}{|x_{iu}-x_{ju}|^p}+\sum_{u=n_c+1}^n{VDM_p\left( x_{iu}-x_{ju} \right)} \right) ^{\frac{1}{p}} MinkovDMp(xi,xj)=(u=1∑nc∣xiu−xju∣p+u=nc+1∑nVDMp(xiu−xju))p1
9.4 原型聚类
原型聚类(基于原型的聚类,prototype-based clustering)假设聚类结构可以通过一组原型刻画。原型聚类算法一般先对原型初始化,然后对原型进行更新迭代求解。以下几种为著名的原型聚类算法。
- k 均值算法(k-means)
k均值算法的优化目标是最小化样本集的平方误差:
E = ∑ i = 1 k ∑ x i ∈ C i ∣ ∣ x − μ i ∣ ∣ 2 2 E=\sum_{i=1}^k{\sum_{x_i\in C_i}{||\boldsymbol{x}-\boldsymbol{\mu }_i||_{2}^{2}}} E=i=1∑kxi∈Ci∑∣∣x−μi∣∣22
平方误差 E E E描述了簇内样本围绕均值向量 μ i \boldsymbol{\mu }_i μi的紧密程度,平方误差 E E E越小,簇内样本越精密。最小化平方误差 E E E需要考察所有可能的簇划分(NP难问题),另一可行的方法是对均值向量初始化,采用贪心策略进行迭代优化,直到满足要求。
- 学习向量量化(Learning Vector Quantization)
LVQ假设样本带标记,试图找到一组原型向量来刻画聚类结构。
LVQ算法的样本集为
D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } D=\left\{ \left( \boldsymbol{x}_1,y_1 \right) ,\left( \boldsymbol{x}_2,y_2 \right) ,...,\left( \boldsymbol{x}_m,y_m \right) \right\} D={(x1,y1),(x2,y2),...,(xm,ym)}
其中 x i = ( x i 1 ; x i 2 ; . . . ; x i n ) \boldsymbol{x}_i=\left( x_{i1};x_{i2};...;x_{in} \right) xi=(xi1;xi2;...;xin)为 n n n 维向量
LVQ的优化目标是学得 q q q 个 n n n 维原型向量:
{ p 1 , p 2 , . . . , p q } \left\{ \boldsymbol{p}_1,\boldsymbol{p}_2,...,\boldsymbol{p}_q \right\} {p1,p2,...,pq}
每个原型向量代表一个聚类簇,簇标记:
{ t 1 , t 2 , . . . , t q } \left\{ t_1,t_2,...,t_q \right\} {t1,t2,...,tq}
其中 t i t_i ti ∈ y \in \boldsymbol{y} ∈y 。
- 高斯混合聚类(Mixture-of-Gaussian)
高斯混合聚类采用概率模型(高斯分布)来表达聚类原型。簇划分由原型对应的后验概率确定。
高斯分布定义:对 n n n 维样本空间 χ \boldsymbol{\chi } χ 中的随机向量 x \boldsymbol{x} x ,若 x \boldsymbol{x} x 服从高斯分布,其概率密度分布函数为:
p ( x ∣ μ , Σ ) = 1 ( 2 π ) n 2 ∣ Σ ∣ 1 2 e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) p\left( \boldsymbol{x}|\boldsymbol{\mu },\boldsymbol{\varSigma } \right) =\frac{1}{\left( 2\pi \right) ^{\frac{n}{2}}|\boldsymbol{\varSigma }|^{\frac{1}{2}}}e^{-\frac{1}{2}\left( \boldsymbol{x}-\boldsymbol{\mu } \right) ^T\boldsymbol{\varSigma }^{-1}\left( \boldsymbol{x}-\boldsymbol{\mu } \right)} p(x∣μ,Σ)=(2π)2n∣Σ∣211e−21(x−μ)TΣ−1(x−μ)
其中 Σ \boldsymbol{\varSigma } Σ 是 n n nx n n n 维协方差矩阵, μ \boldsymbol{\mu } μ 为 n n n 维均值向量,由 Σ \boldsymbol{\varSigma } Σ 、 μ \boldsymbol{\mu } μ 可确定高斯分布。
引入混合系数 α i \alpha _i αi ( α i > 0 且 ∑ i = 1 k α i = 1 \alpha _i>0 且 \sum_{i=1}^k{\alpha _i}=1 αi>0且∑i=1kαi=1)组成高斯混合成分布 α i ⋅ p ( x ∣ μ , Σ ) \alpha _i\cdot p\left( \boldsymbol{x}|\boldsymbol{\mu },\boldsymbol{\varSigma } \right) αi⋅p(x∣μ,Σ) ,定义高斯混合分布:
p M ( x ) = ∑ i = 1 k α i ⋅ p ( x ∣ μ , Σ ) p_M\left( \boldsymbol{x} \right) =\sum_{i=1}^k{\alpha _i}\cdot p\left( \boldsymbol{x}|\boldsymbol{\mu },\boldsymbol{\varSigma } \right) pM(x)=i=1∑kαi⋅p(x∣μ,Σ)
9.5 密度聚类
密度聚类(density-based clustering)假设聚类结构可以根据样本分布密度确定,并基于可连接样本不断扩展聚类簇。
- Density-based spatical Clustering of application with noise (DBSCAN)
DBSCAN是一种著名的密度聚类算法,使用两个邻域参数( ϵ , M i n P t s \epsilon \,,\,MinPts ϵ,MinPts)来描述一组领域(neigh-borhood),用以刻画样本分布的紧密程度。有如下定义:
ϵ \epsilon\, ϵ-邻域:在样本集D中,样本 x i x_{i} xi 的邻域包含在样本集D中与样本 x i x_{i} xi 距离不大于 ϵ \epsilon\, ϵ的样本:
N ϵ ( x i ) = { x j ∈ D ∣ d i s t ( x i , x j ) ⩽ ϵ } N_{\epsilon}\left( \boldsymbol{x}_i \right) =\left\{ \boldsymbol{x}_j\in D\,\, \mid \,\,dist\left( \boldsymbol{x}_i,\boldsymbol{x}_j \right) \leqslant \epsilon \right\} Nϵ(xi)={xj∈D∣dist(xi,xj)⩽ϵ}
M i n P t s MinPts MinPts:若样本 x i \boldsymbol{x}_i xi 的 ϵ \epsilon\, ϵ-邻域内样本数量大于 M i n P t s MinPts MinPts,则 x i \boldsymbol{x}_i xi 是一个核心对象(core object):
∣ N ϵ ( x i ) ∣ ⩾ M i n P t s , x i 为 核 心 对 象 |N_{\epsilon}\left( \boldsymbol{x}_i \right) | \geqslant MinPts,\ \ \boldsymbol{x}_i 为核心对象 ∣Nϵ(xi)∣⩾MinPts, xi为核心对象
密度直达: x j \boldsymbol{x}_j xj 在 x i \boldsymbol{x}_i xi 邻域内,称 x j \boldsymbol{x}_j xj 可由 x i \boldsymbol{x}_i xi 密度直达。
密度可达: x j \boldsymbol{x}_j xj 可通过一个或多个中间样本(链式间接直达)对 x i \boldsymbol{x}_i xi 密度直达,称 x j \boldsymbol{x}_j xj 可由 x i \boldsymbol{x}_i xi 密度可达。
密度相连:样本 x i \boldsymbol{x}_i xi 与 x j \boldsymbol{x}_j xj 可通过中间样本 x k \boldsymbol{x}_k xk 密度可达,称 x i \boldsymbol{x}_i xi 与 x j \boldsymbol{x}_j xj 密度相连。
簇:有密度可达关系导出的最大密度相连的样本集合。将所有与 x i \boldsymbol{x}_i xi 密度相连的样本划分为一个簇。
9.6 层次聚类
层次聚类(hierarchical clustering)识图在不同层次对数据集进行划分,通过‘自底向上’的聚合策略或者‘自顶向下’的分拆策略来形成树状的聚类结构。
- AGglomerative NESting
AGNES采用自底向上的策略,先将每个样本都看成是一个聚类簇,每一步优化中根据距离最近原则将两个距离最近的簇合并,直到达到设定的簇个数。
每个聚类簇视为样本集合,集合 X X X, Z Z Z 之间距离常用*豪斯多夫距离(Hausdorff distance)**计算:
d i s t H ( X , Z ) = max ( d i s t h ( X , Z ) , d i s t h ( Z , X ) ) dist_H\left( X,Z \right) =\max \left( dist_h\left( X,Z \right) ,dist_h\left( Z,X \right) \right) distH(X,Z)=max(disth(X,Z),disth(Z,X))
d i s t h ( X , Z ) = max x ∈ X min z ∈ Z ∣ ∣ x − z ∣ ∣ 2 dist_h\left( X,Z \right) =\underset{\boldsymbol{x}\in X}{\max}\,\,\underset{\boldsymbol{z}\in Z}{\min}||\boldsymbol{x}-\boldsymbol{z}||_2\,\, disth(X,Z)=x∈Xmaxz∈Zmin∣∣x−z∣∣2
对于给定的聚类簇 C i C_i Ci 及 C j C_j Cj 可通过三种方式计算距离,(dist(,)为豪斯多夫距离):
种类 | 表达式 |
---|---|
最小距离 | d min ( C i , C j ) = min x ∈ C i , z ∈ C j d i s t ( x , z ) d_{\min}\left( C_i,C_j \right) =\underset{\boldsymbol{x}\in C_i,\boldsymbol{z}\in C_j}{\min}dist\left( \boldsymbol{x},\boldsymbol{z} \right) dmin(Ci,Cj)=x∈Ci,z∈Cjmindist(x,z) |
最大距离 | d max ( C i , C j ) = max x ∈ C i , z ∈ C j d i s t ( x , z ) d_{\max}\left( C_i,C_j \right) =\underset{\boldsymbol{x}\in C_i,\boldsymbol{z}\in C_j}{\max}dist\left( \boldsymbol{x},\boldsymbol{z} \right) dmax(Ci,Cj)=x∈Ci,z∈Cjmaxdist(x,z) |
平均距离 | d a v g ( C i , C j ) = ∑ x ∈ C i ∑ z ∈ C j d i s t ( x , z ) d_{avg}\left( C_i,C_j \right) =\sum_{\boldsymbol{x}\in C_i}{\sum_{\boldsymbol{z}\in C_j}{dist\left( \boldsymbol{x},\boldsymbol{z} \right)}} davg(Ci,Cj)=∑x∈Ci∑z∈Cjdist(x,z) |