本文是周志华《机器学习》第九章的学习笔记。
“无监督学习”通过对无标记训练样本的学习来揭示数据的内在性质及规律。通常,“无监督学习”包含的任务类型有“聚类”、“密度估计”、“异常检测”等,下述将主要对“聚类”进行讨论。
(1)“聚类”任务可以作为一个单独过程,也可以作为分类等其他学习任务的前去过程,即根据聚类结果将每个“簇”定义为一个“类”,然后基于这些类训练分类模型。(2)“聚类”任务中使用的样本可以带有标签,也可以不带标签。对无标签样本进行聚类,其数学语言描述如下:假定样本集 D={x1,x2,⋯,xm} D = { x 1 , x 2 , ⋯ , x m } 包含 m m 个无标记样本,每个样本是一个 n n 维特征向量,则聚类算法将样本集划分成 k k 个互斥且完备的簇,即 Cl′⋂l′≠lCl=∅ 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 的“簇标记”,即 xj∈Cλj x j ∈ C λ j 。则样本集 D D 对应的聚类结果可表示为。
性能度量 |
聚类算法的预期目标是“簇内相似度”高,“簇间相似度”低。通过“性能度量”评估聚类结果好坏,将“性能度量”作为“聚类过程优化的目标”。聚类性能度量主要有两大类:(1)外部指标:将聚类结果与某个“参考模型”进行比较;(2)内部指标:直接参考聚类结果而不利用
外部指标:
对数据集
D={x1,x2,⋯,xm}
D
=
{
x
1
,
x
2
,
⋯
,
x
m
}
的簇划分
={C1,C2,⋯,Ck}
C
=
{
C
1
,
C
2
,
⋯
,
C
k
}
参考模型给出的簇划分
∗={C∗1,C∗2,⋯,C∗k}
C
∗
=
{
C
1
∗
,
C
2
∗
,
⋯
,
C
k
∗
}
,且
λ
λ
表示
C
对应的簇标记向量、
λ∗
λ
∗
表示
∗
C
∗
对应的簇标记向量,则可定义
- Jaccard系数: JC=aa+b+c J C = a a + b + c
- FM指数: FMI=aa+b⋅aa+c‾‾‾‾‾‾‾‾‾‾‾‾‾√ F M I = a a + b ⋅ a a + c
- Rand指数: RI=2(a+d)m(m−1) 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
}
,定义
上式中 dist(⋅,⋅) d i s t ( ⋅ , ⋅ ) 计算两样本间的距离, μ μ 代表簇 C C 的中心点。
- DB指数: DBI=1k∑i=1kmaxj≠i(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=min1≤i≤k{minj≠i(dmin(Ci,Cj)max1≤l≤kdiam(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范数:
“连续属性”:在定义域上有无穷多个可能的取值
“离散属性”:在定义域上是有限个取值
“有序属性”:在该属性上定义了“序”关系,如
{1,2,3}
{
1
,
2
,
3
}
里“
1
1
”与“”比较接近,与“
3
3
”相距较远。
“无序属性”:如这样的离散属性即为无序属性。
可以直接在有序属性上计算距离,但不能直接在无序属性上计算距离。
(1)无序属性可利用VDM距离度量:
- VDMp(a,b)=∑i=1k∣∣∣mu,a,imu,a−mu,b,imu,b∣∣∣p 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 上取值为的样本数, mu,a,i m u , a , i 表示在第 i i 个簇中在属性上取值为 a a 的样本数,为簇数。
(2)混合属性(样本向量不同维度,既包含有序属性又包含无序属性)可将Minkowski(Lp范数)距离和VDM结合:
- MinkovDMp(xi,xj)=(∑u=1nc|xiu−xju|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 E 刻画了簇内样本围绕簇均值向量的紧密程度,值越小表示簇内样本相似度越高。要想求 E E 的最优解,需要遍历考查样本集所有可能的簇划分,是NP难问题;实际操作中,常采用贪心策略,通过迭代优化近似求解。
- 输入:样本集 D={x1,x2,⋯,xm} D = { x 1 , x 2 , ⋯ , x m } ;聚类簇数 k k .
- 算法流程:
- (1)从里随机选 k k 个样本作为初始均值向量.
- (2)通过循环逐个生成簇,目标是生成
k
k
个聚类簇:
- 对里每个样本 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λj⋃xj C λ j = C λ j ⋃ x j .
- 更新各个聚类簇的均值向量 μ′i=1|Ci|∑x∈Cix μ i ′ = 1 | C i | ∑ x ∈ C i x ,
- 判断 μ′i μ i ′ 与 μi μ i 是否相等,相等则该聚类簇中心不变,不相等则更新为 μ′i μ i ′ .
- (3)重复以上过程(2),直到达到最大迭代次数限制;或对所有 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 x j 的类标记 yj∈ y j ∈ Y 。
LVQ的目标是学习到一组“代表各个聚类簇”的 n n 维原型向量,即原型向量和样本的属性具有相同的维度。由此,LVQ初始化第 q q 个簇的原型向量的一种方法:从类别标记为的样本里,随机选取一个“样本属性向量”作为“初始原型向量”。- 输入:样本集 D={(x1,y1),(x2,y2),⋯,(xm,ym)} D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯ , ( x m , y m ) } ;原型向量个数 q q ;各原型向量初始类别标记;学习率 η∈(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 内的一个样本:
- a.)计算该样本与各个原型向量 pi(i=1,2,⋯,q) p i ( i = 1 , 2 , ⋯ , q ) 的距离: dji=||xj−pi||2 d j i = | | x j − p i | | 2 ,
- b.)找出与 xj x j 距离最近的原型向量 p∗i p i ∗ , i∗=argmini∈{1,2,⋯,q}dji i ∗ = a r g m i n i ∈ { 1 , 2 , ⋯ , q } d j i ,
- c.)更新原型向量:如 yj=t∗i y j = t i ∗ ,则 p′=p∗i+η⋅(xj−p∗i) p ′ = p i ∗ + η ⋅ ( x j − p i ∗ ) (原型向量靠近 xj x j );否则, p′=p∗i−η⋅(xj−p∗i) p ′ = p i ∗ − η ⋅ ( x j − p i ∗ ) (原型向量远离 xj x j ).
- (3)重复以上过程(2),直到达到最大迭代次数限制;或“原型向量”更新很小甚至不更新时,停止迭代.
原型聚类——高斯混合聚类 高斯混合聚类采用“概率模型”来表达聚类原型,定义高斯混合分布
p(x)=∑i=1kαi⋅p(x|μi,Σi)=∑i=1kαi⋅1(2π)n2|Σi|12e−12(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 个高斯混合成分的维均值矩阵; Σi Σ i 是第 i i 个高斯混合成分的维协方差矩阵; αi>0 α i > 0 是第 i i 个高斯混合成分的“混合系数”,且。样本生成过程:根据“混合系数”定义的先验分布,选择该样本所属的高斯混合成分(其中 αi α i 是选择第 i i 个高斯混合成分的概率),根据被选择的高斯混合成分的“概率密度函数”进行“采样”,从而生成相应的样本。
定义随机变量表示生成样本 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)=αi⋅p(xj|μi,Σi)∑l=1kαl⋅p(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 划分为个簇 ={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)|1≤i≤k} { ( α 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αi⋅p(xj|μi,Σi)))=∑j=1mln(∑i=1kαi⋅p(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γjixj∑j=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)T∑j=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αi−1))∂αi=0 ∂ ( L L ( D ) + λ ( ∑ i = 1 k α i − 1 ) ) ∂ α i = 0 ,可求得 αi=1m∑j=1mγji α i = 1 m ∑ j = 1 m γ j i 。- 输入:样本集 D={x1,x2,⋯,xm} D = { x 1 , x 2 , ⋯ , x m } ;高斯混合成分个数 k k .
- 算法流程:
- (1)初始化高斯混合分布的模型参数.
- (2)遍历更新每个样本:
- 根据贝叶斯公式,计算每个样本 xj x j 由各高斯混合成分生成的后验概率 γji=p(zj=i|xj),(1≤i≤k) γ j i = p M ( z j = i | x j ) , ( 1 ≤ i ≤ k ) .
- (3)更新每个高斯混合成分的参数:
- a.)计算新均值向量 μ′i=∑j=1mγjixj∑j=1mγji μ i ′ = ∑ j = 1 m γ j i x j ∑ j = 1 m γ j i ,
- b.)计算新协方差矩阵 Σ′i=∑j=1mγji(xj−μi)(xj−μi)T∑j=1mγji Σ i ′ = ∑ j = 1 m γ j i ( x j − μ i ) ( x j − μ i ) T ∑ j = 1 m γ j i ,
- c.)计算新混合系数 α′i=1m∑j=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) ϵ− ϵ − 邻域: xj∈D x j ∈ D 的 ϵ− ϵ − 邻域指该邻范围内包含的所有其余样本点集合, Nϵ(xj)={xi∈D|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 中不属于任何簇的样本,通常看作“噪声”或“异常样本”。- 输入:样本集;邻域参数
(ϵ,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 ,初始化未访问样本集,
- b.)取 Q Q 的首个元素,考查其邻域内的样本点是否已被划分到某个簇:若未被划分到某个簇,则加入当前簇;若已被划分到某个簇,则continue,
- c.)考查该邻域内的样本点是否是核心对象:如果是,则进一步根据密度可达关系扩张,获得外围样本点,回到b.)进一步考察;如果不是,则停止.
层次聚类 层次聚类是在“不同层次”对数据集进行划分,形成“树形的聚类结构”。数据集的划分方式:(1)“自底向上”聚合(2)“自顶向下”分拆。
AGNES自底向上聚合的层次聚类算法
该算法初始将每个样本看成一个聚类簇,每一步对“距离最近的两个聚类簇”合并,重复以上过程直到达到预设的聚类簇个数。
计算聚类簇间距离的不同定义:
最小距离: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 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 ;聚类簇数.
- 算法流程:
- (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∗=Ci∗⋃Cj∗ C i ∗ = C i ∗ ⋃ C j ∗ ,
- b.)对编号在 j∗ j ∗ 后的聚类簇重新编号,即编号往前减1,
- c.)删除距离矩阵的第 j∗ j ∗ 行和第 j∗ j ∗ 列,对新划分的聚类簇计算距离矩阵.
- (4)重复以上过程(3),直到聚类簇聚合到预期聚类簇数,停止迭代.