1 聚类任务
在无监督学习中,获取的数据集是没有label信息的,无监督学习的目的是对无label的数据集进行学习以揭示数据内部的性质及规律,为进一步的数据分析提供基础。
聚类是最常见的无监督学习任务。
聚类的目的是试图将数据集中的样本分成若干个不相交的子集,每一个子集称为一个簇,每个簇对应一个潜在的概念,如“浅色瓜”“无籽瓜”等。但是要注意的是,每个簇的概念是由使用者来定义的,聚类算法只是将具有形似性质的样本聚类成簇,而不同簇表示的含义对聚类算法而言是未知的。
形式化的定义聚类过程,就是对于无标记的数据集 D = { x 1 , x 2 , ⋯   , x m } , x i ∈ R n D = \{x_1,x_2,\cdots,x_m\},x_i\in R^n D={x1,x2,⋯,xm},xi∈Rn,经过聚类之后形成k个不相交的簇 { C l ∣ l = 1 , 2 , ⋯   , k } \{C_l|l=1,2,\cdots,k\} {Cl∣l=1,2,⋯,k},其中 ⋃ i = 1 k C i = D , C l ⋂ C l ′ = ∅ ( l ≠ l ′ ) \bigcup_{i=1}^{k}C_i = D,C_l \bigcap C_{l^{'}} = \empty~(l \neq l^{'}) ⋃i=1kCi=D,Cl⋂Cl′=∅ (l̸=l′)。
聚类可以作为单独的应用,用于发掘数据的内在结构。也可以用作其他应用的前驱过程,例如在一些商业应用中,往往先对用户类型聚类成簇之后,再对新用户的类型进行判别。
2 聚类度量
聚类度量是表述聚类结果好坏的标准。
对聚类结果,总体而言,是希望属于同一簇的样本尽可能相似,属于不同簇的样本差距尽可能大,也就是希望达到“簇内相似度高”、“簇间相似度低”的效果。
聚类度量可以分为两类,一类是有外部参考结果的外部指标;另一类是无外部参考结果的内部指标。
2.1 外部指标
数据集
D
=
{
x
1
,
x
2
,
⋯
 
,
x
m
}
D = \{x_1,x_2,\cdots,x_m\}
D={x1,x2,⋯,xm},通过聚类给出簇划分
C
=
{
C
1
,
C
2
,
⋯
 
,
C
k
}
C=\{C_1,C_2,\cdots,C_k\}
C={C1,C2,⋯,Ck},外部参考模型给出的簇划分结果为
C
∗
=
{
C
1
∗
,
C
2
∗
,
⋯
 
,
C
s
∗
}
C^*=\{C^*_1,C^*_2,\cdots,C^*_s\}
C∗={C1∗,C2∗,⋯,Cs∗},令
λ
\lambda
λ和
λ
∗
\lambda^*
λ∗分别表示
C
C
C与
C
∗
C^*
C∗对应的簇标记向量。将样本两两配对,定义:
a
=
∣
S
S
∣
,
S
S
=
{
(
x
i
,
x
j
)
∣
λ
i
=
λ
j
,
λ
i
∗
=
λ
j
∗
,
i
<
j
}
b
=
∣
S
D
∣
,
S
D
=
{
(
x
i
,
x
j
)
∣
λ
i
=
λ
j
,
λ
i
∗
≠
λ
j
∗
,
i
<
j
}
c
=
∣
D
S
∣
,
D
S
=
{
(
x
i
,
x
j
)
∣
λ
i
≠
λ
j
,
λ
i
∗
=
λ
j
∗
,
i
<
j
}
d
=
∣
D
D
∣
,
D
D
=
{
(
x
i
,
x
j
)
∣
λ
i
≠
λ
j
,
λ
i
∗
≠
λ
j
∗
,
i
<
j
}
a=|SS|,SS=\{(x_i,x_j)|\lambda_i=\lambda_j,\lambda^*_i=\lambda^*_j,i<j\}\\~b=|SD|,SD=\{(x_i,x_j)|\lambda_i=\lambda_j,\lambda^*_i\neq \lambda^*_j,i<j\}\\~c=|DS|,DS=\{(x_i,x_j)|\lambda_i\neq\lambda_j,\lambda^*_i= \lambda^*_j,i<j\}\\~~d=|DD|,DD=\{(x_i,x_j)|\lambda_i\neq\lambda_j,\lambda^*_i\neq \lambda^*_j,i<j\}
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}
a表示的是聚类算法判别为同一类且参考模型也判别为同一类的样本对数;b表示的是聚类算法判别为同一类但参考模型也判别为不同类的样本对数;c表示的是聚类算法判别为不同类但参考模型也判别为同一类的样本对数;d表示的是聚类算法判别为不同类且参考模型也判别为不同类的样本对数。由于每一个样本对只能出现在abcd某一个之中,因此有a+b+c+d=m(m-1)/2。
常见的聚类性能度量外部指标有:
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}\frac{a}{a+c}}
FMI=a+baa+ca
Rand指数:
R
I
=
2
(
a
+
d
)
m
(
m
−
1
)
RI = \frac{2(a+d)}{m(m-1)}
RI=m(m−1)2(a+d)
上述三个指标取值范围都是 [ 0 , 1 ] [0,1] [0,1],值越大越好。
2.2 内部指标
考虑聚类结果的簇划分
C
=
{
C
1
,
C
2
,
⋯
 
,
C
k
}
C=\{C_1,C_2,\cdots,C_k\}
C={C1,C2,⋯,Ck},定义
a
v
g
(
C
)
=
2
∣
C
∣
(
∣
C
∣
−
1
)
∑
1
≤
i
<
j
≤
∣
c
∣
d
i
s
t
(
x
i
,
x
j
)
d
i
a
m
(
C
)
=
m
a
x
1
≤
i
<
j
≤
∣
C
∣
d
i
s
t
(
x
i
,
x
j
)
d
m
i
n
(
C
i
,
C
j
)
=
m
i
n
x
i
∈
C
i
,
x
j
∈
C
j
d
i
s
t
(
x
i
,
x
j
)
d
c
e
n
(
C
i
,
C
j
)
=
d
i
s
t
(
u
i
,
u
j
)
avg(C) = \frac{2}{|C|(|C|-1)}\sum_{1\leq i<j\leq|c|}dist(x_i,x_j) \\ diam(C) = max_{1 \leq i < j \leq |C|}dist(x_i,x_j) \\ d_{min}(C_i,C_j) = min_{x_i \in C_i,x_j \in C_j}dist(x_i,x_j) \\ d_{cen}(C_i,C_j) = dist(u_i,u_j)
avg(C)=∣C∣(∣C∣−1)21≤i<j≤∣c∣∑dist(xi,xj)diam(C)=max1≤i<j≤∣C∣dist(xi,xj)dmin(Ci,Cj)=minxi∈Ci,xj∈Cjdist(xi,xj)dcen(Ci,Cj)=dist(ui,uj)
dist()用于计算两个样本之间的距离;u表示聚类簇C的中心点位置。上述定义中,avg©表示某一聚类簇内部样本点距离的均值;diam©表示聚类簇C中样本间的最大距离; d m i n ( C i , C j ) d_{min}(C_i,C_j) dmin(Ci,Cj)表示聚类簇 C i C_i Ci与 C j C_j Cj间的最小样本距离; d c e n ( C i , C j ) d_{cen}(C_i,C_j) dcen(Ci,Cj)对应于簇 C i C_i Ci与 C j C_j Cj中心点之间的距离。
常用的聚类性能度量内部指标有:
DB指数:
D
B
I
=
1
k
∑
i
=
1
k
m
a
x
j
≠
i
(
a
v
g
(
C
i
)
+
a
v
g
(
C
j
)
d
c
e
n
(
u
i
,
u
j
)
)
DBI = \frac{1}{k}\sum_{i=1}^{k}max_{j \neq i}(\frac{avg(C_i)+avg(C_j)}{d_{cen}(u_i,u_j)})
DBI=k1i=1∑kmaxj̸=i(dcen(ui,uj)avg(Ci)+avg(Cj))
Dumn指数:
D
I
=
m
i
n
1
≤
i
≤
k
{
m
i
n
j
≠
i
(
d
m
i
n
(
C
i
,
C
j
)
m
a
x
1
≤
l
≤
k
d
i
a
m
(
C
l
)
)
}
DI = min_{1\leq i\leq k}\{min_{j \neq i }(\frac{d_{min}(C_i,C_j)}{max_{1\leq l \leq k }diam(C_l)})\}
DI=min1≤i≤k{minj̸=i(max1≤l≤kdiam(Cl)dmin(Ci,Cj))}
DBI的值越大越好,DI的值越小越好。
3 距离计算
对于函数dist(,),若其为一个“距离度量”,则需满足一些基本性质:
非负性:
d
i
s
t
(
x
i
,
x
j
)
≥
0
dist(x_i,x_j) \geq 0
dist(xi,xj)≥0;
同一性:
d
i
s
t
(
x
i
,
x
j
)
=
0
dist(x_i,x_j) = 0
dist(xi,xj)=0当前仅当
x
i
=
x
j
x_i = x_j
xi=xj;
对称性:
d
i
s
t
(
x
i
,
x
j
)
=
d
i
s
t
(
x
j
,
x
i
)
dist(x_i,x_j) = dist(x_j,x_i)
dist(xi,xj)=dist(xj,xi);
直递性:
d
i
s
t
(
x
i
,
x
j
)
≤
d
i
s
t
(
x
i
,
x
k
)
+
d
i
s
t
(
x
k
,
x
j
)
dist(x_i,x_j) \leq dist(x_i,x_k) + dist(x_k,x_j)
dist(xi,xj)≤dist(xi,xk)+dist(xk,xj)(三角不等式)
给定样本
x
i
=
(
x
i
1
,
x
i
2
,
⋯
 
,
x
i
n
)
x_i = (x_{i1},x_{i2},\cdots,x_{in})
xi=(xi1,xi2,⋯,xin)和
x
j
=
(
x
j
1
,
x
j
2
,
⋯
 
,
x
j
n
)
x_j = (x_{j1},x_{j2},\cdots,x_{jn})
xj=(xj1,xj2,⋯,xjn),最常用的是“闵可夫斯基距离”。
d
i
s
t
m
k
(
x
i
,
x
j
)
=
(
∑
u
=
1
n
(
x
i
u
−
x
j
u
)
p
)
1
p
dist_{mk}(x_i,x_j) = (\sum_{u=1}^{n}(x_{iu}-x_{ju})^p)^{\frac{1}{p}}
distmk(xi,xj)=(u=1∑n(xiu−xju)p)p1
当P=1时,称之为“曼哈顿距离”,也叫“街区距离”;当P=2时,即为“欧氏距离”。
属性可以分为“连续属性”和“无序属性”,例如{1,2,3}中不同的元素之间可以直接计算距离,称之为连续属性;而{飞机、轮船、汽车}无法直接计算距离,称之为“无序属性”。
闵可夫斯基距离同样可用于无序属性。
对无序属性可采用VDM(Value Difference Metric)。令
m
u
,
a
m_{u,a}
mu,a表示在属性u上取值为a的样本数,
m
u
,
a
,
i
m_{u,a,i}
mu,a,i表示在第i个样本簇中在属性u上取值为a的样本数,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
∣
VDM_p(a,b) = \sum_{i=1}^{k}|\frac{m_{u,a,i}}{m_{u,a}} - \frac{m_{u,b,i}}{m_{u,b}}|
VDMp(a,b)=i=1∑k∣mu,amu,a,i−mu,bmu,b,i∣
将闵可夫斯基距离与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(x_i,x_j) = (\sum_{u=1}^{n_c}|x_{iu}-x_{ju}|^p+\sum_{u=n_c+1}^{n}VDM_p(x_{iu},x_{ju}))^{\frac{1}{p}}
MinkovDMp(xi,xj)=(u=1∑nc∣xiu−xju∣p+u=nc+1∑nVDMp(xiu,xju))p1
当样本空间中不同属性的重要性不同时,还可使用加权距离,以闵可夫斯基距离为例:
d
i
s
t
w
m
k
(
x
i
,
x
j
)
=
(
w
1
∣
x
i
1
−
x
j
1
∣
p
+
⋯
+
w
n
∣
x
i
n
−
x
j
n
∣
p
)
1
p
dist_{wmk}(x_i,x_j) = (w_1|x_{i1}-x_{j1}|^p + \cdots + w_n|x_{in}-x_{jn}|^p)^{\frac{1}{p}}
distwmk(xi,xj)=(w1∣xi1−xj1∣p+⋯+wn∣xin−xjn∣p)p1
w
i
≥
0
a
n
d
∑
i
=
1
n
w
i
=
1
w_i \geq 0 ~~and~~ \sum_{i=1}^{n}w_i = 1
wi≥0 and ∑i=1nwi=1.
一般情况下,我们基于距离度量来定义相似度,距离越大,相似度越小。
4 聚类算法
4.1 原型聚类
原型聚类假设聚类结构能够通过一组原型刻画,算法通常先对原型进行初始化,然后对原型进行迭代更新求解。
常见的原型聚类有k均值算法、学习向量量化和高斯混合聚类等。
4.1.1 k均值算法
给定样本集
D
=
{
x
1
,
x
2
,
⋯
 
,
x
m
}
D = \{x_1,x_2,\cdots,x_m\}
D={x1,x2,⋯,xm},k均值算法针对聚类所得簇划分
C
=
{
C
1
,
C
2
,
⋯
 
,
C
k
}
C = \{C_1,C_2,\cdots,C_k\}
C={C1,C2,⋯,Ck}最小化平方误差
E
=
∑
i
=
1
k
∑
x
∈
C
i
∣
∣
x
−
u
i
∣
∣
2
E = \sum_{i=1}^{k}\sum_{x \in C_i}||x - u_i||^2
E=i=1∑kx∈Ci∑∣∣x−ui∣∣2
u
i
=
1
∣
C
i
∣
∑
x
∈
C
i
x
u_i = \frac{1}{|C_i|}\sum_{x \in C_i}x
ui=∣Ci∣1∑x∈Cix是簇
C
i
C_i
Ci的均值向量。
直观来看,k均值算法在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度,E值越小则簇内样本相似度越高。
最小化上式并不容易,需要考察样本集D所有可能的簇划分,是一个NP难的问题。k均值算法采用贪心策略,通过迭代优化来近似求解式子。
k均值算法的流程如下所示:
为了避免运行时间过长,通常会设置一个最大迭代次数或最小调整幅度阈值,若达到最大迭代次数或者调整幅度小于设定的阈值则停止迭代,完成聚类。
k均值算法无法自适应的决定应该划分的簇数,需要预先设定k值,一般是基于不同的k值多次运行聚类算法之后选取最佳结果;另外,初始聚类中心点的选择对聚类结果也存在一定的影响,可以通过多次运行k均值算法选取最好的聚类结果;k均值算法需要不断的进行样本与中心点的距离计算及不断的更新中心点位置,在数据集规模较大时,k均值算法的计算量较大。
二分K-均值算法
为了克服K均值算法收敛于局部最小解的问题,有人提出了二分K-均值算法。该算法首先将所有点作为一个簇,然后将该簇一分为二。之后选择一个簇继续进行划分,选择哪一个簇进行划分取决于对其划分是否能够最大限度的降低SSE的值。上述基于SSE的划分过程不断重复,直到得到用户指定的簇数目为止。
SSE,sum of squared error,误差平方和。通过计算一个簇中各样本点距离簇中心的距离平方和得到。
4.1.2 学习向量量化
学习向量量化(Learning Vector Quantization,LVQ)也是试图找到一组原型向量来刻画聚类结构。但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。
给定样本集 D = { ( x 1 , y 1 ) , ⋯   , ( x m , y m ) } , x j ∈ R n , y i D=\{(x_1,y_1),\cdots,(x_m,y_m)\},x_j \in R^n,y_i D={(x1,y1),⋯,(xm,ym)},xj∈Rn,yi是样本的类别标记。LVQ的目标是学得一组n维的原型向量 { p 1 , p 2 , ⋯   , p q } \{p_1,p_2,\cdots,p_q\} {p1,p2,⋯,pq},每个原型向量代表一个聚类簇,簇标记为 t i t_i ti。
LVQ算法的处理流程为:
LVQ算法也是首先随机选取q个样本作为初始原型向量,并且假定第i个初始原型向量具有类别 t i t_i ti。然后,计算每一个样本距离初始原型向量间的距离,将样本的类别设为距离最近的初始原型向量对应的标记 t i ∗ t_{i^*} ti∗,然后判断 t i ∗ t_{i^*} ti∗与样本本身的类别标记 y j y_j yj是否一致,如果一致,则更新第 i ∗ i^* i∗个原型向量以使其更加接近样本 x j x_j xj,否则则更新第 i ∗ i^* i∗个原型向量以使其更加远离样本 x j x_j xj。等到达到最大迭代轮数或者原型向量的更新量小于预设值时则停止迭代,完成聚类过程。
假如
t
i
∗
t_{i^*}
ti∗与样本本身的类别标记
y
j
y_j
yj一致,则定义更新后的原型向量为
p
′
=
p
i
∗
+
η
(
x
j
−
p
i
∗
)
p^{'}=p_{i^*}+\eta(x_j - p_{i^*})
p′=pi∗+η(xj−pi∗),更新后的原型向量距离
x
j
x_j
xj的距离为:
∣
∣
p
′
−
x
j
∣
∣
2
=
∣
∣
p
i
∗
+
η
(
x
j
−
p
i
∗
)
−
x
j
∣
∣
2
=
(
1
−
η
)
∣
∣
p
i
∗
−
x
j
∣
∣
2
||p^{'} - x_j||_2 = ||p_{i^*}+\eta(x_j - p_{i^*}) - x_j||_2 \\= (1 - \eta)||p_{i^*} - x_j||_2
∣∣p′−xj∣∣2=∣∣pi∗+η(xj−pi∗)−xj∣∣2=(1−η)∣∣pi∗−xj∣∣2
由于
η
∈
(
0
,
1
)
\eta \in (0,1)
η∈(0,1),则更新后的原型向量距离
x
j
x_j
xj更近。同理,
p
′
=
p
i
∗
−
η
(
x
j
−
p
i
∗
)
p^{'}=p_{i^*}-\eta(x_j - p_{i^*})
p′=pi∗−η(xj−pi∗)则更加远离
x
j
x_j
xj。
在学得一组原型向量
{
p
1
,
p
2
,
⋯
 
,
p
q
}
\{p_1,p_2,\cdots,p_q\}
{p1,p2,⋯,pq}之后,即可实现对样本空间X的簇划分,对任意样本x,将其划入与其距离最近的原型向量所代表的簇中。换言之,每个原型向量
p
i
p_i
pi都定义了一个与之相关的区域
R
i
R_i
Ri,该区域中的每个样本与
p
i
p_i
pi的距离都不大于它与其他原型向量
p
i
′
(
i
′
≠
i
)
p_{i^{'}}(i^{'} \neq i)
pi′(i′̸=i)的距离,即
R
i
=
{
x
∈
X
∣
∣
∣
x
−
p
i
∣
∣
2
≤
∣
∣
x
−
p
i
′
∣
∣
,
i
≠
i
′
}
R_i = \{x \in X | ||x - p_i||_2 \leq ||x - p_{i^{'}}||,i \neq i^{'}\}
Ri={x∈X∣∣∣x−pi∣∣2≤∣∣x−pi′∣∣,i̸=i′}
由此形成了对样本空间的簇划分
{
R
1
,
R
2
,
⋯
 
,
R
q
}
\{R_1,R_2,\cdots,R_q\}
{R1,R2,⋯,Rq},该划分通常称之为“Voronoi”剖分。
4.1.3 高斯混合聚类
高斯混合聚类采用概率模型来表达聚类思想。
多元高斯分布:
p
(
x
∣
u
,
Σ
)
=
1
(
2
π
)
n
2
∣
Σ
∣
1
2
e
−
1
2
(
x
−
u
)
T
Σ
−
1
(
x
−
u
)
p(x|u,\Sigma) = \frac{1}{(2\pi)^{\frac{n}{2}}|\Sigma|^{\frac{1}{2}}}e^{-\frac{1}{2}(x - u)^T\Sigma^{-1}(x - u)}
p(x∣u,Σ)=(2π)2n∣Σ∣211e−21(x−u)TΣ−1(x−u)
高斯混合分布:
p
M
(
x
)
=
∑
i
=
1
k
α
i
p
(
x
∣
u
i
,
Σ
i
)
p_M(x) = \sum_{i=1}^{k}\alpha_i ~ p(x|u_i,\Sigma_i)
pM(x)=i=1∑kαi p(x∣ui,Σi)
上述分布由k个混合成分组成,每个混合成分对应一个高斯分布,其中
u
i
u_i
ui与
Σ
i
\Sigma_i
Σi为第i个高斯混合分布的参数,而
α
i
\alpha_i
αi为相应的混合系数,
∑
i
=
1
k
α
i
=
1
\sum_{i=1}^{k}\alpha_i = 1
∑i=1kαi=1。
假设样本的生成过程由高斯混合分布给出:首先,根据
α
1
,
α
2
,
⋯
 
,
α
k
\alpha_1,\alpha_2,\cdots,\alpha_k
α1,α2,⋯,αk定义的先验分布选择高斯混合成分,其中
α
i
\alpha_i
αi为选择第i个混合成分的概率;然后,根据被选择的混合成分的概率密度函数进行采样,从而生成相应的样本。若采样生成了数据集
D
=
{
x
1
,
x
2
,
⋯
 
,
x
m
}
D= \{x_1,x_2,\cdots,x_m\}
D={x1,x2,⋯,xm},令随机变量
z
j
∈
{
1
,
2
,
⋯
 
,
k
}
z_j \in \{1,2,\cdots,k\}
zj∈{1,2,⋯,k}表示生成样本
x
j
x_j
xj的高斯混合成分,其取值未知。
z
j
z_j
zj的先验概率
p
(
z
j
=
i
)
p(z_j = i)
p(zj=i)即为
α
i
\alpha_i
αi。根据贝叶斯定理,
z
j
z_j
zj的后验概率为:
(9.30)
p
M
(
z
j
=
i
∣
x
j
)
=
P
(
z
j
=
i
)
p
M
(
x
j
∣
z
j
=
i
)
p
M
(
x
j
)
=
α
i
p
(
x
j
∣
u
i
,
Σ
i
)
∑
l
=
1
k
α
l
p
(
x
∣
u
l
,
Σ
l
)
p_M(z_j = i | x_j) = \frac{P(z_j = i)~~p_M(x_j|z_j = i)}{p_M(x_j)} \\ =\frac{\alpha_i~~p(x_j|u_i,\Sigma_i)}{\sum_{l=1}^{k}\alpha_l ~ p(x|u_l,\Sigma_l)} \tag {9.30}
pM(zj=i∣xj)=pM(xj)P(zj=i) pM(xj∣zj=i)=∑l=1kαl p(x∣ul,Σl)αi p(xj∣ui,Σi)(9.30)
p
M
(
z
j
=
i
∣
x
j
)
p_M(z_j = i|x_j)
pM(zj=i∣xj)给出了样本
x
j
x_j
xj由第i个高斯混合成分生成的后验概率,将其简记为
γ
j
i
(
i
=
1
,
2
,
⋯
 
,
k
)
\gamma_{ji}(i=1,2,\cdots,k)
γji(i=1,2,⋯,k)。
当高斯混合分布
p
M
(
x
)
p_M(x)
pM(x)已知时,高斯混合聚类将把样本集D划分为k个簇
C
=
{
C
1
,
C
2
,
⋯
 
,
C
k
}
C=\{C_1,C_2,\cdots,C_k\}
C={C1,C2,⋯,Ck},每个样本
x
j
x_j
xj对于的簇标记
λ
j
\lambda_j
λj如下确定:
(9.31)
λ
j
=
a
r
g
m
a
x
i
∈
{
1
,
2
,
⋯
 
,
k
}
γ
j
i
\lambda_j = arg~max_{i \in \{1,2,\cdots,k\}}~~\gamma_{ji} \tag{9.31}
λj=arg maxi∈{1,2,⋯,k} γji(9.31)
因此,从原型聚类的角度看,高斯混合聚类是采用概率模型对原型进行刻画,簇划分由原型对应的后验概率确定。
那么,现在就遗留一个问题,如何求解得到各概率模型的参数 α i , u i , Σ i \alpha_i,u_i,\Sigma_i αi,ui,Σi。可以通过极大似然估计,极大化对数似然进行求解。
高斯混合聚类的整个过程为:
高斯混合聚类算法的过程中应用了EM算法,其中上图中的第4步是EM算法的E步,第7,8,9步是EM算法中的M步。EM算法的推导过程后面的博客中进行补充。高斯混合聚类的过程也可以参考CS229的notes 7b,notes8。
高斯混合聚类和k均值聚类的处理过程很相似,都是开始随机初始化参数,然后根据参数确定各样本的类别,待样本类别确定之后根据初步的分类结果更新各类别的参数,进而再重新确定类别,依此循环,直到达到迭代次数或者参数的改变量很小时停止迭代,完成聚类。
上述三种原型聚类方法,k均值、LVQ、高斯混合聚类都需要预先设置聚类的数目,而聚类数目作为一个超参数在很多应用中是未知的,因此限制了原型聚类算法的应用场景。
4.2 密度聚类
密度聚类为“基于密度的聚类”,算法假设聚类结构能够通过样本分布的紧密程度确定。通常情形下,密度聚类算法从样本密度的角度来考察样本的可连接性,并基于可连接样本不断扩展聚类簇以获取最终的聚类效果。
DBSCAN是一种著名的密度聚类算法,它基于一组“领域”参数 ( ϵ , M i n P t s ) (\epsilon,MinPts) (ϵ,MinPts)来刻画样本分布的紧密程度。给定数据集 D = { x 1 , x 2 , ⋯   , x m } D = \{x_1,x_2,\cdots,x_m\} D={x1,x2,⋯,xm},定义下面几个概念:
ϵ − \epsilon- ϵ−领域:对于样本 x j ∈ D x_j \in D xj∈D,其 ϵ − \epsilon- ϵ−领域包含样本集D中与 x j x_j xj距离不大于 ϵ \epsilon ϵ的样本,即 N ϵ ( x j ) = { x i ∈ D ∣ d i s t ( x i , x j ) ≤ ϵ } N_{\epsilon}(x_j)=\{x_i \in D|dist(x_i,x_j) \leq \epsilon\} Nϵ(xj)={xi∈D∣dist(xi,xj)≤ϵ};
核心对象:若 x j x_j xj的 ϵ − \epsilon- ϵ−领域至少包含MinPts个样本,即 ∣ N ϵ ( x j ) ∣ ≥ M i n P t s |N_{\epsilon}(x_j)| \geq MinPts ∣Nϵ(xj)∣≥MinPts,则 x j x_j xj是一个核心对象;
密度直达:若 x j x_j xj位于 x i x_i xi的 ϵ − \epsilon- ϵ−领域内,且 x i x_i xi是核心对象,则称 x j x_j xj由 x i x_i xi密度直达;
密度可达:对 x i x_i xi与 x j x_j xj,若存在样本序列 p 1 , p 2 , ⋯   , p n p_1,p_2,\cdots,p_n p1,p2,⋯,pn,其中 p 1 = x i , p n = x j p_1 = x_i,p_n = x_j p1=xi,pn=xj且 p i + 1 p_{i+1} pi+1由 p i p_i pi密度直达,则称 x j x_j xj由 x i x_i xi密度可达。
密度相连:对于 x i x_i xi和 x j x_j xj,若存在 x k x_k xk使得 x i x_i xi与 x j x_j xj均由 x k x_k xk密度可达,则称 x i x_i xi与 x j x_j xj密度相连。
DBSCAN将簇定义为:由密度可达关系导出的最大的密度相连样本集合。
形式化地说,给定领域参数
(
ϵ
,
M
i
n
P
t
s
)
(\epsilon,MinPts)
(ϵ,MinPts),簇
C
⊆
D
C \subseteq D
C⊆D是满足下列性质的非空样本子集:
连接性:
x
i
∈
C
,
x
j
∈
C
x_i \in C,x_j \in C
xi∈C,xj∈C
⇒
\Rightarrow
⇒
x
i
x_i
xi与
x
j
x_j
xj密度相连;
最大性:
x
i
∈
C
x_i \in C
xi∈C,
x
j
x_j
xj由
x
i
x_i
xi密度可达
⇒
\Rightarrow
⇒
x
j
∈
C
x_j \in C
xj∈C。
在数据集D中,若x为核心对象,则由x密度可达的所有样本集合记为
X
=
{
x
′
∈
D
∣
x
′
由
x
密
度
可
达
}
X = \{x^{'} \in D | x^{'}由x密度可达\}
X={x′∈D∣x′由x密度可达},则X为满足连接性与最大性的簇。
因此在DBSCAN算法中,先任选数据集中的一个核心对象为“种子”,再由此出发确定相应的聚类簇。算法的整个流程如下图所示:
DBSCAN的处理过程为首先遍历所有的样本点,找到所有的核心对象,然后对每一个核心对象,找到其所有密度可达的样本点形成簇。然后从核心对象序列中删除包含在已形成的簇中的核心对象,直到核心对象序列为空时完成聚类过程。
DBSCAN不需要预先设定聚类簇数,而是根据样本的分布情况由算法自己决定聚类簇数,具有较大的实际应用价值。
4.3 层次聚类
层次聚类试图在不同层次上对数据集进行划分,从而形成树形的聚类结构。数据集的划分可以采用“自底向上”的聚合策略,也可以采用“自上向下”的分拆策略。
AGNES是一种采用自底向上聚合策略的层次聚类算法,它先将数据集中的每一个样本看出是一个聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直达达到预设的聚类簇个数。这里的关键是计算聚类簇之间的距离,每一个聚类簇都是一个样本集合,因此只需计算样本集合间的某种距离即可。给定聚类簇
C
i
C_i
Ci和
C
j
C_j
Cj,可通过下面的式子来计算距离:
最小距离:
d
m
i
n
(
C
i
,
C
j
)
=
m
i
n
x
∈
C
i
,
z
∈
C
j
d
i
s
t
(
x
,
z
)
d_{min}(C_i,C_j) = min_{x \in C_i,z \in C_j}dist(x,z)
dmin(Ci,Cj)=minx∈Ci,z∈Cjdist(x,z)
最大距离:
d
m
a
x
(
C
i
,
C
j
)
=
m
a
x
x
∈
C
i
,
z
∈
C
j
d
i
s
t
(
x
,
z
)
d_{max}(C_i,C_j) = max_{x \in C_i,z \in C_j}dist(x,z)
dmax(Ci,Cj)=maxx∈Ci,z∈Cjdist(x,z)
平均距离:
d
a
v
g
(
C
i
,
C
j
)
=
1
∣
C
i
∣
∣
C
j
∣
∑
x
∈
C
i
∑
z
∈
C
j
d
i
s
t
(
x
,
z
)
d_{avg}(C_i,C_j) = \frac{1}{|C_i||C_j|}\sum_{x \in C_i}\sum_{z \in C_j}dist(x,z)
davg(Ci,Cj)=∣Ci∣∣Cj∣1∑x∈Ci∑z∈Cjdist(x,z)
AGNES算法的处理流程为:
上述AGNES聚类过程为首先将每一个样本点作为一个聚类,计算不同类别间的距离,然后合并距离最近的两个聚类,对合并后的聚类簇的距离矩阵进行更新直至聚类数目减少到预设值时为止。
AGNES聚类形成的树状图如下图所示:
AGNES算法同样需要预先设定聚类数目。
总结
k均值算法可以看做高斯混合聚类在混合成分方差相等、且每个样本仅指派给一个混合成分时的特例。