机器学习之聚类分析

聚类分析

在"无监督学习" (unsupervised learning) 中,训练样本的标记信息是未知的,目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。此类学习任务中研究最多、应用最广的是"聚类"(clustering)

聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个"簇" (cluster)。通过这样的划分,每个簇可能对应于一些潜在的概念(类别)。需说明的是,这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名

形式化地说,假定样本集 D = { x 1 , x 2 , … , x m } D=\left\{\boldsymbol{x}_{1}, \boldsymbol{x}_{2}, \ldots, \boldsymbol{x}_{m}\right\} D={x1,x2,,xm}包含 m m m个无标记样本,每个样本 x i = ( x i 1 , x i 2 , … , x i n ) \boldsymbol{x}_{i}=\left(x_{i 1}, x_{i 2}, \ldots, x_{i n}\right) xi=(xi1,xi2,,xin)是一个 n n n维特征向量,则聚类算法将样本集 D D D划分为 k k k个不相交的簇 { C l ∣ l = 1 , 2 ; … , k } \left\{C_{l} \mid l=1,2 ; \ldots, k\right\} {Cll=1,2;,k}, 其中 C l ′ ⋂ l ′ ≠ l C l = ∅ C_{l^{\prime}} \bigcap_{l^{\prime} \neq l} C_{l}=\varnothing Cll=lCl= D = ⋃ l = 1 k C l D=\bigcup_{l=1}^{k} C_{l} D=l=1kCl, 相应地,我们用 λ j ∈ { 1 , 2 , … , k } \lambda_{j} \in\{1,2, \ldots, k\} λj{1,2,,k}来表示样本 x j \boldsymbol{x}_{\boldsymbol{j}} xj的"簇标记" (cluster label) ,即 x j ∈ C λ j \boldsymbol{x}_{j} \in C_{\lambda_{j}} xjCλj, 于是,聚类的结果可用包含 m m m个元素的簇标记向量 λ = ( λ 1 ; λ 2 ; … ; λ m ) \boldsymbol{\lambda}=\left(\lambda_{1} ; \lambda_{2} ; \ldots ; \lambda_{m}\right) λ=(λ1;λ2;;λm)表示

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

基于不同的学习策略,人们设计出多种类型的聚类算法,主要代表为K-meansDBSCAN,在讲解这两个聚类算法前,先谈谈聚类算法涉及的两个基本问题:性能度量和距离计算

性能度量

与监督学习中的性能度量作用相似,对聚类结果,我们需通过某种性能度量来评估其好坏,另一方面,若明确了最终将要使用的性能度量,则可直接将其作为聚类过程的优化目标,从而更好地得到符合要求的聚类结果

聚类是将样本集 D D D划分为若干互不相交的子集,即样本簇,那么什么样的聚类结果比较好呢?直观上看,我们希望"物以类聚",即同一簇的样本尽可能彼此相似,不同簇的样本尽可能不同。换言之,聚类结果的"簇内相似度" (intra-cluster similarity) 高且"簇间相似度" (inter-cluster similarity) 低

聚类性能度量大致有两类:一类是将聚类结果与某个"参考模型" (reference model)进行比较,称为"外部指标" (external index)、另一类是直接考察聚类结果而不利用任何参考模型,称为"内部指标" (internal index)

对具体的一些性能度量指标感兴趣可查看西瓜书

距离计算

  • 闵可夫斯基距离
    dist ⁡ m k ( x i , x j ) = ( ∑ u = 1 n ∣ x i u − x j u ∣ p ) 1 p \operatorname{dist}_{\mathrm{mk}}\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right)=\left(\sum_{u=1}^{n}\left|x_{i u}-x_{j u}\right|^{p}\right)^{\frac{1}{p}} distmk(xi,xj)=(u=1nxiuxjup)p1
    p = 2 p=2 p=2即为欧氏距离, p = 1 p=1 p=1即为曼哈顿距离,也称出租车距离

    定义域为 { 飞机,火车,轮船 } \{飞机,火车,轮船\} {飞机,火车,轮船}这样的离散属性则不能直接在属性值上计算闵可夫斯基距离距离,称为"无序属性"

  • 对无序属性可采用VDM距离,对VDM距离感兴趣可查看西瓜书

  • 需注意的是,通常我们是基于某种形式的距离来定义"相似度度量" (similarity measure) ,距离越大,相似度越小。然而,用于相似度度量的距离未必一定要满足距离度量的所有基本性质,尤其是三角不等式,例如在某些任务中我们可能希望有这样的相似度度量:“人”、 " 马" 分别与"人马"相似,但"人"与" 马"很不相似。要达到这个目的,可以令"人"、“马"与"人马"之间的距离都比较小,但"人"与"马"之间的距离很大,如下图所示,此时该距离不再满足三角不等式,这样的距离称为"非度量距离”(non-metric distance)

    在这里插入图片描述

K-means

算法推导

原型聚类亦称"基于原型的聚类" (prototype based clustering)) 此类算法假设聚类结构能通过一组原型刻画,在现实聚类任务中极为常用.通常情形下,算法先对原型进行初始化,然后对原型进行迭代更新求解。K-means是原型聚类算法最经典的代表

给定样本集 D = { x 1 , x 2 , … , x m } D=\left\{\boldsymbol{x}_{1}, \boldsymbol{x}_{2}, \ldots, \boldsymbol{x}_{m}\right\} D={x1,x2,,xm}, K-means算法针对聚类所得簇划分 C = { C 1 , C 2 , … , C k } \mathcal{C}=\left\{C_{1}, C_{2}, \ldots, C_{k}\right\} C={C1,C2,,Ck}最小化平方误差
E = ∑ i = 1 k ∑ x ∈ C i ∥ x − μ i ∥ 2 2 E=\sum_{i=1}^{k} \sum_{\boldsymbol{x} \in C_{i}}\left\|\boldsymbol{x}-\boldsymbol{\mu}_{i}\right\|_{2}^{2} E=i=1kxCixμi22
其中 μ i = 1 ∣ C i ∣ ∑ x ∈ C i x \boldsymbol{\mu}_{i}=\frac{1}{\left|C_{i}\right|} \sum_{\boldsymbol{x} \in C_{i}} \boldsymbol{x} μi=Ci1xCix是簇 C i C_{i} Ci的均值向量,直观来看 E E E在一定程度上刻画了簇内样本围绕簇均值向量的紧密程度, E E E值越小则簇内样本相似度越高。找到它的最优解需考察样本集 D D D所有可能的簇划分,这是一个NP难问题,因此,K-means算法采用了贪心策略,通过迭代优化来近似求解

算法流程

算法流程如下:

在这里插入图片描述

算法小结

  1. K-means算法采用了贪心策略,通过迭代优化来近似求解,算法收敛速度较快
  2. K-means聚合出来的族更倾向于球状或者说凸形的簇,不容易发现基于连通性的簇、K-means对异常值敏感、K-means需要调K值

DBSCAN

算法推导

密度聚类亦称"基于密度的聚类" (density-based clustering) ,此类算法假设聚类结构能通过样本分布的紧密程度确定。通常情形下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇以获得最终的聚类结果,DBSCAN是密度聚类算法最经典的代表

给定数据集 D = { x 1 , x 2 , … , x m } D=\left\{\boldsymbol{x}_{1}, \boldsymbol{x}_{2}, \ldots, \boldsymbol{x}_{m}\right\} D={x1,x2,,xm}, 定义下面这几个概念:

  1. ϵ \epsilon ϵ-邻域
    N ϵ ( x j ) = { x i ∈ D ∣ dist ⁡ ( x i , x j ) ⩽ ϵ } N_{\epsilon}\left(\boldsymbol{x}_{j}\right)=\left\{\boldsymbol{x}_{i} \in D \mid \operatorname{dist}\left(\boldsymbol{x}_{i}, \boldsymbol{x}_{j}\right) \leqslant \epsilon\right\} Nϵ(xj)={xiDdist(xi,xj)ϵ}

  2. 核心对象(core object):若 x j \boldsymbol{x}_{j} xj ϵ \epsilon ϵ-邻域至少包含 M i n P t s MinPts MinPts个样本,即 ∣ N ϵ ( x j ) ∣ ⩾ M i n P t s \left|N_{\epsilon}\left(\boldsymbol{x}_{j}\right)\right| \geqslant MinPts Nϵ(xj)MinPts, 则 x j \boldsymbol{x}_{j} xj是一个核心对象

  3. 密度直达(directly density-reachable):若 x j \boldsymbol{x}_{j} xj位于 x i \boldsymbol{x}_{i} xi ϵ \epsilon ϵ-邻域中,且 x i \boldsymbol{x}_{i} xi是核心对象,则称 x j \boldsymbol{x}_{j} xj x i \boldsymbol{x}_{i} xi密度直达

  4. 密度可达(density-reachable):对 x i \boldsymbol{x}_{i} xi x j \boldsymbol{x}_{j} xj, 若存在样本序列 p 1 , p 2 , … , p n \boldsymbol{p}_{1}, \boldsymbol{p}_{2}, \ldots, \boldsymbol{p}_{n} p1,p2,,pn, 其中 p 1 = x i , p n = x j \boldsymbol{p}_{1}=\boldsymbol{x}_{i}, \boldsymbol{p}_{n}=\boldsymbol{x}_{j} p1=xi,pn=xj p i + 1 \boldsymbol{p}_{i+1} pi+1 p i \boldsymbol{p}_{i} pi密度直达,则称 x j \boldsymbol{x}_{j} xj x i \boldsymbol{x}_{i} xi密度可达

  5. 密度相连(density-connected):对 x i \boldsymbol{x}_{i} xi x j \boldsymbol{x}_{j} xj, 若存在 x k \boldsymbol{x}_{k} xk使得 x i \boldsymbol{x}_{i} xi x j \boldsymbol{x}_{j} xj均由 x k \boldsymbol{x}_{k} xk密度可达,则称 x i \boldsymbol{x}_{i} xi x j \boldsymbol{x}_{j} xj密度相连

下图给出了上述概念的直观显示
在这里插入图片描述

基于这些概念,DBSCAN 将"簇"定义为:由密度可达关系导出的最大的密度相连样本集合,形式化地说,给定邻域参数 ( ϵ , M i n P t s ) (\epsilon, MinPts) (ϵ,MinPts), 簇 C ⊆ D C \subseteq D CD是满足以下性质的非空样本子集:

  • 连接性(connectivity): x i ∈ C , x j ∈ C ⇒ x i  与  x j  密度相连  \boldsymbol{x}_{i} \in C, \boldsymbol{x}_{j} \in C \Rightarrow \boldsymbol{x}_{i} \text { 与 } \boldsymbol{x}_{j} \text { 密度相连 } xiC,xjCxi  xj 密度相连 
  • 最大性(maximality): x i ∈ C , x j  由  x i  密度可达  ⇒ x j ∈ C \boldsymbol{x}_{i} \in C, \boldsymbol{x}_{j} \text { 由 } \boldsymbol{x}_{i} \text { 密度可达 } \Rightarrow \boldsymbol{x}_{j} \in C xiC,xj  xi 密度可达 xjC

x \boldsymbol{x} x为核心对象,由 x \boldsymbol{x} x密度可达的所有样本组成的集合记为
X = { x ′ ∈ D ∣ x ′  由  x  密度可达  } X=\left\{\boldsymbol{x}^{\prime} \in D \mid \boldsymbol{x}^{\prime} \text { 由 } \boldsymbol{x} \text { 密度可达 }\right\} X={xDx  x 密度可达 }
则不难证明 X X X即为满足连接性与最大性的簇

于是,DBSCAN算法先任选数据集中的一个核心对象为"种子" (seed),再由此出发确定相应的聚类簇

算法流程

算法流程如下:
在这里插入图片描述

算法小结

  1. DBSCAN是基于密度的聚类,容易发现基于连通性的簇,但也容易被连通性引导导致聚合结果某些情况下不是我们想要的
  2. DBSCAN随数据点数增多而计算量显著增大,收敛速度较慢(相比K-means而言)
  3. DBSCAN对噪声数据不敏感,需要调节 ϵ , M i n P t s \epsilon,MinPts ϵ,MinPts参数,对输入参数 ϵ , M i n P t s \epsilon,MinPts ϵ,MinPts敏感,可以自动排除一部分噪声数据,不需要调节 k k k值,聚合结果的簇数是自动生成的
  4. 为了辅助参数 ϵ \epsilon ϵ的确定,可以采用如下方法:给定 k k k值(比如取 k = M i n P t s k=MinPts k=MinPts),计算数据中每个对象与其第 k k k最近邻居之间的距 k d i s t kdist kdist,并对 k d i s t kdist kdist值由大到小排序,随后以对象在排序后的 k d i s t kdist kdist序列中的序号作为横坐标,对应的 k d i s t kdist kdist值作为纵坐标,绘制出二维 k d i s t kdist kdist曲线图。用户将 k d i s t kdist kdist曲线由陡峭转为平缓的拐点处的 k d i s t kdist kdist值设置为参数Eps。在实际操作中,通过这种交互式方法确定的 ϵ \epsilon ϵ具有一定的合理性,但需要过多的人工参与

参考资料

  1. Ester, M. , et al. “A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise.” AAAI Press(1996).

AGNES

算法推导

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

AGNES是一种采用自底向上聚合策略的层次聚类算法。它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个簇进行合并,该过程不断重复,直至达到预设的聚类簇个数。这里的关键是如何计算聚类簇之间的距离。实际上每个簇是一个样本集合,因此,只需采用关于集合的某种距离即可。例如,给定聚类簇 C i C_{i} Ci C j C_{j} Cj, 可通过下面的式子来计算距离:
 最小距离:  d min ⁡ ( C i , C j ) = min ⁡ x ∈ C i , z ∈ C j dist ⁡ ( x , z ) ,  最大距离:  d max ⁡ ( C i , C j ) = max ⁡ x ∈ C i , z ∈ C j dist ⁡ ( x , z ) ,  平均距离:  d avg  ( C i , C j ) = 1 ∣ C i ∣ ∣ C j ∣ ∑ x ∈ C i ∑ z ∈ C j dist ⁡ ( x , z )  .  \begin{aligned} &\text { 最小距离: } d_{\min }\left(C_{i}, C_{j}\right)=\min _{\boldsymbol{x} \in C_{i}, \boldsymbol{z} \in C_{j}} \operatorname{dist}(\boldsymbol{x}, \boldsymbol{z}),\\ &\text { 最大距离: } d_{\max }\left(C_{i}, C_{j}\right)=\max _{x \in C_{i}, \boldsymbol{z} \in C_{j}} \operatorname{dist}(\boldsymbol{x}, \boldsymbol{z}),\\ &\text { 平均距离: } d_{\text {avg }}\left(C_{i}, C_{j}\right)=\frac{1}{\left|C_{i}\right|\left|C_{j}\right|} \sum_{\boldsymbol{x} \in C_{i}} \sum_{z \in C_{j}} \operatorname{dist}(\boldsymbol{x}, \boldsymbol{z}) \text { . } \end{aligned}  最小距离dmin(Ci,Cj)=xCi,zCjmindist(x,z), 最大距离dmax(Ci,Cj)=xCi,zCjmaxdist(x,z), 平均距离davg (Ci,Cj)=CiCj1xCizCjdist(x,z) . 
显然最小距离由两个簇的最近样本决定,最大距离由两个簇的最远样本决定,而平均距离则由两个簇的所有样本共同决定。当采用最小距离、最大距离和平均距离时,AGNES算法被相应地称为"单链接" (single-linkage) 、“全链接” (complete-linkage) 或"均链接" (average-linkage) 算法

算法流程

算法流程如下:
在这里插入图片描述

算法小结

  1. AGNES是一种采用自底向上聚合策略的层次聚类算法,简单易于理解,聚类效果较好
  2. AGNES需要计算聚类簇之间的距离,所以速度较慢
  3. AGNES需要调 k k k值,需要调节采用的聚类簇之间的距离度量,对聚类簇之间的距离度量选取敏感,不同的聚类簇之间的距离度量的选取会导致不同的效果,所以如果没有选择到合适的距离度量,可能结果不是我们想要的
  4. 采用最小距离,即"单链接" (single-linkage)时,AGNES可以起到和DBSCAN类似的效果,即聚类结果能够体现连通性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值