聚类任务
在“无监督学习”中,训练样本的标记信息是未知的,目标是通过对无标记样本的学习揭示数据的内在性质及规律,为进一步的数据分析提供基础。
“无监督学习”任务中,研究最多、应用最广的是“聚类”。
聚类试图将数据集中的样本划分成若干个通常是不相交的子集,每个子集称为一个“簇”。通过这样的划分,每个簇可能对应于一些潜在的概念(比如类别)。
注意:这些概念对于聚类算法而言事先是未知的,聚类过程仅能自动形成"簇"结构,簇所对应的概念语义需由使用者来把握和命名。
形式化说明:假设样本集
D
=
{
x
1
,
x
2
,
…
x
m
}
D=\{x_1,x_2,…x_m\}
D={x1,x2,…xm}包含m个无标记样本,每个样本
x
i
=
(
x
i
1
,
x
i
2
,
…
…
x
i
n
)
x_i=(x_{i1},x_{i2},……x_{in})
xi=(xi1,xi2,……xin)是一个n维特征向量,则聚类算法将样本集D划分为k个不相交的簇
{
C
l
∣
l
=
1
,
2
,
…
k
}
\{C_l|l=1,2,…k\}
{Cl∣l=1,2,…k}其中KaTeX parse error: Expected '}', got 'EOF' at end of input: C_l'∩{C_l=∅
D
=
∑
l
=
1
k
C
l
D=\displaystyle\sum_{l=1}^kC_l
D=l=1∑kCl,相应的,用
λ
j
∈
{
1
,
2
…
k
}
λ_j∈\{1,2…k\}
λj∈{1,2…k}表示样本
x
j
x_j
xj的簇标记,即
x
j
∈
C
λ
j
x_j∈C_{λ_j}
xj∈Cλj
于是,聚类的结果可用包含m个元素的簇标记向量
λ
∈
{
λ
1
,
λ
2
…
λ
m
}
λ∈\{λ_1,λ_2…λ_m\}
λ∈{λ1,λ2…λm}表示。
基于不同的策略,人们设计出了多种类型的聚类算法。在讨论聚类算法之前,先讨论聚类算法涉及的两个基本问题:性能度量和距离计算。
性能度量
聚类性能度量也称作聚类的“有效性指标”。与监督学习的性能度量类似,对聚类结果,我们需要通过某种性能度量来评估其好坏。
另一方面,如果明确了将要使用的性能度量,则可直接将其作为聚类过程的优化目标,从而更好的得到符合要求的聚类结果。
聚类结果的“簇内相似度高,簇间相似度低”
聚类性能度量大致有两类:
1)将聚类结果与某个”参考模型“进行比较,称为“外部指标”
2)直接考察聚类结果而不利用任何参考模型,称为“内部指标”
对于数据集
D
=
{
x
1
,
x
2
…
…
x
m
}
D=\{x_1,x_2……x_m\}
D={x1,x2……xm}假设通过聚类给出的簇划分为
C
=
{
C
1
,
C
2
…
…
C
k
}
C=\{C_1,C_2……C_k\}
C={C1,C2……Ck},参考模型给出的簇划分为
C
∗
=
{
C
1
∗
,
C
2
∗
…
…
C
s
∗
}
C^*=\{C_1^*,C_2^*……C_s^*\}
C∗={C1∗,C2∗……Cs∗},相应的令
λ
与
λ
∗
λ与λ^*
λ与λ∗分别表示与
C
和
C
∗
C和C^*
C和C∗对应的簇标记向量(每个元素的取值是1到k和1 到 s)
我们将样本两两配对考虑,定义
a
=
∣
S
S
∣
,
S
S
=
{
(
x
i
,
x
j
)
∣
λ
i
=
λ
j
,
λ
i
∗
=
λ
j
∗
,
i
<
j
}
a=|SS|,SS=\{(x_i,x_j)|λ_i=λ_j,λ_i^*=λ_j^*,i<j\}
a=∣SS∣,SS={(xi,xj)∣λi=λj,λi∗=λj∗,i<j} (1)
b
=
∣
S
D
∣
,
S
D
=
{
(
x
i
,
x
j
)
∣
λ
i
=
λ
j
,
λ
i
∗
≠
λ
j
∗
,
i
<
j
}
b=|SD|,SD=\{(x_i,x_j)|λ_i=λ_j,λ_i^*≠λ_j^*,i<j\}
b=∣SD∣,SD={(xi,xj)∣λi=λj,λi∗̸=λj∗,i<j} (2)
c
=
∣
D
S
∣
,
D
S
=
{
(
x
i
,
x
j
)
∣
λ
i
≠
λ
j
,
λ
i
∗
=
λ
j
∗
,
i
<
j
}
c=|DS|,DS=\{(x_i,x_j)|λ_i≠λ_j,λ_i^*=λ_j^*,i<j\}
c=∣DS∣,DS={(xi,xj)∣λi̸=λj,λi∗=λj∗,i<j} (3)
d
=
∣
D
D
∣
,
D
D
=
{
(
x
i
,
x
j
)
∣
λ
i
≠
λ
j
,
λ
i
∗
≠
λ
j
∗
,
i
<
j
}
d=|DD|,DD=\{(x_i,x_j)|λ_i≠λ_j,λ_i^*≠λ_j^*,i<j\}
d=∣DD∣,DD={(xi,xj)∣λi̸=λj,λi∗̸=λj∗,i<j} (4)
其中集合SS中包含了在C中隶属于相同簇且在
C
∗
C^*
C∗中也隶属于相同的簇的样本集。
集合SD包含了在C中属于相同的簇但在
C
∗
C^*
C∗中隶属于不同簇的样本对,c d依次类推。
由于每一个样本对
(
x
i
,
x
j
)
(x_i,x_j)
(xi,xj)仅能出现在一个集合中,因此有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
=
s
q
r
t
(
a
a
+
b
∗
a
a
+
c
)
FMI=sqrt(\frac{a}{a+b}*\frac{a}{a+c})
FMI=sqrt(a+ba∗a+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],值越大越好。
内部指标:
考虑聚类结果的簇划分
C
=
{
C
1
,
C
2
…
…
C
k
}
C=\{C_1,C_2……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 ) avg(C)=\frac{2}{|C||(C-1)|}\displaystyle\sum_{1≤i≤j≤|C|}dist(x_i,x_j) avg(C)=∣C∣∣(C−1)∣21≤i≤j≤∣C∣∑dist(xi,xj)
d i a m ( C ) = m a x d i s t ( x i , x j ) , 1 ≤ i ≤ j ≤ ∣ C ∣ diam(C)=maxdist(x_i,x_j),1≤i≤j≤|C| diam(C)=maxdist(xi,xj),1≤i≤j≤∣C∣
d m i n ( C i , C j ) = m i n d i s t ( x i , x j ) , x i ∈ C i , x j ∈ C j d_{min}(C_i,C_j)=mindist(x_i,x_j),x_i∈C_i,x_j∈C_j dmin(Ci,Cj)=mindist(xi,xj),xi∈Ci,xj∈Cj
d c e n ( C i , C j ) = d i s t ( u i , u j ) d_{cen}(C_i,C_j)=dist(u_i,u_j) dcen(Ci,Cj)=dist(ui,uj)
其中,
d
i
s
t
(
)
dist()
dist()用于计算两个样本之间的距离,
u
u
u代表簇C的中心点
u
=
1
∣
C
∣
∑
1
≤
i
≤
∣
C
∣
x
i
u=\frac{1}{|C|}\displaystyle\sum_{1≤i≤|C|}x_i
u=∣C∣11≤i≤∣C∣∑xi
显然,
a
v
g
(
C
)
avg(C)
avg(C)对应于簇C内样本间的平均距离,
d
i
a
m
(
C
)
diam(C)
diam(C)对于簇C内样本间的最远距离,
d
m
i
n
(
C
i
,
C
j
)
d_{min}(C_i,C_j)
dmin(Ci,Cj)对应于簇
C
i
,
C
j
C_i,C_j
Ci,Cj最近样本间的距离,
d
c
e
n
(
C
i
,
C
j
)
d_{cen}(C_i,C_j)
dcen(Ci,Cj)对应于
C
i
,
C
j
C_i,C_j
Ci,Cj中心点间的距离。
DB指数:
D B I = 1 k ∑ i = 1 k m a x i ≠ j ( a v g ( C i ) + a v g ( C j ) d c e n ( u i , u j ) ) DBI=\frac{1}{k}\displaystyle\sum_{i=1}^{k}max_{i≠j}(\frac{avg(C_i)+avg(C_j)}{d_{cen}(u_i,u_j)}) DBI=k1i=1∑kmaxi̸=j(dcen(ui,uj)avg(Ci)+avg(Cj))
Dunn指数:
D I = m i n 1 ≤ i ≤ k { m i n i ≠ j ( d m i n ( C i , C j ) m a x 1 ≤ l ≤ k d i a m ( C l ) ) } DI=min_{1≤i≤k}\{min_{i≠j}(\frac{d_{min}(C_i,C_j)}{max_{1≤l≤k}diam(C_l)})\} DI=min1≤i≤k{mini̸=j(max1≤l≤kdiam(Cl)dmin(Ci,Cj))}
显然DBI越小越好,Dunn越大越好。
距离计算
给定样本
x
i
=
(
x
i
1
,
x
i
2
…
…
x
i
n
)
x_i=(x_{i1},x_{i2}……x_{in})
xi=(xi1,xi2……xin)与
x
j
=
(
x
j
1
,
x
j
2
…
…
x
j
n
)
x_j=(x_{j1},x_{j2}……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)=(\displaystyle\sum_{u=1}^{n}|x_{iu}-{x_{ju}|^p})^{\frac{1}{p}}
distmk(xi,xj)=(u=1∑n∣xiu−xju∣p)p1
p=2 时是欧氏距离,p=1时是曼哈顿距离
在讨论距离计算时,属性上是否定义了“序”关系十分重要,例如定义域为 { 1 , 2 , 3 } \{1,2,3\} {1,2,3}的离散属性与连续属性的性质更接近一些,能直接在属性值上计算距离:1与2比较接近,与3比较远,这样的属性称为“有序属性”
而定义域为 { 飞 机 , 火 车 , 轮 船 } \{飞机,火车,轮船\} {飞机,火车,轮船}这样的离散属性则不能直接在属性值上计算距离,称为“无序属性”
显然闵可夫斯基距离可用于计算有序属性
对于无序属性可采用VDM,令 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 ∣ p VDM_p(a,b)=\displaystyle\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(x_i,x_j)=(\displaystyle\sum_{u=1}^{n_c}|x_{iu}-x_{ju}|^p+\displaystyle\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 ) dist_{wmk}(x_i,x_j)=(w_1|x_{i1}-x_{j1}|^p+……+w_n|x_{in}-x_{jn}|^p) distwmk(xi,xj)=(w1∣xi1−xj1∣p+……+wn∣xin−xjn∣p)
其中, w i ≥ 0 ( i = 1 , 2 … … n ) w_i≥0(i=1,2……n) wi≥0(i=1,2……n)表示不同属性的重要性,通常 ∑ i = 1 n w i = 1 \displaystyle\sum_{i=1}^{n}w_i=1 i=1∑nwi=1