# 密度最大值聚类、谱聚类 -- 潘登同学的Machine Learning笔记
密度最大值聚类
密度最大值聚类是一种简洁优美的聚类算法, 可以识别各种形状的类簇, 并且参数很容易确定。
- 局部密度:
ρi=j∑χ(dij−dc),其中χ(x)={1,x<00,otherwise
dc是一个截断距离, ρi是所有点中到i的距离小于dc的点的个数,即ρi=任何一个点以dc为半径的圆内的样本点的数量
dc的设定经验, 使平均每个点的邻居数目是所有点的1%-2%;
- 高局部密度点距离:
δi=minj:ρj>ρi(dij)
δi表示在密度高于i的对象中的所有对象中, 离i最近的点到i的距离
特别地, 对于密度最大的对象, 设置高局部密度距离为maxdij
簇中心和异常点的识别
依据上面的概念定义, 我们可以选取蔟中心的判断异常点了
ρ大δ大 --- 簇中心
ρ小δ大 ---- 异常值
解释:
- ρ大说明周围的点很多
- δ大说明另一个密度大的离我很远(换句话说,就是我是方圆几里内最大的那个)
- 那么蔟中心肯定得是ρ大δ大, 异常值则是ρ小δ大
- 那么对于ρ大δ小的点,就说明他的周围点也很多, 但是周围的点中有比他大的, 所以他就属于某一类(但不是中心)
- 那么对于ρ小δ小的点, 只能说这个点是某一类的边缘点, 因为旁边有比他密度大的点
举个栗子
上图中, 横轴为ρ, 纵轴为δ
先看ρ大δ大的点, 那不就是1和10,他俩就是簇中心;
再看ρ小δ大的点, 那不就是26、27、28, 他们就是异常值;
再看ρ小δ小的点, 那不就是25、24, 他们就是蓝色类别的边缘点;
谱聚类
以下内容来自刘建平Pinard-博客园的学习笔记, 有些许补充及修改
谱聚类分为构图和切图两个步骤
概念引入
邻接矩阵
对于无向图G(V,E), 定义矩阵中的元素wij, 表示点Vi到Vj的距离
由于是无向图, wij=wji
W=w11w21⋮wn1w12w22⋮wn2⋯⋯⋱⋯w1nw2n⋮wnn
度矩阵
对于图中的任意一个点vi,它的度di和它相连的所有边的权重之和
di=j=1∑nwij
根据定义, 度矩阵D是一个n×n的对角阵
D=d1d2⋱dn
相似矩阵
由于数据间的点间没有权重, 所以需要我们自己定义;
由相似矩阵构造邻接矩阵的基本思想是: 距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,不过这仅仅是定性,我们需要定量的权重值。一般来说,我们可以通过样本点距离度量的相似矩阵S来获得邻接矩阵W。
构建邻接矩阵W的方法有三类。ε-邻近法,K邻近法和全连接法。
它设置了一个距离阈值ε,然后用欧式距离xij度量任意两点xi和xj的距离。即相似矩阵的sij=∣∣xi−xj∣∣22, 然后根据sij和ε的大小关系,来定义邻接矩阵W如下:
wij={0,sij>εε,sij<ε
从上式可见,两点间的权重要不就是ε,要不就是0,没有其他的信息了。距离远近度量很不精确,因此在实际应用中,我们很少使用ε-邻近法。
利用KNN算法遍历所有的样本点,取每个样本最近的k个点作为近邻,只有和样本距离最近的k个点之间的wij>0。但是这种方法会造成重构之后的邻接矩阵W非对称,我们后面的算法需要对称邻接矩阵。为了解决这种问题,一般采取下面两种方法之一:
第一种K邻近法是只要一个点在另一个点的K近邻中,则保留sij=e−2σ2∣∣xi−xj∣∣22
wij=wji={0sijxi∈/KNN(xj)andxj∈/KNN(xi)xi∈KNN(xj)orxj∈KNN(xi)
第二种K邻近法是必须两个点互为K近邻中,才能保留sij
wij=wji={0sijxi∈/KNN(xj)orxj∈/KNN(xi)xi∈KNN(xj)andxj∈KNN(xi)
第三种方法所有的点之间的权重值都大于0,因此称之为全连接法。可以选择不同的核函数来定义边权重,常用的有多项式核函数,高斯核函数和Sigmoid核函数。最常用的是高斯核函数RBF,此时相似矩阵和邻接矩阵相同:
wij=sij=e−2σ2∣∣xi−xj∣∣22
拉普拉斯矩阵
拉普拉斯矩阵要根据前面的两个矩阵来构造
L=D−W
而拉普拉斯矩阵具有如下性质:
- 拉普拉斯矩阵是对称矩阵,这可以由D和W都是对称矩阵而得
- 由于拉普拉斯矩阵是对称矩阵,则它的所有的特征值都是实数
- 对于任意的向量α,有
αTLα=21i,j=1∑nwij(αi−αj)2
- 拉普拉斯矩阵是半正定的,且对应的n个实数特征值都大于等于0
推导
αTLα=αTDα−αTWα=i=1∑ndiαi2−i,j=1∑nwijαiαj=21(i=1∑ndiαi2−i,j=1∑nwijαiαj+j=1∑ndjαj2)=21i,j=1∑nwij(αi−αj)2
无向图切图
对于无向图G的切图,我们的目标是将图G(V,E)切成相互没有连接的k个子图,每个子图点的集合为:A1,A2,…Ak,它们满足Ai∩Aj=∅,且A1∪A2∪…∪Ak=V.
-
对于任意两个子图点的集合A,B⊂V, A∩B=∅, 我们定义A和B之间的切图权重为:
W(A,B)=i∈A,j∈B∑wij
-
那么对于我们k个子图点的集合:A1,A2,…Ak,我们定义切图cut为:
cut(A1,A2,...Ak)=21i=1∑kW(Ai,Aiˉ)
其中Aiˉ为Ai的补集,意为除Ai子集外其他V的子集的并集。
我们的总目标
:让子图内的点权重和高,子图间的点权重和低
两种切图方式
RatioCut切图
RatioCut(A1,A2,…,Ak)=21i=1∑k∣Ai∣W(Ai,Aiˉ)
其中,∣Ai∣就是子集A中点的个数, 要想子图内的点权重和高,子图间的点权重和低, 那么就只需要最小化上面的函数
引入引入指示向量hj∈{h1,h2,…,kk},j=1,2,…,k,对于任意一个向量hj, 它是一个n维向量(n为样本数)
hij={0∣Ai∣1vi∈/Ajvi∈Aj
文字表达出来就是: 如果点vi不在子图Aj中,hij就为0, 否则就是子图中权重和的倒数再开根
注意
hj是一个列向量, 用于刻画所有点与某一个子图的某种关系; H不是方阵, 是一个n×k的长方形矩阵
对于某个ha,有
haTLha=21m=1∑n=1∑wmn(ham−han)2=21(m∈Aa,n∈/Aa∑wmn(∣Aa∣1−0)2+m∈/Aa,n∈Aa∑wmn(0−∣Aa∣1)2)=21(m∈Aa,n∈/Aa∑wmn∣Aa∣1+m∈/Aa,n∈Aa∑wmn∣Aa∣1)=21(cut(Aa,Aaˉ)∣Aa∣1+cut(Aaˉ,Aa)∣Aa∣1)=∣Aa∣cut(Aa,Aaˉ)
喔!! 这不就是我们要最小化的函数吗!!
RatioCut(A1,A2,…,Ak)=i=1∑k∣Ai∣W(Ai,Aiˉ)=i=1∑khiTLhi=i=1∑k(HTLH)ii=tr(HTLH)
所以我们的切图目标为:
Hargmintr(HTLH)s.t.HTH=1(因为特征向量是单位化的)
这里与我们之前讲的PCA很相似, 但是有不同的地方, 之前PCA是从数据的协方差矩阵中选择前面几个大的特征值对应的属性作为降维后的特征;
注意
:
而这里就是从拉普拉斯矩阵的特征值矩阵中抽取几个小的特征值,作为切图的依据, 因为H矩阵是一个n×k的长方形矩阵, 可以理解为, 只选择了特征值小的对应的特征向量组成了H矩阵, 所以这个特征值矩阵HTLH就是k×k的
通过找到L的最小的k个特征值,可以得到对应的k个特征向量,这k个特征向量组成一个nxk维度的矩阵,即为我们的H。一般需要对H矩阵按行做标准化,即
hij∗=(∑t=1khit2)21hij
最后,由于我们在使用维度规约的时候损失了少量信息,导致得到的优化后的指示向量h对应的H现在不能完全指示各样本的归属,因此一般在得到nxk维度的矩阵H后还需要对每一行进行一次传统的聚类,比如使用K-Means聚类.
Ncut切图
Ncut切图和RatioCut切图很类似,但是把Ratiocut的分母∣Ai∣换成vol(Ai)(子图内的点权重和). 由于子图样本的个数多并不一定权重就大,我们切图时基于权重也更合我们的目标,因此一般来说Ncut切图优于RatioCut切图。
NCut(A1,A2,…,Ak)=21i=1∑kvol(Ai)W(Ai,Aiˉ)
对应的, Ncut切图对指示向量h做了改进
hij={0vol(Ai)1vi∈/Ajvi∈Aj
对于某个ha,有
αTLα=vol(Aa)cut(Aa,Aaˉ)
推导方式和RatioCut完全一致。也就是说,我们的优化目标仍然是
NCut(A1,A2,…,Ak)=tr(HTLH)
但是此时我们的HTH=I,而是HTDH=I。
推导如下:
hiTDhi=j=1∑nhij2dj=vol(Ai)1j∈Ai∑dj=vol(Ai)1vol(Ai)=1
此时我们的H中的指示向量h并不是标准正交基,所以在RatioCut里面的降维思想不能直接用。
转化一下
我们令H=D−21F, 则:HTLH=(FTD−21)L(D−21F),HTDH=FTF=I,也就是说优化目标变成了:
Fargmin=(FTD−21)L(D−21F)s.t.FTF=I
可以发现这个式子和RatioCut基本一致,只是中间的L变成了D−21LD−21。这样我们就可以继续按照RatioCut的思想,求出D−21LD−21的最小的前k个特征值,然后求出对应的特征向量,并标准化,得到最后的特征矩阵F,最后对F进行一次传统的聚类(比如K-Means)即可。
一般来说, D−21LD−21相当于对拉普拉斯矩阵L做了一次标准化,即
L∗=di∗djLij
(算法)谱聚类算法流程
最常用的相似矩阵的生成方式是基于高斯核距离的全连接方式,最常用的切图方式是Ncut。而到最后常用的聚类方法为K-Means。下面以Ncut总结谱聚类算法流程。
输入:样本集D=(x1,x2,...,xn),相似矩阵的生成方式, 降维后的维度k1, 聚类方法,聚类后的维度k2
输出: 簇划分C(c1,c2,...ck2).
- 根据输入的相似矩阵的生成方式构建样本的相似矩阵S
- 根据相似矩阵S构建邻接矩阵W,构建度矩阵D
- 计算出拉普拉斯矩阵L=D−W
- 构建标准化后的拉普拉斯矩阵D−21LD−21
- 计算D−21LD−21最小的k1个特征值所各自对应的特征向量f
- 将各自对应的特征向量f组成的矩阵按行标准化,最终组成n×k1维的特征矩阵F
- 对F中的每一行作为一个k1维的样本,共n个样本,用输入的聚类方法进行聚类,聚类维数为k2
- 得到簇划分C(c1,c2,...ck2).
谱聚类算法总结
- 谱聚类算法的主要优点有:
- 谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到
- 由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。
- 谱聚类算法的主要缺点有:
- 如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好。
- 聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同。
密度最大值聚类、谱聚类就是这样了, 继续下一章吧! pd的Machine Learning