9.1聚类任务
聚类试图将训练样本划分为若干个不相交的子集,每个子集称为一个簇,每个簇可能对应于一些潜在的概念但是这些概念对聚类算法而言事先是未知的。 聚类既能作为一个单独过程,用于找寻数据内在的分布结构,也可作为分类等其他学习任务的前驱过程。例如,在一些商业应用中需对新用户的类型进行判别,但定义“用户类型”对商家来说却可能不太容易,此时往往可先对用户数据进行聚类,根据聚类结果将每个簇定义为一个类,然后在基于这些类训练分类模型,用于判别新用户的类型。
9.2性能度量
聚类性能度量亦聚类“有效性指标”,对聚类结果,我们需要通过某种性能度量来评估其好坏;另一方面,若明确了最终将要使用的性能度量,则可直接将其作为聚类过程的优化目标,从而更好地得到符合要求的聚类结果。 聚类性能度量大致有两类,一类是将聚类结果与某个“参考模型”进行比较,称为“外部指标”;另一类是直接考察聚类结果而不利用任何参考模型,称为内部指标。 对数据集
D
=
{
x
1
,
x
2
,
…
,
x
m
}
D=\{x_1,x_2,\dots ,x_m\}
D={x1?,x2?,…,xm?},,假定通过聚类给出的簇划分为
C
=
{
C
1
,
C
2
…
,
C
k
}
C=\{C_1,C_2\dots,C_k\}
C={C1?,C2?…,Ck?},参考模型给出的簇划分为
C
?
=
{
C
1
?
,
C
2
?
…
,
C
k
?
}
C^*=\{C^*_1,C^*_2\dots,C^*_k\}
C?={C1??,C2??…,Ck??}。相应地,令
λ
\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} 其中集合SS包含了在C中隶属于相同簇且在
C
?
C^*
C?中也隶属于相同簇的样本对,集合SD包含了在C中隶属于相同簇但在
C
?
C^*
C?中隶属于不同簇的样本对,
?
?
\cdots\cdots
??由于每个样本对
(
x
i
,
x
j
)
(
i
<
j
)
(x_i,x_j)(i<j)
(xi?,xj?)(i<j)仅能出现在一个集合中,因此有
a
+
b
+
c
+
d
=
m
(
m
?
1
)
/
2
a+b+c+d=m(m-1)/2
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}\cdot\frac{a}{a+c}}
FMI=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]区间,值越大越好。 考虑聚类结果的簇划分
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
)
,
d
i
a
m
(
C
)
=
max
?
1
≤
i
≤
j
≤
∣
C
∣
d
i
s
t
(
x
i
,
x
j
)
,
d
m
i
n
(
C
i
,
C
j
)
=
min
?
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
(
μ
i
,
μ
j
)
,
avg(C)=\frac{2}{|C|(|C|-1)}\sum_{1\leq i\leq j\leq|C|}dist(x_i,x_j),\\ diam(C)=\max_{1\leq i\leq 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(\mu_i,\mu_j),
avg(C)=∣C∣(∣C∣?1)2?1≤i≤j≤∣C∣∑?dist(xi?,xj?),diam(C)=1≤i≤j≤∣C∣max?dist(xi?,xj?),dmin(?Ci?,Cj?)=xi?∈Ci?,xj?∈Cj?min?dist(xi?,xj?),dcen?(Ci?,Cj?)=dist(μi?,μj?), 其中dist(.,.)用于计算两个样本之间的距离;
μ
\mu
μ代表簇C的中心点
μ
=
1
∣
C
∣
∑
1
≤
i
≤
∣
C
∣
x
i
\mu=\frac{1}{|C|}\sum_{1\leq i\leq|C|}x_i
μ=∣C∣1?∑1≤i≤∣C∣?xi?显然
a
v
g
(
C
)
avg(C)
avg(C)对应于簇
C
C
C内样本间的平均距离,
d
i
a
m
(
C
)
diam(C)
diam(C)对应于簇
C
C
C内样本的最远距离,
d
m
i
n
(
C
)
d_{min}(C)
dmin?(C)对应于簇
C
i
C_i
Ci?和簇
C
j
C_j
Cj?最近样本间的距离,
d
c
e
n
(
C
)
d_{cen}(C)
dcen?(C)对应于簇
C
i
C_i
Ci?与簇
C
j
C_j
Cj?中心点间的距离。 基于上式可导出下面这些常用的聚类性能度量内部指标: 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^{k}_{i=1}\max_{j\neq i}(\frac{avg(C_i)+avg(C_j)}{d_{cen}(C_i,C_j)})
DBI=k1?i=1∑k?j?=imax?(dcen?(Ci?,Cj?)avg(Ci?)+avg(Cj?)?) Dunn指数
D
I
=
min
?
1
≤
i
≤
k
{
min
?
j
≠
i
(
d
m
i
n
(
C
i
,
C
j
)
max
?
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=1≤i≤kmin?{j?=imin?(max1≤l≤k?diam(Cl?)dmin?(Ci?,Cj?)?)} 显然DBI值越小越好,DI越大越好
9.3距离计算
9.3.1距离定义
对函数
d
i
s
t
(
?
,
?
)
dist(\cdot,\cdot)
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?)
9.3.2明可夫斯基距离
给定样本
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^n_{u=1}|x_{iu}-x_{ju}|^p)^{\frac{1}{p}}
distmk?(xi?,xj?)=(u=1∑n?∣xiu??xju?∣p)p1? 当p=2时,退化为欧式距离
d
i
s
t
e
d
(
x
i
,
x
j
)
=
∑
u
=
1
n
∣
x
i
u
?
x
j
u
∣
2
dist_{ed}(x_i,x_j)=\sqrt{\sum^n_{u=1}|x_{iu}-x_{ju}|^2}
disted?(xi?,xj?)=u=1∑n?∣xiu??xju?∣2
? 当p=1时退化为曼哈顿距离
d
i
s
t
m
a
n
(
x
i
,
x
j
)
=
∑
u
=
1
n
∣
x
i
u
?
x
j
u
∣
dist_{man}(x_i,x_j)=\sum^n_{u=1}|x_{iu}-x_{ju}|
distman?(xi?,xj?)=u=1∑n?∣xiu??xju?∣ 我们常常将属性划分为“连续属性”和“离散属性”,前者在定义域上有无穷多个可能的取值,后者在定义域上是有限个取值,然而,在讨论距离计算时,属性上是否定义了“序”关系更重要。例如定义域为{1,2,3}的离散属性与连续属性的性质更接近一些,能直接在属性值上计算距离:“1”与“2”比较接近、与“3”比较远,这样的属性称为“有序属性”;而定义域为{飞机,火车,轮船}这样的离散属性则不能直接在属性值上计算距离,称为“无序属性”。显然,明可夫斯基距离可用于有序属性
9.3.3VDM度量
对于无序属性,可采用VDM.令
m
m
,
a
m_{m,a}
mm,a?表示在属性
u
u
u上取值为
a
a
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^{k}_{i=1}|\frac{m_{u,a,i}}{m_{u,a}}-\frac{m_{u,b,i}}{m_{u,b}}|
VDMp?(a,b)=i=1∑k?∣mu,a?mu,a,i???mu,b?mu,b,i??∣
9.4原型聚类(kmeans)
原型距离是指类结构能通过一组典型的特例刻画。比如男、女类似的。给定样本集
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
?
μ
i
∣
∣
2
2
E=\sum^k_{i=1}\sum_{x\in C_i}||x-\mu_i||^2_2
E=i=1∑k?x∈Ci?∑?∣∣x?μi?∣∣22? 其中
μ
i
=
1
∣
C
i
∣
∑
x
∈
C
i
\mu_i=\frac{1}{|C_i|}\sum_{x\in C_i}
μi?=∣Ci?∣1?∑x∈Ci??x表示簇
C
i
C_i
Ci?的均值向量。 求解改式需要考虑样本集D所有可能的划分,是一个NP-hard问题。一般来说,我们采用迭代算的近似划分。 k-means算法如下
9.5密度聚类(DBSCAN)
密度聚类假设聚类结构能够通过样本分布的紧密程度确定。它从样本密度的角度考察样本间的可连接性,并基于可连接样本不断扩展聚类簇得到最终的聚类结果。 DBSCAN是密度聚类的代表之一。它基于一组领域参数
(
?
,
M
i
n
P
t
s
)
(\epsilon,MinPts)
(?,MinPts)刻画样本分布的紧密程度。关于DBSCAN的几个概念如下: 1,
?
\epsilon
?-邻域:和样本
x
x
x距离不超过
?
\epsilon
?的样本集合 2,核心对象:如果样本
x
x
x和
?
\epsilon
?邻域内至少包含
M
i
n
P
t
s
MinPts
MinPts个样本,则
x
x
x是一个核心对象。 3,密度直达:
x
j
x_j
xj?位于核心对象
x
i
x_i
xi?的
?
\epsilon
?邻域内,则称
x
i
x_i
xi?密度可达
x
j
x_j
xj? 4,密度可达:若存在样本序列
x
i
,
p
1
,
p
2
,
?
?
,
p
n
,
x
j
x_i,p_1,p_2,\cdots,p_n,x_j
xi?,p1?,p2?,?,pn?,xj?其中
p
i
p_i
pi?密度直达
p
i
+
1
p_{i+1}
pi+1?则称
x
i
x_i
xi?密度可达
x
j
x_j
xj? 5,密度相连:对于
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定义的簇为:最大密度相连的样本集合为一个簇。 1,连接性:同一个簇内任意两样本必然密度相连 2,最大性:密度可达的两个样本必定属于同一个簇 算法描述
9.6层次聚类(AGNES)
层次聚类试图将数据划分成为不同的层次,因此聚类结果呈现明显的树状结构。 AGNES是一种采用自底向上聚合策略的层次聚类算法。在聚类过程中不断合并距离最近的两个类簇,直到达到预期的聚类簇数目。算法的核心在于如何定义簇之间的距离。 1,最小距离(两个簇最近样本距离):
d
m
i
n
(
C
i
,
C
j
)
=
min
?
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∈Cj??dist(x,z) 2,最大距离(两个簇最远样本距离):
d
m
a
x
(
C
i
,
C
j
)
=
max
?
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∈Cj??dist(x,z) 3,平均距离(两个簇两两样本距离均值):
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∈Cj?∑?dist(x,z) 算法描述
?以上内容源于周志华《机器学习》(西瓜书),笔者以自己的理解写了这篇笔记,如有错误欢迎指正
|