关于周志华老师的《机器学习》这本书的学习笔记
记录学习过程
本博客记录Chapter9
1 聚类任务
聚类任务(clustering)是一类典型的”无监督学习“任务,其训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律:将数据集中的样本划分为若干个通常是互不相交的子集,每个子集称为一个簇。
形式化地说,假定样本集D={x1,x2,…,xm}包含m个无标记样本,每个样本xi=(xi1,xi2,…,xin)是一个n维地特征向量。则聚类算法将样本集D划分为k个不相交的簇{Cl∣l=1,2,…,k}。我们用λj∈{1,2,…,k}表示样本xj的”簇标记“(cluster label),即xj∈Cλj。于是聚类的结果可以用包含m个元素的簇标记向量λ={λ1,λ2,…,λj}表示。
2 性能度量
聚类性能度量亦称为”有效性指标“(validity index)。针对聚类问题,直观上看,我们希望”物以类聚“,即同一簇的样本尽可能彼此相似,不同簇的样本尽可能不同。换言之,聚类结果的”簇内相似度“应该比较高,并且”簇间相似度“应该比较低。
聚类性能度量的指标大致有两类:
- 外部指标(external index):将聚类结果与某个参考模型(reference model)进行比较
- 内部指标(internal index):直接考察聚类结果而不利用任何参考模型
对于数据集D={x1,x2,…,xm},假定通过聚类得出的簇划分为C={C1,C2,…,Ck},参考模型给出的簇划分C∗={C1∗,C2∗,…,Cs∗},相应的,令λ与λ∗表示C与C∗的簇标记向量。我们将样本两两配对考虑,定义:
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∗中也属于相同簇的样本对,其他类似……
由于每个样本对只能出现在其中一种情况,则有a+b+c+d=2m(m−1)
基于上述四个式子,我们可以推导出下面常用的聚类性能度量外部指标:
-
Jaccard系数
JC=a+b+ca
-
FM指数
FMI=a+ba⋅a+ca
-
Rand指数
RI=m(m−1)2(a+d)
上述三个外部指标的结果均在[0,1]之间,值越大越好。
考虑聚类结果的簇划分C={C1,C2,…,Ck},定义:
avg(C)=∣C∣(∣C∣−1)21≤i≤j≤∣C∣∑dist(xi,xj)diam(C)=1≤i≤j≤∣C∣maxdist(xi,xj)dmin(Ci,Cj)=xi∈Ci,xj∈Cjmindist(xi,xj)dcen(Ci,Cj)=dist(μi,μj)
其中,dist表示两个样本之间的距离,μ表示簇的中心点μ=∣C∣1∑1≤i≤∣C∣xi。avg(C)表示簇C内样本间的平均距离,diam(C)表示簇C内样本的最远距离,dmin表示两个簇之间最近样本间的距离,dcen表示两个簇的中心点之间的距离。
基于上述四个式子,可以推导出常用的聚类性能度量内部指标:
-
DB指数
DBI=k1i=1∑kj=imax(dcen(Ci,Cj)avg(Ci)+avg(Cj))
-
Dunn指数
DI=1≤i≤kmin{j=imin(max1≤l≤kdiam(Cl)dmin(Ci,Cj))}
DBI的值越小越好,而DI的值越大越好。
3 距离计算
对于函数dist(⋅,⋅),若其是一个距离度量,则需要满足一些基本性质:
- 非负性:dist(xi,xj)≥0
- 同一性:dist(xi,xj)=0当且仅当xi=xj
- 对称性:dist(xi,xj)=dist(xj,xi)
- 直递性:dist(xi,xj)≤dist(xi,xk)+dist(xk,xj),可以理解成”三角不等式“
对于有序属性(例如{1,2,3}中1和2更接近,可以比较顺序,因此是有序属性;但是{飞机,火车,轮船}就很难找到顺序关系,因此不是有序属性),对于给定样本xi={xi1,xi2,…,xin}和xj={xj1,xj2,…,xjn},最常用的距离函数是”闵可夫斯基距离“:
distmk(xi,xj)=(u=1∑n∣xiu−xju∣p)p1
- 当p=1时,该距离为曼哈顿距离
- 当p=2时,该距离为欧氏距离
对于无序属性,我们可以采用VDM来衡量距离。令mu,a表示属性u上取值为a的样本数,mu,a,i表示第i个样本簇中在属性u上取值为a的样本数,k为样本簇数,则属性u上两个离散值a与b之间的VDM距离为:
VDMp(a,b)=i=1∑k∣mu,amu,a,i−mu,bmu,b,i∣
将闵可夫斯基距离和VDM距离结合起来即可处理混合属性,假定有nc个有序属性、n−nc个无序属性,且有序属性排列在无序属性之前:
MinkovDMp(xi,xj)=(u=1∑nc∣xiu−xju∣p+u=nc+1∑nVDMp(xiu,xju))p1
需注意的是,通常我们是基于某种形式的距离来定义“相似度度量”(similarity measure),距离越大,相似度越小。然而,用于相似度度量的距离未必一定要满足距离度量的所有基本性质,尤其是直递性。例如在某些任务中我们可能希望有这样的相似度度量:“人”、“马”分别与“人马”相似,但“人”与“马”很不相似;要达到这个目的,可以令“人”、“马”与”人马”之间的距离都比较小,但“人”与“马”之间的距离很大,如图所示,此时该距离不再满足直递性;这样的距离称为“非度量距离”(non-metric distance)。此外,本节介绍的距离计算式都是事先定义好的,但在不少现实任务中,有必要基于数据样本来确定合适的距离计算式,这可通过“距离度量学习”(distance metric learning)来实现。

4 原型聚类
原型聚类(prototype-based clustering):假设聚类结构能通过一组原型刻画。通常情形下,算法对原型进行初始化,然后对原型进行迭代更新求解。
4.1 k均值算法
给定样本集D={x1,x2,…,xm},k均值(k-means)算法针对聚类所得簇划分C={C1,C2,…,Ck},目标是最小化平方误差:
E=i=1∑kx∈Ci∑∣∣x−μi∣∣22
其中μi=∣Ci∣1∑x∈Cix是簇Ci的均值向量。直观来看,该式子刻画了簇内样本围绕簇均值向量的紧密程度,E值越小则簇内样本相似度越高。
k-means算法流程如下:

为了避免运行时间过长,通常会设置一个最大运行轮数或最小调整幅度阈值。
4.2 学习向量量化
学习向量量化(Learning Vector Quantization,检查LVQ)是试图找到一组原型向量来刻画聚类结构,但与一般聚类算法不同的是,LVQ假设数据样本带有类别标记,学习过程中用样本的监督信息来辅助聚类。
假定数据集D={(x1,y1),(x2,y2),…,(xm,ym)},其中每个样本xi有n个属性(xi1;xi2;…;xin),yi是样本xi的类别标记。LVQ算法的目标是学习到一组n维原型向量{p1,p2,…,pn},每个原型向量代表一个聚类簇,簇标记ti∈Y。
LVQ算法描述如下:
通过该流程图,我们可以看出LVQ算法的关键在于上图中的6-10行,即原型向量的更新。直观上看,若样本xj的类别与原型向量pi相同,则令pi∗向xj的方向靠拢:
p′=pi∗+η(xj−pi∗)
p′与xj之间的距离为:
∣∣p′−xj∣∣2=∣∣pi∗+η(xj−pi∗)−xj∣∣2=(1−η)⋅∣∣pi∗−xj∣∣2
其中,η是学习率,位于(0,1)之间。类似地,如果样本xj的类别与原型向量pi不同,则将距离增大为(1+η)∣∣pi∗−xj∣∣2,令原型向量和xj的距离增大。
通过上述过程,对任意的样本xj,它将被划入到与其距离最近的原型向量所代表的簇中;换言之,每个原型向量pi定义了与之相关的一个区域Ri,该区域中每个样本与pi的距离不大于它与其他原型向量的距离,即
Ri={x∈X∣ ∣∣x−pi∣∣2≤∣∣x−pi′∣∣2,i=i′}
由此形成了对样本空间X的簇划分{R1,R2,…,Rq},通常该划分称为“Voronoi剖分”。
4.3 高斯混合聚类
高斯混合聚类(Mixture-of-Gaussian)采用概率模型来表达聚类原型。
高斯分布的概率密度函数如下:
p(x)=(2π)2n∣∑∣211e−21(x−μ)T∑−1(x−μ)
其中,μ是n维均值向量,∑是n×n的协方差矩阵(对称正定矩阵)。
为了明确显示高斯分布与相应参数的依赖关系,我们将概率密度函数记为p(x∣μ,∑),定义高斯混合分布,其中αi为混合系数(mixture coefficient),:
pM(x)=i=1∑kαi⋅p(x∣μi,i∑)i=1∑kαi=1
假设样本的生成过程由高斯混合分布给出,根据αi定义的先验分布选择高斯混合分布(αi表示选择第i个分布的概率),然后根据被选择的混合成分的概率密度函数进行采样,从而生成相应的样本。
若训练集{x1,x2,…,xm}由上述过程给出,令随机变量zj∈1,2,…,k表示生成样本xj的高斯混合成分,其取值未知。显然zj的先验概率P(zj=i)对应于αi。其后验概率对应于下式,并记为γji:
pM(zj=i∣xj)=pM(xj)P(zj=i)⋅pM(xj∣zj=i)=∑l=1kαl⋅p(xj∣μl,∑l)αi⋅p(xj∣μi,∑i)
当混合高斯分布已知时,高斯混合聚类将样本集划分为k个簇,每个样本xj的簇标记λj如下确定(即高斯混合聚类采用概率模型对圆形进行刻画,簇划分由原型对应的后验概率确定):
λj=argmaxi∈{1,2,…,k}γji
由最大化对数似然和EM算法,我们可以求解αi:
αi=m1j=1∑mγji
即每个高斯分布的混合系数由样本属于改成份的平均后验概率确定。
高斯混合聚类的流程如下:

5 密度聚类
密度聚类(density-based clustering):假设聚类结构能通过样本的分布的紧密程度决定。通常情况下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果。
DBSCAN是一种著名的密度聚类算法,其基于一组“邻域”(neighborhood)参数(ϵ,MinPts)来刻画样本分布的紧密程度。给定数据集D={x1,x2,…,xm},定义以下几个概念:
-
ϵ−邻域:对于xj∈D,其ϵ−邻域包含样本集D中与xj的距离不大于ϵ的样本,即
Nϵ(xj)={xj∈D∣dist(xi,xj)≤ϵ}
-
核心对象(core object):若xj的ϵ−邻域至少包含MinPts个样本,即∣Nϵ(xj)∣≥MinPts,则xj是一个核心对象。
-
密度直达(directly density-reachable):若xj位与xi的ϵ−邻域内,且xi是核心对象,则称xi和xj密度直达。
-
密度可达(density-reachable):对xi和xj,存在样本序列p1,p2,…,pn,其中p1=xi,pn=xj,且pi+1和pi密度直达,则称xi和xj密度可达。
-
密度相连(density-connected):对xi和xj,若在xk使得xi与xj均由xk密度可达,则称xi与xj密度相连。

基于上述概念,DBSCAN将“簇”定义为:由密度可达关系导出的最大密度相连样本集合。形式化的说就是,给定邻域参数(ϵ,MinPts),簇C⊆D是满足以下性质的非空样本子集:
- 连接性:xi∈C,xj∈C⇒xi和xj密度相连
- 最大性:xi∈C,xj可由xi密度可达⇒xj∈C
若x是核心对象,由x密度可达的所有样本组成的集合记为X={x′∈D∣x′由x密度可达}是满足最大型和连接性的簇。
DBSCAN算法先任选数据集中一个核心对象为种子(seed),再由此出发确定相应的聚类簇。算法描述如下:

6 层次聚类
层次聚类(hierarchical clustering)试图在不同层次对数据集进行划分,从而形成树形的聚类结构。数据集的划分可以采用 “自底向上”的聚合策略,也可采用 “自顶向下”的分拆策略。
AGNES是一种采用自底向上聚合策略的层次聚类算法。它先将数据集的每个样本看作一个初始聚类簇,然后再算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数。

给定聚类簇Ci和Cj,其距离公式如下:
- 单链接:最小距离dmin(Ci,Cj)=minx∈Ci,z∈Cjdist(x,z)
- 全链接:最大距离dmax(Ci,Cj)=maxx∈Ci,z∈Cjdist(x,z)
- 均链接:平均距离davg(Ci,Cj)=∣Ci∣∣Cj∣1∑x∈Ci∑z∈Cjdist(x,z)
