聚类算法

本文是周志华《机器学习》第九章的学习笔记。

“无监督学习”通过对无标记训练样本的学习来揭示数据的内在性质及规律。通常,“无监督学习”包含的任务类型有“聚类”、“密度估计”、“异常检测”等,下述将主要对“聚类”进行讨论。

(1)“聚类”任务可以作为一个单独过程,也可以作为分类等其他学习任务的前去过程,即根据聚类结果将每个“簇”定义为一个“类”,然后基于这些类训练分类模型。(2)“聚类”任务中使用的样本可以带有标签,也可以不带标签。对无标签样本进行聚类,其数学语言描述如下:假定样本集 D={x1,x2,,xm} D = { x 1 , x 2 , ⋯ , x m } 包含 m m 个无标记样本,每个样本xi=(xi1;xi2;;xin)是一个 n n 维特征向量,则聚类算法将样本集D划分成 k k 个互斥且完备的簇{Cl|l=1,2,,k},即 ClllCl= C l ′ ⋂ l ′ ≠ l C l = ∅ ,且 D=kl=1Cl D = ⋃ l = 1 k C l 。用 λj{1,2,,k} λ j ∈ { 1 , 2 , ⋯ , k } 表示样本 xj x j 的“簇标记”,即 xjCλj x j ∈ C λ j 。则样本集 D D 对应的聚类结果可表示为λ=(λ1,λ2,,λm)

性能度量

聚类算法的预期目标是“簇内相似度”高,“簇间相似度”低。通过“性能度量”评估聚类结果好坏,将“性能度量”作为“聚类过程优化的目标”。聚类性能度量主要有两大类:(1)外部指标:将聚类结果与某个“参考模型”进行比较;(2)内部指标:直接参考聚类结果而不利用

外部指标:

对数据集 D={x1,x2,,xm} D = { x 1 , x 2 , ⋯ , x m } 的簇划分 ={C1,C2,,Ck} C = { C 1 , C 2 , ⋯ , C k } 参考模型给出的簇划分 ={C1,C2,,Ck} C ∗ = { C 1 ∗ , C 2 ∗ , ⋯ , C k ∗ } ,且 λ λ 表示 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} 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 }

  • Jaccard系数: JC=aa+b+c J C = a a + b + c
  • FM指数: FMI=aa+baa+c F M I = a a + b ⋅ a a + c
  • Rand指数: RI=2(a+d)m(m1) R I = 2 ( a + d ) m ( m − 1 )

其中, JC,FMI,RI[0,1] J C , F M I , R I ∈ [ 0 , 1 ] ,且值越大代表聚类效果越好。

内部指标:

根据对数据集 D={x1,x2,,xm} D = { x 1 , x 2 , ⋯ , x m } 的簇划分 ={C1,C2,,Ck} C = { C 1 , C 2 , ⋯ , C k } ,定义

Cavg(C)=2|C|(|C|1)1i<j|C|dist(xi,xj)Cdiam(C)=max1i<j|C|dist(xi,xj)CiCjdmin(Ci,Cj)=minxiCi,xjCjdist(xi,xj)CiCjdcen(Ci,Cj)=dist(μi,μj) 簇 C 内 样 本 间 平 均 距 离 : a v g ( C ) = 2 | C | ( | C | − 1 ) ∑ 1 ≤ i < j ≤ | C | d i s t ( x i , x j ) 簇 C 内 样 本 间 最 远 距 离 : d i a m ( C ) = max 1 ≤ i < j ≤ | C | d i s t ( x i , x j ) 簇 C i 和 C 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 ) 簇 C i 和 C j 中 心 点 间 的 距 离 : d c e n ( C i , C j ) = d i s t ( μ i , μ j )

上式中 dist(,) d i s t ( ⋅ , ⋅ ) 计算两样本间的距离, μ μ 代表簇 C C 的中心点μ=1|C|1i|C|xi

  • DB指数: DBI=1ki=1kmaxji(avg(Ci)+avg(Cj)dcen(μi,μj)) 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 ( μ i , μ j ) )
  • Dunn指数: DI=min1ik{minji(dmin(Ci,Cj)max1lkdiam(Cl))} 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 ) ) }

距离计算

满足非负性、对称性、传递性的基本度量距离,即L1,L2,Lp范数:

distman(xi,xj)=||xixj||1=u=1n|xiuxju|disted(xi,xj)=||xixj||2=u=1n|xiuxju|2distmk(xi,xj)=(u=1n|xiuxju|p)1p d i s t m a n ( x i , x j ) = | | x i − x j | | 1 = ∑ u = 1 n | x i u − x j u | d i s t e d ( x i , x j ) = | | x i − x j | | 2 = ∑ u = 1 n | x i u − x j u | 2 d i s t m k ( x i , x j ) = ( ∑ u = 1 n | x i u − x j u | p ) 1 p

“连续属性”:在定义域上有无穷多个可能的取值
“离散属性”:在定义域上是有限个取值
“有序属性”:在该属性上定义了“序”关系,如 {1,2,3} { 1 , 2 , 3 } 里“ 1 1 ”与“2”比较接近,与“ 3 3 ”相距较远。
“无序属性”:如{,,}这样的离散属性即为无序属性。
可以直接在有序属性上计算距离,但不能直接在无序属性上计算距离。
(1)无序属性可利用VDM距离度量:

  • VDMp(a,b)=i=1kmu,a,imu,amu,b,imu,bp V D M p ( a , b ) = ∑ i = 1 k | m u , a , i m u , a − m u , b , i m u , b | p

上式中 mu,a m u , a 表示在属性 u u 上取值为a的样本数, mu,a,i m u , a , i 表示在第 i i 个簇中在属性u上取值为 a a 的样本数,k为簇数。

(2)混合属性(样本向量不同维度,既包含有序属性又包含无序属性)可将Minkowski(Lp范数)距离和VDM结合:

  • MinkovDMp(xi,xj)=(u=1nc|xiuxju|p+u=nc+1nVDMp(xiu,yju))1p M i n k o v D M p ( x i , x j ) = ( ∑ u = 1 n c | x i u − x j u | p + ∑ u = n c + 1 n V D M p ( x i u , y j u ) ) 1 p

原型指样本空间里“具有代表性的点”,可通过一组原型刻画聚类结构。基于原型的聚类算法——对原型初始化,对原型迭代更新。

原型聚类——K-means

“K均值”算法对样本集 D={x1,x2,,xm} D = { x 1 , x 2 , ⋯ , x m } 聚类,得到的簇划分 ={C1,C2,,Ck} C = { C 1 , C 2 , ⋯ , C k } 对应的最小化平方误差:

E=i=1kxCi||xμi||22μi=1CixCixCi E = ∑ i = 1 k ∑ x ∈ C i | | x − μ i | | 2 2 , 其 中 μ i = 1 C i ∑ x ∈ C i x 是 簇 C i 的 均 值 向 量

E E 刻画了簇内样本围绕簇均值向量的紧密程度,E值越小表示簇内样本相似度越高。要想求 E E 的最优解,需要遍历考查样本集D所有可能的簇划分,是NP难问题;实际操作中,常采用贪心策略,通过迭代优化近似求解。

  • 输入:样本集 D={x1,x2,,xm} D = { x 1 , x 2 , ⋯ , x m } ;聚类簇数 k k .
  • 算法流程:
  • (1)从D里随机选 k k 样本作为初始均值向量{μ1,μ2,,μk}.
  • (2)通过循环逐个生成簇,目标是生成 k k 个聚类簇:
    • D里每个样本 xi x i
    • a.)计算该样本与各均值向量 μi μ i 的距离: dji=||xjμi||2 d j i = | | x j − μ i | | 2
    • b.)对应可得样本 μi μ i 所归属的簇标记 λj=argmini{1,2,,k}dji λ j = a r g m i n i ∈ { 1 , 2 , ⋯ , k } d j i
    • c.)把样本 xi x i 加入簇 Cλj=Cλjxj C λ j = C λ j ⋃ x j .
    • 更新各个聚类簇的均值向量 μi=1|Ci|xCix μ i ′ = 1 | C i | ∑ x ∈ C i x
    • 判断 μi μ i ′ μi μ i 是否相等,相等则该聚类簇中心不变,不相等则更新为 μi μ i ′ .
    • (3)重复以上过程(2),直到达到最大迭代次数限制;或对所有 i i 满足|μiμi|ϵϵ时,停止迭代.
    • 原型聚类——学习向量量化LVQ

      LVQ算法里假设数据样本带有“类别标签”,簇划分过程需要记住“类别标签”辅助学习。即,对于给定的样本集 D={(x1,y1),(x2,y2),,(xm,ym)} D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x m , y m ) } n n 维属性xj=(xj1,xj2,,xjn),样本 xj x j 的类标记 yj y j ∈ Y
      LVQ的目标是学习到一组“代表各个聚类簇”的 n n 维原型向量{p1,p2,,pq},即原型向量和样本的属性具有相同的维度。由此,LVQ初始化第 q q 个簇的原型向量的一种方法:从类别标记为tq的样本里,随机选取一个“样本属性向量”作为“初始原型向量”。

      • 输入:样本集 D={(x1,y1),(x2,y2),,(xm,ym)} D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x m , y m ) } ;原型向量个数 q q ;各原型向量初始类别标记{t1,t2,,tq};学习率 η(0,1) η ∈ ( 0 , 1 ) .
      • 算法流程:
      • (1)从类别标记为 ti(i=1,2,,q) t i ( i = 1 , 2 , ⋯ , q ) 的样本里,随机选取一个“样本属性向量”作为初始原型向量 pi(i=1,2,,q) p i ( i = 1 , 2 , ⋯ , q ) ;得初始化原型向量组 {p1,p2,,pq} { p 1 , p 2 , ⋯ , p q } .
      • (2)遍历更新每个原型向量:
        • 随机选取 D D 内的一个样本(xj,yj)
        • a.)计算该样本与各个原型向量 pi(i=1,2,,q) p i ( i = 1 , 2 , ⋯ , q ) 的距离: dji=||xjpi||2 d j i = | | x j − p i | | 2
        • b.)找出与 xj x j 距离最近的原型向量 pi p i ∗ i=argmini{1,2,,q}dji i ∗ = a r g m i n i ∈ { 1 , 2 , ⋯ , q } d j i
        • c.)更新原型向量:如 yj=ti y j = t i ∗ ,则 p=pi+η(xjpi) p ′ = p i ∗ + η ⋅ ( x j − p i ∗ ) (原型向量靠近 xj x j );否则, p=piη(xjpi) p ′ = p i ∗ − η ⋅ ( x j − p i ∗ ) (原型向量远离 xj x j ).
      • (3)重复以上过程(2),直到达到最大迭代次数限制;或“原型向量”更新很小甚至不更新时,停止迭代.
        这里写图片描述

      原型聚类——高斯混合聚类

      高斯混合聚类采用“概率模型”来表达聚类原型,定义高斯混合分布

      p(x)=i=1kαip(x|μi,Σi)=i=1kαi1(2π)n2|Σi|12e12(xμi)TΣ1i(xμi) p M ( x ) = ∑ i = 1 k α i ⋅ p ( x | μ i , Σ i ) = ∑ i = 1 k α i ⋅ 1 ( 2 π ) n 2 | Σ i | 1 2 e − 1 2 ( x − μ i ) T Σ i − 1 ( x − μ i )

      上式, μi μ i 是第 i i 个高斯混合成分的n维均值矩阵; Σi Σ i 是第 i i 个高斯混合成分的n×n维协方差矩阵; αi>0 α i > 0 是第 i i 个高斯混合成分的“混合系数”,且i=1kαi=1

      样本生成过程:根据“混合系数”定义的先验分布,选择该样本所属的高斯混合成分(其中 αi α i 是选择第 i i 个高斯混合成分的概率),根据被选择的高斯混合成分的“概率密度函数”进行“采样”,从而生成相应的样本。

      定义随机变量zj{1,2,,k}表示生成样本 xj x j 的高斯混合成分,则 zj z j 先验概率 P(zj=i)=αi P ( z j = i ) = α i ,由贝叶斯公式 zj z j 后验分布

      p(zj=i|xj)=P(zj=i)p(xj|zj=i)p(xj)=αip(xj|μi,Σi)l=1kαlp(xj|μl,Σl)γji p M ( z j = i | x j ) = P ( z j = i ) ⋅ p M ( x j | z j = i ) p M ( x j ) = α i ⋅ p ( x j | μ i , Σ i ) ∑ l = 1 k α l ⋅ p ( x j | μ l , Σ l ) ≜ γ j i

      (1)若模型参数已知,即模型确定时,将样本集 D D 划分为k个簇 ={C1,C2,,Ck} C = { C 1 , C 2 , ⋯ , C k } 的方法:每个样本 xj x j 的簇标记 λj=argmaxi{1,2,,k}γji λ j = a r g max i ∈ { 1 , 2 , ⋯ , k } γ j i
      (2)模型参数 {(αi,μi,Σi)|1ik} { ( α i , μ i , Σ i ) | 1 ≤ i ≤ k } 利用“极大似然估计求导和EM算法迭代”学习:
      LL(D)=ln(j=1mp(xj))=ln(j=1m(i=1kP(zj=i)p(xj|zj=i)))=ln(j=1m(i=1kαip(xj|μi,Σi)))=j=1mln(i=1kαip(xj|μi,Σi)) L L ( D ) = l n ( ∏ j = 1 m p M ( x j ) ) = l n ( ∏ j = 1 m ( ∑ i = 1 k P ( z j = i ) ⋅ p M ( x j | z j = i ) ) ) = l n ( ∏ j = 1 m ( ∑ i = 1 k α i ⋅ p ( x j | μ i , Σ i ) ) ) = ∑ j = 1 m l n ( ∑ i = 1 k α i ⋅ p ( x j | μ i , Σ i ) )

      LL(D)μi=0 ∂ L L ( D ) ∂ μ i = 0 可求得 μi=j=1mγjixjj=1mγji μ i = ∑ j = 1 m γ j i x j ∑ j = 1 m γ j i ;由 LL(D)Σi=0 ∂ L L ( D ) ∂ Σ i = 0 可求得 Σi=j=1mγji(xjμi)(xjμi)Tj=1mγji Σ i = ∑ j = 1 m γ j i ( x j − μ i ) ( x j − μ i ) T ∑ j = 1 m γ j i ;将约束 αi>0,i=1kαi=1 α i > 0 , ∑ i = 1 k α i = 1 转化成Lagrange乘子后求导,即 (LL(D)+λ(i=1kαi1))αi=0 ∂ ( L L ( D ) + λ ( ∑ i = 1 k α i − 1 ) ) ∂ α i = 0 ,可求得 αi=1mj=1mγji α i = 1 m ∑ j = 1 m γ j i

      • 输入:样本集 D={x1,x2,,xm} D = { x 1 , x 2 , ⋯ , x m } ;高斯混合成分个数 k k .
      • 算法流程:
      • (1)初始化高斯混合分布的模型参数{(αi,μi,Σi)|1ik}.
      • (2)遍历更新每个样本:
        • 根据贝叶斯公式,计算每个样本 xj x j 由各高斯混合成分生成的后验概率 γji=p(zj=i|xj)(1ik) γ j i = p M ( z j = i | x j ) , ( 1 ≤ i ≤ k ) .
      • (3)更新每个高斯混合成分的参数:
        • a.)计算新均值向量 μi=j=1mγjixjj=1mγji μ i ′ = ∑ j = 1 m γ j i x j ∑ j = 1 m γ j i
        • b.)计算新协方差矩阵 Σi=j=1mγji(xjμi)(xjμi)Tj=1mγji Σ i ′ = ∑ j = 1 m γ j i ( x j − μ i ) ( x j − μ i ) T ∑ j = 1 m γ j i ,
        • c.)计算新混合系数 αi=1mj=1mγji α i ′ = 1 m ∑ j = 1 m γ j i .
      • (4)根据后验概率 γji γ j i ,对每个样本确定簇标记 λj=argmaxi{1,2,,k}γji λ j = a r g max i ∈ { 1 , 2 , ⋯ , k } γ j i ,则第 Cλj C λ j 个簇更新为 Cλj=Cλj{xj} C λ j = C λ j ⋃ { x j } .

      密度聚类

      此类方法通过“样本分布的紧密程度”确定聚类结构。即,从样本密度角度考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇,以获得最终的聚类结果。

      密度聚类算法DBSCAN

      该算法是对给定的数据集 D={x1,x2,,xm} D = { x 1 , x 2 , ⋯ , x m } ,基于一组“邻域”参数 (ϵ,MinPts) ( ϵ , M i n P t s ) ,刻画样本分布的紧密程度。首先,给出如下定义:
      (1) ϵ ϵ − 邻域 xjD x j ∈ D ϵ ϵ − 邻域指该邻范围内包含的所有其余样本点集合, Nϵ(xj)={xiD|dist(xi,xj)ϵ} N ϵ ( x j ) = { x i ∈ D | d i s t ( x i , x j ) ≤ ϵ } .
      (2)核心对象:某样本 xj x j 是核心样本,指其 ϵ ϵ − 邻域内至少包含 MinPts M i n P t s 个样本点,即 |Nϵ(xj)|MinPts | N ϵ ( x j ) | ≥ M i n P t s .
      (3)密度直达 xj x j 是核心对象 xi x i ϵ ϵ − 邻域内的点,称 xj x j xi x i 密度直达.
      (4)密度可达:若有样本序列 xi=p1,p2,,pn=xj x i = p 1 , p 2 , ⋯ , p n = x j ,且后一样本点 pi+1 p i + 1 由前一样本点 pi p i 密度直达,则 xj x j xi x i 密度可达.
      (5)密度相连:若样本点 xi x i xj x j 均由 xk x k 密度可达,则 xi x i xj x j 密度相连.
      这里写图片描述
      DBSCAN算法的“簇”是由密度可达导出的“最大”密度相连的“样本的集合”。若 x x 核心对象 x x 密度可达的所有样本组合的集合,即形成一个聚类簇。最后,簇划分确定后,数据集 D D 中不属于任何簇的样本,通常看作“噪声”或“异常样本”。

      • 输入:样本集D={x1,x2,,xm};邻域参数 (ϵ,MinPts) ( ϵ , M i n P t s ) .

        • 算法流程:
        • (1)初始化核心对象集合 Ω= Ω = ∅ .
        • (2)遍历每个样本,确定该样本是否是核心对象:
          • 对于样本 xj x j ,若 |Nϵ(xj)|MinPts | N ϵ ( x j ) | ≥ M i n P t s ,则该样本是核心对象,更新 Ω=Ω{xj} Ω = Ω ⋃ { x j } .
        • (3)根据核心对象的密度可达关系,确定每一个聚类簇:
          • a.)随机选取一个核心对象初始化队列 Q Q ,初始化未访问样本集Γ=D
          • b.)取 Q Q 的首个元素,考查其ϵ邻域内的样本点是否已被划分到某个簇:若未被划分到某个簇,则加入当前簇;若已被划分到某个簇,则continue,
          • c.)考查该邻域内的样本点是否是核心对象:如果是,则进一步根据密度可达关系扩张,获得外围样本点,回到b.)进一步考察;如果不是,则停止.
        • 层次聚类

          层次聚类是在“不同层次”对数据集进行划分,形成“树形的聚类结构”。数据集的划分方式:(1)“自底向上”聚合(2)“自顶向下”分拆。

          AGNES自底向上聚合的层次聚类算法

          该算法初始将每个样本看成一个聚类簇,每一步对“距离最近的两个聚类簇”合并,重复以上过程直到达到预设的聚类簇个数。
          计算聚类簇间距离的不同定义:

          dmin(Ci,Cj)=minxCi,zCjdist(x,z)dmax(Ci,Cj)=maxxCi,zCjdist(x,z)davg(Ci,Cj)=1|Ci||Cj|xCizCjdist(x,z) 最 小 距 离 : d min ( C i , C j ) = min x ∈ C i , z ∈ C j d i s t ( x , z ) 最 大 距 离 : d max ( C i , C j ) = max x ∈ C i , z ∈ C j d i s t ( x , z ) 平 均 距 离 : 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={x1,x2,,xm} D = { x 1 , x 2 , ⋯ , x m } ;聚类簇聚类度量函数 d d ;聚类簇数k.
          • 算法流程:
          • (1)初始化,每个样本作为一个聚类簇 Cj={xj}j=1,2,,m C j = { x j } , j = 1 , 2 , ⋯ , m .
          • (2)遍历每个样本,计算距离矩阵:
            • 对于任意两个样本,计算距离,得距离矩阵 M(i,j)=d(Ci,Cj)M(i,j)=M(j,i)j>i M ( i , j ) = d ( C i , C j ) , M ( i , j ) = M ( j , i ) , j > i .
          • (3)若聚类簇个数大于预计聚类簇数,则合并距离最近的两个聚类簇,更新距离矩阵:
            • a.)找到距离最近的两个聚类簇 Ci C i ∗ Cj C j ∗ ,合并得 Ci=CiCj C i ∗ = C i ∗ ⋃ C j ∗
            • b.)对编号在 j j ∗ 后的聚类簇重新编号,即编号往前减1,
            • c.)删除距离矩阵的第 j j ∗ 行和第 j j ∗ 列,对新划分的聚类簇计算距离矩阵.
          • (4)重复以上过程(3),直到聚类簇聚合到预期聚类簇数,停止迭代.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值