机器学习入门学习笔记(六)聚类

一、聚类任务

在无监督学习中研究最多、应用最广的是“聚类”(clustering)。

无监督学习(unsupervised learning):
训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律。

聚类的目标:是将样本集 D 划分为若干互不相交的子集,即样本“簇”(cluster)。
每个簇可能对应于一些潜在的概念(类别),这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名。

聚类既能作为一个单独过程,用于找寻数据内在的分布结构,也可作为分类等其他学习任务的前驱过程。例如,商业应用中需对新用户的类型进行判别,但定义“用户类型”对商家来说可能不太容易,此时往往可先对用户数据进行聚类,根据聚类结果将每个簇定义为一个类,然后再基于这些类训练分类模型,用于判别新用户的类型。

二、聚类的性能度量

聚类性能度量亦称聚类 “有效性指标”(validity index)。
性能度量技能用于来评估其好坏,也可直接将其作为聚类过程的优化目标。

那么什么样的聚类结果比较好呢 ?
直观上看,我们希望同一簇的样本尽可能彼此相似,不同簇的样本尽可能不同。
即聚类结果的 “簇内相似度”(intra-cluster similarity) 高且 “簇间相似度”(inter-cluster similarity) 低。

聚类性能度量大致有两类:
外部指标 (external index):将聚类结果与某个“参考模型”(reference model)进行比较。
内部指标 (internalindex):直接考察聚类结果。

2.1 外部指标

对数据集 D=(x1,x2,…,xm},假定
通过聚类给出的簇划分为C={C1,C2,…,Ck},
参考模型给出的簇划分为C*={C1*,C2*,…,Cs*
相应地,令入 λ 与 λ* 分别表示与 C 和 C* 对应的簇标记向量。
我们将样本两两配对考虑,定义
在这里插入图片描述
集合 SS 包含了在 C 中隶属于相同簇且在 C* 中也隶属于相同簇的样本对
集合 SD 包含了在 C 中隶属于相同簇但在 C* 中隶属于不同簇的样本对….

由于每个样本对 (xi,xj)(i<j) 仅能出现在一个集合中,因此有a+b + c + d = m(m-1) / 2成立。

基于式(9.1)~(9.4)可导出下面这些常用的聚类性能度量外部指标:

(1)Jaccard系数(Jaccard Coeficient,简称JC)
在这里插入图片描述
(2)FM指数(Fowlkes and Mallows Index,简称FMT)
在这里插入图片描述
(3)Rand 指数(Rand Index,简称РI)
在这里插入图片描述
上述性能度量的结果值均在 [0,1] 区间,值越大越好。

2.2 内部指标

考虑聚类结果的簇划分 C,定义
在这里插入图片描述
其中 dist 用于计算两个样本之间的距离;μ 代表簇 C 的中心点。

avg( C ) 对应于簇C内样本间的平均距离
diam( C ) 对应于簇C内样本间的最远距离
dmin(Ci,Cj) 对应于簇Ci与簇Cj最近样本间的距离
dcen(Ci,Cj) 对应于簇Ci与簇Cj中心点间的距离.

基于式(9.8)~(9.11)可导出下面这些常用的聚类性能度量内部指标:
(1)DB指数 (Davies-Bouldin Index,简称DBI)
在这里插入图片描述
(2)Dunn指数 (Dunn Index,简称DI)
在这里插入图片描述
显然,DBI的值越小越好,而DI则相反,值越大越好.

三、距离计算

函数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)

闵可夫斯基距离”(Minkowski distance)

给定两个样本 xi 与 xj,它们的“闵可夫斯基距离”定义为:
在这里插入图片描述
p=2时,闵可夫斯基距离即欧氏距离(Euclidean distance)
在这里插入图片描述
p=1时,闵可夫斯基距离即曼哈顿距离(Manhattan distance)
在这里插入图片描述

“序”关系

在讨论距离计算时,我们还需要关注属性上是否定义了“序”关系。

有序属性 (ordinal attribute):能直接在属性值上计算距离。例如定义域为 { 1,2,3 } 的离散属性,能直接在属性值上计算距离:“1”与“2”比较接近、与“3”比较远。
无序属性 (non-ordinalattribute):不能直接在属性值上计算距离。例如定义域为 { 飞机,火车,轮船 } 这样的离散属性。
显然,闵可夫斯基距离可用于有序属性。

对无序属性可采用 VDM (Value Diference Metric)。令 mu,a表示在属性 u 上取值为 a 的样本数,mu,a,i 表示在第 i 个样本簇中在属性 u 上取值为 a 的样本数,k 为样本簇数,则属性 u 上两个离散值 a 与 b 之间的 VDM 距离为
在这里插入图片描述
于是,将闵可夫斯基距离和VDM结合即可处理混合属性。
当样本空间中不同属性的重要性不同时,可使用“加权距离”(weighteddistance)。

四、聚类算法

在这里插入图片描述

4.1 原型聚类

原型聚类算法假设聚类结构可以通过一组原型刻画,通常算法先会对原型进行初始化,然后对原型进行迭代更新求解。
原型聚类在现实聚类任务中极为常用,下面介绍几种著名的原型聚类算法:

4.1.1 K 均值算法 (k-means)

给定样本集 D= {x1,x2,…,xm},“k均值” 算法针对聚类所得簇划分 C={C1,C2,…,Ck} 最小化平方误差
在这里插入图片描述
其中ui是簇 Ci 的均值向量。式(9.24)在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度,E值越小则簇内样本相似度越高。

最小化式(9.24)并不容易,找到它的最优解需考察样本集 D 所有可能的簇划分,这是一个 NP难问题。因此,k均值算法采用了贪心策略,通过迭代优化来近似求解式(9.24)。

算法流程如图9.2所示:
1、对均值向量进行初始化(第1行)
2、迭代优化

  • 2.1对当前样本进行簇划分(第4-8行)
  • 2.2 更新均值向量(第9-16行)

若迭代更新后聚类结果保持不变,则在第18行将当前簇划分结果返回。
在这里插入图片描述

学习过程(例子)

以表9.1的西瓜数据集4.0为例来演示 k 均值算法的学习过程:
在这里插入图片描述
假定聚类簇数 k=3
1、对均值向量进行初始化
算法开始时随机选取三个样本 x6, x12, x27 作为初始均值向量,即
μ1 =(0.403, 0.237), μ2 =(0.343, 0.099), μ3 =(0.532, 0.472)

2、迭代优化

  • 2.1对当前样本进行簇划分
    考察样本 x1= (0.697;0.460),它与当前均值向量μ1, μ2, μ3的距离分别为0.369,0.506,0.166, 因此x1将被划入簇C3中,类似的,对数据集中的所有样本考察一遍后,可得当前簇划分为C1 = { x5, x6, x7, x8, x9 , x10, x13 , x14, x15 , x17, x18, x19, x20, x23}
    C2 = { x11, x12, x16 }
    C3 = { x1, x2, x3, x4, x21 , x22, x24 , x25, x26 , x27, x28, x29, x30}

  • 2.2 更新均值向量
    从C1、C2、C3 分别求出新的均值向量:
    μ1’ =(0.473, 0.214), μ2’ =(0.394, 0.066), μ3’ =(0.623, 0.388)

更新当前均值向量后,不断重复上述过程,如图9.3所示,第五轮迭代产生的结果与第四轮迭代相同,于是算法停止,得到最终的簇划分。
在这里插入图片描述

4.1.2 学习向量量化 (LVQ)

与k均值算法类似,“学习向量量化”(Learning Vector Quantization)也是试图找到一组原型向量来刻画聚类结构,但与–般聚类算法不同的是,LVQ假设数据样本带有类别标记,学习过程利用样本的这些监督信息来辅助聚类。

定样本集D = {(x1,y1), (x2,y2)…(xm,ym)},每个样本xj 是由n个属性描述的特征向量, yj 是样本 xj 的类别标记。

LVQ的目标是学得一组 n 维原型向量{p1, p2,…,pq},每个原型向量代表一个聚类簇,簇标记 ti

LVQ算法描述如图9.4所示:
1、先对原型向量进行初始化(第1行),例如对第q个簇可从类别标记为 tq 的样本中随机选取一个作为原型向量
2、对原型向量进行迭代优化(第2~12行)。在每一轮迭代中,算法随机选取一个有标记训练样本,找出与其距离最近的原型向量,并根据两者的类别标记是否一致来对原型向量进行相应的更新。
3、若算法的停止条件已满足(第12行),例如已达到最大迭代轮数,或原型向量更新很小甚至不再更新,则将当前原型向量作为最终结果返回。
在这里插入图片描述
问题:如何更新原型向量?(第6-10行)
直观上看,对样本 xj,若最近的原型向量 pi* 与 xj 的类别标记相同,则令 pi* 向 xj 的方向靠拢,如第7行所示,此时新原型向量为
在这里插入图片描述
p’ 与 xj 之间的距离为
在这里插入图片描述
其中学习率 η∈(0,1),原型向量 pi* 在更新为 p’ 之后将更接近 xj

同理,若 pi* 与 xj 的类别标记不同,则更新后的原型向量与j之间的距离将增大为
在这里插入图片描述
从而更加远离 xj

Voronoi 剖分与区域

在学得一组原型向量后,即可实现对样本空间的簇划分。对任意样本x,它将被划入与其距离最近的原型向量所代表的簇中。

换言之,每个原型向量 pi 定义了与之相关的一个区域 Ri,该区域中每个样本与 pi 的距离不大于它与其他原型向量 pi’(i’≠i)的距离,即
在这里插入图片描述
由此形成了对样本空间的簇划分{R1, R2,…, Rq},该划分通常称为“Voronoi剖分”(Voronoi tessellation)。

LVQ学习过程 例子

以表 9.1的西瓜数据集4.0为例来演示 LVQ的学习过程,令9-21号样本的类别标记为c2,其他样本的类别标记为c1。

假定q=5,即学习目标是找到5个原型向量 p1,p2,p3,p4,p5,并假定其对应的类别标记分别为c1,c2,c2,c1,c1。

1、先对原型向量进行初始化
根据样本的类别标记和簇的预设类别标记对原型向量进行随机初始化,假定初始化为样本 x5, x12, x18, x23,x29

2、对原型向量进行迭代优化
在第一轮迭代中,假定随机选取的样本为 x1,该样本与当前原型向量 p1,p2,p3,p4,p5 的距离分别为 0.283, 0.506, 0.434, 0.260, 0.032。由于 p5 与 x1 距离最近且两者具有相同的类别标记c2,假定学习率n=0.1, 则 LVQ更新p5得到新原型向量
在这里插入图片描述
将p5更新为p’后,不断重复上述过程。

3、若算法的停止条件已满足
这里用轮数做停止条件,不同轮数之后的聚类结果如图9.5所示。
在这里插入图片描述

4.1.3 高斯混合聚类

高斯混合聚类理解起来较为困难,可参阅 【机器学习笔记】通俗易懂解释高斯混合聚类原理 此博客。
与k均值、LVQ用原型向量来刻画聚类结构不同,高斯混合聚类采用概率模型来表达聚类原型。

4.2 密度聚类

密度聚类亦称“基于密度的聚类”(density-based clustering), 此类算法假设聚类结构能通过样本分布的紧密程度确定。

DBSCAN 是一种著名的密度聚类算法,它基于一组“邻域”参数(ε,MinPts)来刻画样本分布的紧密程度。

给定数据集 D= {x1, x2,…, xm}定义下面这几个概念:
ε-邻域: 对xj∈D,其 ε 邻域包含样本集 D 中与 xj 的距离不大于 ε 的样本即Nε(xj)= {xi ∈ D | dist(xi, xj)<=ε }
核心对象 (core object):若xj的 ε-邻域 至少包含 MinPts 个样本,即 I Nε(xj) | > MinPts,则 xj 是一个核心对象;
密度直达 (directly density-reachable):若 xj 位于xi的ε-邻域中,且 xi 是核心对象,则称 xj 由 xi 密度直达;
密度可达 (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是满足以下性质的非空样本子集:

连接性(connectivity):xi ∈ C,xj∈C ,则 xi 与 xj 密度相连
最大性(maximality):xi ∈ C,xj 由 xi 密度可达,则 xj ∈ C

那么,如何从数据集 D 中找出满足以上性质的聚类簇呢?实际上,若 x 为核心对象,由 x 密度可达的所有样本组成的集合记为X,则不难证明X即为满足连接性与最大性的簇.

于是DBSCAN算法先任选数据集中的一个核心对象为“种子”再由此出发确定相应的聚类簇,算法描述如图9.9所示:
1、先根据给定的邻域参数(e,MinPts)找出所有核心对象(第1~7行)
2、任选一核心对象为出发点,找出由其密度可达的样本生成聚类簇(第11-21行)
3、重复步骤2 直到所有核心对象均被访问过为止。
在这里插入图片描述
以表9.1的西瓜数据集4.0为例,假定邻域参数(e,MinPts)设置为 ε = 0.11, MinPts =5。DBSCAN算法先找出各样本的 ε-邻域 并确定核心对象集合:Ω={ x3, x5, x6, x8, x9, x13, x14, x18, x19, x24, x25, x28, x29 }。

然后,从 Ω 中随机选取一个核心对象作为种子,找出由它密度可达的所有样本,这就构成了第一个聚类簇。假定核心对象x8被选中作为种子,则 DBSCAN 生成的第一个聚类簇为

C1 = { x6, x7, x8, x10, x12, x18, x19, x20, x23 }

然后,DBSCAN将C中包含的核心对象从 Ω 中去除:Ω = Ω \ C1 = { x3, x5, x9, x13, x14, x24, x25, x28, x29 }。再从更新后的集合中随机选取一个核心对象作为种子来生成下一个聚类簇。上述过程不断重复,直至为空。图9.10显示出 DBSCAN先后生成聚类簇的情况.C1之后生成的聚类簇为
C2 = { x3, x4, x5, x9, x13, x14, x16, x17, x21 }
C3 = { x1, x2, x22, x26, x29 }
C4 = { x24, x25, x27, x28, x30 }

在这里插入图片描述

4.3 层次聚类

层次聚类 (hierarchical clustering) 试图在不同层次对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。

AGNES是一种采用自底向上聚合策略的层次聚类算法,它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数。

AGNES 算法描述如图9.11所示:
1、先对仅含一个样本的初始聚类簇和相应的距离矩阵进行初始化(第1-9行)
2、合并距离最近的聚类簇,并对合并得到的聚类簇的距离矩阵进行更新(第11-23行)
3、重复步骤2,直至达到 预设的聚类簇数(停止条件)。
在这里插入图片描述
这里的关键是如何计算聚类簇之间的距离。实际上,每个簇是一个样本集合,因此,只需采用关于集合的某种距离即可.例如,给定聚类簇C与Cj,可通过下面的式子来计算距离:
在这里插入图片描述
显然,最小距离由两个簇的最近样本决定,最大距离由两个簇的最远样本决定,而平均距离则由两个簇的所有样本共同决定。当聚类簇距离由dmin、dmax 或 davg 计算时,AGNES算法被相应地称为“单链接”(single-linkage)、“全链接”(complete-linkage) 或“均链接”(average-linkage)算法。

以西瓜数据集4.0为例,令AGNES 算法一直执行到所有样本出现在同一个簇中,即k=1,则可得到图9.12所示的“树状图”(dendrogram),其中每层链接一组聚类簇.
在这里插入图片描述
在树状图的特定层次上进行分割,则可得到相应的簇划分结果.例如,以图9.12中所示虚线分割树状图,将得到包含7个聚类簇的结果。

将分割层逐步提升,则可得到聚类簇逐渐减少的聚类结果.例如图9.13显示出了从图9.12中产生7至4个聚类簇的划分结果。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/chengdong996/article/details/107605892
今日推荐