聚类(Clustering)
定义
聚类试图将数据中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”(cluster)。通过这样的划分,每个簇可能对应于一些潜在的概念(类别),如“浅色瓜”“深色瓜”,“有籽瓜”“无籽瓜”,甚至“本地瓜”“外地瓜”等;需要说明的是,这类概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名。
聚类既能作为一个单独过程,用于寻找数据内在的分布结构,也可作为分类等其他学习任务的先驱过程。例如,在一些商业应用中需对新用户的类型进行判别,但定义“用户类型”对商家来说却可能不太容易,此时往往可先对用户数据进行聚类,根据聚类结果将每个簇定义为一个类,然后再基于这些类训练分类模型,用于判别新用户的类型。
性能度量
聚类性能度量亦称聚类“有效性指标”(validity index)。与监督学习中的性能度量作用相似,对聚类结果,我们需要通过某种性能度量来评估其好坏;另一方面,若明确了最终将要使用的性能度量,则可直接将其作为聚类过程的优化目标,从而更好地得到符合要求的聚类结果。
聚类性能度量大致有两类,一类是将聚类结果与某个“参考模型”(reference model)进行比较,成为“外部指标”(external index);另一类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”(internal index)。
定义
a=|SS|(样本在,结果在)
a
=
|
S
S
|
(
样
本
在
,
结
果
在
)
b=|SD|(样本在,结果不在)
b
=
|
S
D
|
(
样
本
在
,
结
果
不
在
)
c=|DS|(样本不在,结果在)
c
=
|
D
S
|
(
样
本
不
在
,
结
果
在
)
d=|DD|(样本不在,结果不在)
d
=
|
D
D
|
(
样
本
不
在
,
结
果
不
在
)
下面是一些常用的聚类性能度量外部指标:
Jaccard系数(Jaccard Coefficient,简称JC)
JC=aa+b+c J C = a a + b + cFM指数(Fowlkes and Mallows Index,简称FMI)
FMI=aa+b⋅aa+c‾‾‾‾‾‾‾‾‾‾‾‾‾√ F M I = a a + b ⋅ a a + cRand指数(Rand Index,简称RI)
RI=2(a+d)m(m−1) R I = 2 ( a + d ) m ( m − 1 )
显然上述性能度量的结果值均在[0, 1]之间,值越大说明结果越好。
距离计算
给定样本
xi=(xi1;xi2;...;xin)
x
i
=
(
x
i
1
;
x
i
2
;
.
.
.
;
x
i
n
)
与
xj=(xj1;xj2;...;xjn)
x
j
=
(
x
j
1
;
x
j
2
;
.
.
.
;
x
j
n
)
,最常用的是“闵可夫斯基距离”(Minkowski distance)
当 p=1 p = 1 时,闵可夫斯基距离即曼哈顿距离(Manhattan distance)
当 p=2 p = 2 时,闵可夫斯基距离即欧式距离(Euclidean distance)
另外当 p−>∞ p − > ∞ 时,得到切比雪夫距离。
原型聚类
k均值算法(k-means)
给定样本集
D={x1,x2,...,xm}
D
=
{
x
1
,
x
2
,
.
.
.
,
x
m
}
,“k均值”算法针对聚类所得簇划分
C={C1,C2,...,Ck}
C
=
{
C
1
,
C
2
,
.
.
.
,
C
k
}
最小化平方误差
其中 ui=1|Ci|∑x∈Cix u i = 1 | C i | ∑ x ∈ C i x 是簇 Ci C i 的均值向量,直观来看,式子在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度, E E 值越小则簇内样本相似度越高。
这是包含了30个西瓜的西瓜数据集。
给出k均值算法的伪代码:
给出时候k-means结果:
学习向量量化(Learning Vector Quantization)
与k均值算法类似,“学习向量量化”(LVQ)也是试图找到一组原型向量来刻画聚类结构,但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督的信息来辅助聚类。
给定样本集
D={(x1,y1),(x2,y2),...,(xm,ym)}
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
,每个样本
xj
x
j
是由
n
n
个属性描述的特征向量是样本
xj
x
j
的类别标记。LVQ的目标是学得一组
n
n
维原型向量,每个原型向量代表一个聚类簇,簇标记为
ti∈Y
t
i
∈
Y
。
给出学习向量量化的伪代码:
显然LVQ关键代码是第6-10行,即如何更新原型向量。直观上看,对样本 xj x j ,若最近的原型向量 pi∗ p i ∗ 与 xj x j 的标记相同,则令 pi∗ p i ∗ 向 xj x j 方向靠拢:
此时 p′ p ′ 与 xj x j 之间的距离为:
令学习率 η∈(0,1) η ∈ ( 0 , 1 ) ,则原型向量 pi∗ p i ∗ 在更新为 p′ p ′ 之后将更接近 xj x j 。
给出 q=5 q = 5 时候LVQ结果:
高斯混合聚类
与k均值、LVQ用原型向量来刻画聚类结构不同,高斯混合(Mixture-of-Gaussian)聚类采用概率模型来表达聚类原型。
给出高斯混合聚类的伪代码:
给出 k=3 k = 3 时候高斯混合聚类结果:
密度聚类
定义
密度聚类亦称为“基于密度的聚类”(density-based clustering),此类算法假设聚类结构能够通过样本分布的紧密程度确定。通常情况下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。
DBSCAN聚类算法
DBSCAN是一种著名的密度聚类算法,全称为”Density-Based Spatial Clustering of Applications with Noise”,它基于一组“邻域”(neighborhood)参数( ϵ ϵ , MinPts M i n P t s )来刻画样本分布的紧密程度。给定数据集 D={x1,x2,...,xm} D = { x 1 , x 2 , . . . , x m } ,定义下面几个概念:
- ϵ ϵ -邻域:对 xj∈D x j ∈ D ,其 ϵ ϵ -邻域包含样本集 D D 中与的距离不大于 ϵ ϵ 的样本,即 Nϵ(xj)={xi∈D|dist(xi,xj)≤ϵ} N ϵ ( x j ) = { x i ∈ D | d i s t ( x i , x j ) ≤ ϵ } ;
- 核心对象(core object):若 xj x j 的 ϵ ϵ -邻域至少包含 MinPts M i n P t s 个样本,即 |Nϵ(xj)|≥MinPts | N ϵ ( x j ) | ≥ M i n P t s ,则 xj x j 是一个核心对象;
- 密度直达(directly density-reachable):若 xj x j 位于 xi x i 的 ϵ ϵ -邻域中,且 xi x i 是核心对象,则称 xj x j 由 xi x i 密度直达;
- 密度可达(density-connected):对 xi x i 与 xj x j ,若存在样本序列 p1,p2,...,pn p 1 , p 2 , . . . , p n ,其中 p1=xi,pn=xj p 1 = x i , p n = x j 且 pi+1 p i + 1 由 pi p i 密度直达,则称 xj x j 由 xi x i 密度可达;
- 密度相连(density-connected):对
xi
x
i
与
xj
x
j
,若存在
xk
x
k
使得
xi
x
i
与
xj
x
j
均有
xk
x
k
密度可达,则称
xi
x
i
与
xj
x
j
密度相连。
上图为DBSN定义的基本概念(
MinPts=3
M
i
n
P
t
s
=
3
):虚线显示出
ϵ
ϵ
-邻域,
x1
x
1
是核心对象,
x2
x
2
由密度
x1
x
1
直达,
x3
x
3
由
x1
x
1
密度可达,
x3
x
3
与
x4
x
4
密度相连。
基于这些概念,DBSCAN将“簇”定义为:有密度可达关系导出的最大的密度相连样本集合。
给出DBSCAN算法的伪代码:
给出DBSCAN算法聚类结果:
上图为 (ϵ=0.11,MinPts=5) ( ϵ = 0.11 , M i n P t s = 5 ) 生成聚类簇的先后情况。核心对象,非核心对象,噪声样本分别用实心圆,空心圆,星号表示,红色虚线框显示出簇划分。
层次聚类
层次聚类(hierarchical clustering)试图在不同层次对数据集进行划分,从而形成树形聚类结构,数据集的划分可采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。
AGNES(Hausdorff distance)
AGNES是一种采用自底向上聚合策略的层次聚类算法。它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数。给定聚类簇
Ci
C
i
与
Cj
C
j
,可通过下面的式子来计算距离:
当聚类簇距离由
dmin
d
m
i
n
、
dmax
d
m
a
x
或
davg
d
a
v
g
计算时AGNES算法被相应称为“单链接”(single-linkage)、“全链接”(complete-linkage)或“均链接”(average-linkage)算法。
下面是AGNES算法的示意图:
给出AGNES算法的伪代码:
给出AGNES算法的聚类结果: