聚类算法

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

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

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

性能度量

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

外部指标:

对数据集D={x1,x2,,xm}D={x1,x2,⋯,xm}的簇划分={C1,C2,,Ck}C={C1,C2,⋯,Ck}参考模型给出的簇划分={C1,C2,,Ck}C∗={C1∗,C2∗,⋯,Ck∗},且λλ表示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=|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}
  • Jaccard系数:JC=aa+b+cJC=aa+b+c
  • FM指数:FMI=aa+baa+cFMI=aa+b⋅aa+c
  • Rand指数:RI=2(a+d)m(m1)RI=2(a+d)m(m−1)

其中,JC,FMI,RI[0,1]JC,FMI,RI∈[0,1],且值越大代表聚类效果越好。

内部指标:

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

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内样本间平均距离:avg(C)=2|C|(|C|−1)∑1≤i<j≤|C|dist(xi,xj)簇C内样本间最远距离:diam(C)=max1≤i<j≤|C|dist(xi,xj)簇Ci和Cj最近样本间的距离:dmin(Ci,Cj)=minxi∈Ci,xj∈Cjdist(xi,xj)簇Ci和Cj中心点间的距离:dcen(Ci,Cj)=dist(μi,μj)

上式中dist(,)dist(⋅,⋅)计算两样本间的距离,μμ代表簇CC的中心点μ=1|C|1i|C|xi
  • DB指数:DBI=1ki=1kmaxji(avg(Ci)+avg(Cj)dcen(μi,μj))DBI=1k∑i=1kmaxj≠i(avg(Ci)+avg(Cj)dcen(μi,μj))
  • Dunn指数:DI=min1ik{minji(dmin(Ci,Cj)max1lkdiam(Cl))}DI=min1≤i≤k{minj≠i(dmin(Ci,Cj)max1≤l≤kdiam(Cl))}

距离计算

满足非负性、对称性、传递性的基本度量距离,即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)1pdistman(xi,xj)=||xi−xj||1=∑u=1n|xiu−xju|disted(xi,xj)=||xi−xj||2=∑u=1n|xiu−xju|2distmk(xi,xj)=(∑u=1n|xiu−xju|p)1p

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

  • VDMp(a,b)=i=1kmu,a,imu,amu,b,imu,bpVDMp(a,b)=∑i=1k|mu,a,imu,a−mu,b,imu,b|p

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

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

  • MinkovDMp(xi,xj)=(u=1nc|xiuxju|p+u=nc+1nVDMp(xiu,yju))1pMinkovDMp(xi,xj)=(∑u=1nc|xiu−xju|p+∑u=nc+1nVDMp(xiu,yju))1p

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

原型聚类——K-means

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

E=i=1kxCi||xμi||22μi=1CixCixCiE=∑i=1k∑x∈Ci||x−μi||22,其中μi=1Ci∑x∈Cix是簇Ci的均值向量

EE刻画了簇内样本围绕簇均值向量的紧密程度,E值越小表示簇内样本相似度越高。要想求EE的最优解,需要遍历考查样本集D所有可能的簇划分,是NP难问题;实际操作中,常采用贪心策略,通过迭代优化近似求解。
  • 输入:样本集D={x1,x2,,xm}D={x1,x2,⋯,xm};聚类簇数kk.
  • 算法流程:
  • (1)从D里随机选kk样本作为初始均值向量{μ1,μ2,,μk}.
  • (2)通过循环逐个生成簇,目标是生成kk个聚类簇:
    • D里每个样本xixi
    • a.)计算该样本与各均值向量μiμi的距离:dji=||xjμi||2dji=||xj−μi||2
    • b.)对应可得样本μiμi所归属的簇标记λj=argmini{1,2,,k}djiλj=argmini∈{1,2,⋯,k}dji
    • c.)把样本xixi加入簇Cλj=CλjxjCλj=Cλj⋃xj.
    • 更新各个聚类簇的均值向量μi=1|Ci|xCixμi′=1|Ci|∑x∈Cix
    • 判断μiμi′μiμi是否相等,相等则该聚类簇中心不变,不相等则更新为μiμi′.
    • (3)重复以上过程(2),直到达到最大迭代次数限制;或对所有ii满足|μiμi|ϵϵ时,停止迭代.

    原型聚类——学习向量量化LVQ

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

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

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

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

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

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

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

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

    p(zj=i|xj)=P(zj=i)p(xj|zj=i)p(xj)=αip(xj|μi,Σi)l=1kαlp(xj|μl,Σl)γjipM(zj=i|xj)=P(zj=i)⋅pM(xj|zj=i)pM(xj)=αi⋅p(xj|μi,Σi)∑l=1kαl⋅p(xj|μl,Σl)≜γji

    (1)若模型参数已知,即模型确定时,将样本集DD划分为k个簇={C1,C2,,Ck}C={C1,C2,⋯,Ck}的方法:每个样本xjxj的簇标记λj=argmaxi{1,2,,k}γjiλj=argmaxi∈{1,2,⋯,k}γji
    (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))LL(D)=ln(∏j=1mpM(xj))=ln(∏j=1m(∑i=1kP(zj=i)⋅pM(xj|zj=i)))=ln(∏j=1m(∑i=1kαi⋅p(xj|μi,Σi)))=∑j=1mln(∑i=1kαi⋅p(xj|μi,Σi))

    LL(D)μi=0∂LL(D)∂μi=0可求得μi=j=1mγjixjj=1mγjiμi=∑j=1mγjixj∑j=1mγji;由LL(D)Σi=0∂LL(D)∂Σi=0可求得Σi=j=1mγji(xjμi)(xjμi)Tj=1mγjiΣi=∑j=1mγji(xj−μi)(xj−μi)T∑j=1mγji;将约束αi>0,i=1kαi=1αi>0,∑i=1kαi=1转化成Lagrange乘子后求导,即(LL(D)+λ(i=1kαi1))αi=0∂(LL(D)+λ(∑i=1kαi−1))∂αi=0,可求得αi=1mj=1mγjiαi=1m∑j=1mγji
    • 输入:样本集D={x1,x2,,xm}D={x1,x2,⋯,xm};高斯混合成分个数kk.
    • 算法流程:
    • (1)初始化高斯混合分布的模型参数{(αi,μi,Σi)|1ik}.
    • (2)遍历更新每个样本:
      • 根据贝叶斯公式,计算每个样本xjxj由各高斯混合成分生成的后验概率γji=p(zj=i|xj)(1ik)γji=pM(zj=i|xj),(1≤i≤k).
    • (3)更新每个高斯混合成分的参数:
      • a.)计算新均值向量μi=j=1mγjixjj=1mγjiμi′=∑j=1mγjixj∑j=1mγji
      • b.)计算新协方差矩阵Σi=j=1mγji(xjμi)(xjμi)Tj=1mγjiΣi′=∑j=1mγji(xj−μi)(xj−μi)T∑j=1mγji,
      • c.)计算新混合系数αi=1mj=1mγjiαi′=1m∑j=1mγji.
    • (4)根据后验概率γjiγji,对每个样本确定簇标记λj=argmaxi{1,2,,k}γjiλj=argmaxi∈{1,2,⋯,k}γji,则第CλjCλj个簇更新为Cλj=Cλj{xj}Cλj=Cλj⋃{xj}.

    密度聚类

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

    密度聚类算法DBSCAN

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

    • 输入:样本集D={x1,x2,,xm};邻域参数(ϵ,MinPts)(ϵ,MinPts).
      • 算法流程:
      • (1)初始化核心对象集合Ω=Ω=∅.
      • (2)遍历每个样本,确定该样本是否是核心对象:
        • 对于样本xjxj,若|Nϵ(xj)|MinPts|Nϵ(xj)|≥MinPts,则该样本是核心对象,更新Ω=Ω{xj}Ω=Ω⋃{xj}.
      • (3)根据核心对象的密度可达关系,确定每一个聚类簇:
        • a.)随机选取一个核心对象初始化队列QQ,初始化未访问样本集Γ=D
        • b.)取QQ的首个元素,考查其ϵ邻域内的样本点是否已被划分到某个簇:若未被划分到某个簇,则加入当前簇;若已被划分到某个簇,则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)最小距离:dmin(Ci,Cj)=minx∈Ci,z∈Cjdist(x,z)最大距离:dmax(Ci,Cj)=maxx∈Ci,z∈Cjdist(x,z)平均距离:davg(Ci,Cj)=1|Ci||Cj|∑x∈Ci∑z∈Cjdist(x,z)
      • 输入:样本集D={x1,x2,,xm}D={x1,x2,⋯,xm};聚类簇聚类度量函数dd;聚类簇数k.
      • 算法流程:
      • (1)初始化,每个样本作为一个聚类簇Cj={xj}j=1,2,,mCj={xj},j=1,2,⋯,m.
      • (2)遍历每个样本,计算距离矩阵:
        • 对于任意两个样本,计算距离,得距离矩阵M(i,j)=d(Ci,Cj)M(i,j)=M(j,i)j>iM(i,j)=d(Ci,Cj),M(i,j)=M(j,i),j>i.
      • (3)若聚类簇个数大于预计聚类簇数,则合并距离最近的两个聚类簇,更新距离矩阵:
        • a.)找到距离最近的两个聚类簇CiCi∗CjCj∗,合并得Ci=CiCjCi∗=Ci∗⋃Cj∗
        • b.)对编号在jj∗后的聚类簇重新编号,即编号往前减1,
        • c.)删除距离矩阵的第jj∗行和第jj∗列,对新划分的聚类簇计算距离矩阵.
      • (4)重复以上过程(3),直到聚类簇聚合到预期聚类簇数,停止迭代.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值