1.首先来介绍下聚类的衡量指标:
(1)有类别标记
均一性:
p
=
1
k
∑
i
=
1
k
N
(
C
i
=
=
K
i
)
N
(
K
i
)
\mathrm{p}=\frac{1}{k} \sum_{i=1}^{k} \frac{N\left(C_{i}==K_{i}\right)}{N\left(K_{i}\right)}
p=k1∑i=1kN(Ki)N(Ci==Ki),一个簇只包含一个类别的样本,则满足均一性。
K
i
K_i
Ki是某个簇,
C
i
C_i
Ci是实际分类,
N
(
C
i
=
=
K
i
)
N(C_i==K_i)
N(Ci==Ki)表示一个簇分类正确的样本,
N
(
K
i
)
N(K_i)
N(Ki)表示簇的样本总数,该公式含义是正确分类样本占簇的样本数,又可以称之为正确率。
完整性:
r
=
1
k
∑
i
=
1
k
N
(
C
i
=
=
K
i
)
N
(
C
i
)
r=\frac{1}{k} \sum_{i=1}^{k} \frac{N\left(C_{i}==K_{i}\right)}{N\left(C_{i}\right)}
r=k1∑i=1kN(Ci)N(Ci==Ki),同类别样本被归类到相同簇中,则满足完整性。每个聚簇中正确分类的样本数占类型的总样本数比例的和,又称为召回率。
V-measure:均一性和完整性的加权平均,
v
β
=
(
1
+
β
2
)
⋅
p
r
β
2
⋅
p
+
r
v_{\beta}=\frac{\left(1+\beta^{2}\right) \cdot \mathrm{pr}}{\beta^{2} \cdot p+r}
vβ=β2⋅p+r(1+β2)⋅pr
(2)无类别标记
ARI(兰德系数):数据集S共有N个元素,两个聚类结果分别是:
X
=
{
X
1
,
X
2
,
⋯
X
r
}
Y
=
{
Y
1
,
Y
2
,
⋯
Y
s
}
X=\left\{X_{1}, X_{2}, \cdots X_{r}\right\} \quad Y=\left\{Y_{1}, Y_{2}, \cdots Y_{s}\right\}
X={X1,X2,⋯Xr}Y={Y1,Y2,⋯Ys}
C
Y
1
Y
2
⋯
Y
s
s
u
m
X
1
n
11
n
12
⋯
n
1
s
a
1
X
2
n
21
n
22
⋯
n
2
s
a
2
⋮
⋮
⋮
⋱
⋮
⋮
X
r
n
r
1
n
r
2
⋯
n
r
s
a
r
s
u
m
b
1
b
2
⋯
b
s
N
\begin{array}{c|cccc|c} C & Y_{1} & Y_{2} & \cdots & Y_{s} & s u m \\ \hline X_{1} & n_{11} & n_{12} & \cdots & n_{1 s} & a_{1} \\ X_{2} & n_{21} & n_{22} & \cdots & n_{2 s} & a_{2} \\ \vdots & \vdots & \vdots & \ddots & \vdots & \vdots \\ X_{r} & n_{r 1} & n_{r 2} & \cdots & n_{r s} & a_{r} \\ \hline s u m & b_{1} & b_{2} & \cdots & b_{s} & N \end{array}
CX1X2⋮XrsumY1n11n21⋮nr1b1Y2n12n22⋮nr2b2⋯⋯⋯⋱⋯⋯Ysn1sn2s⋮nrsbssuma1a2⋮arN
X和Y的元素个数为:
a
=
{
a
1
,
a
2
,
⋯
a
r
}
b
=
{
b
1
,
b
2
,
⋯
b
s
}
a=\left\{a_{1}, a_{2}, \cdots a_{r}\right\} \quad b=\left\{b_{1}, b_{2}, \cdots b_{s}\right\}
a={a1,a2,⋯ar}b={b1,b2,⋯bs}
记:
n
i
j
=
∣
X
i
∩
Y
i
∣
n_{i j}=\left|X_{i} \cap Y_{i} \right|
nij=∣Xi∩Yi∣
A
R
I
=
Index
−
EIndex
MaxIndex
−
EIndex
=
∑
i
,
j
C
n
i
2
−
[
(
∑
i
C
a
i
2
)
⋅
(
∑
j
C
b
i
2
)
]
/
C
n
2
1
2
[
(
∑
i
C
a
i
2
)
+
(
∑
j
C
b
i
2
)
]
−
[
(
∑
i
C
a
i
2
)
⋅
(
∑
j
C
b
i
2
)
]
/
C
n
2
\begin{array}{l} \qquad A R I=\frac{\text {Index }-\text {EIndex}}{\text {MaxIndex}-\text {EIndex}}=\frac{\sum_{i, j} C_{n_{i}}^{2}-\left[\left(\sum_{i} C_{a_{i}}^{2}\right) \cdot\left(\sum_{j} C_{b_{i}}^{2}\right)\right] / C_{n}^{2}}{\frac{1}{2}\left[\left(\sum_{i} C_{a_{i}}^{2}\right)+\left(\sum_{j} C_{b_{i}}^{2}\right)\right]-\left[\left(\sum_{i} C_{a_{i}}^{2}\right) \cdot\left(\sum_{j} C_{b_{i}}^{2}\right)\right] / C_{n}^{2}} \end{array}
ARI=MaxIndex−EIndexIndex −EIndex=21[(∑iCai2)+(∑jCbi2)]−[(∑iCai2)⋅(∑jCbi2)]/Cn2∑i,jCni2−[(∑iCai2)⋅(∑jCbi2)]/Cn2
轮廓系数:是对聚类结果的有效性的解释和验证,计算样本i到同簇其他样本的平均距离
a
i
a_i
ai,
a
i
a_i
ai越小,说明样本i越应该聚类到本簇,将
a
i
a_i
ai称为样本i的簇内不相似度,簇C中所有样本的
a
i
a_i
ai均值称为簇C的簇不相似度。计算样本i到所有其他某簇
C
j
C_j
Cj的所有样本的平均距离
b
i
j
b_{ij}
bij,称为样本i和簇
C
j
C_j
Cj的不相似度,定义为样本i的簇间不相似度
b
i
=
min
{
b
i
1
,
b
i
2
,
⋯
⋯
b
i
,
K
}
b_{i}=\min \left\{b_{i 1}, b_{i 2}, \cdots \cdots b_{i, K}\right\}
bi=min{bi1,bi2,⋯⋯bi,K}。
根据样本i的簇内不相似度和簇间不相似度,定义样本i的轮廓系数:
s
(
i
)
=
b
(
i
)
−
a
(
i
)
max
{
a
(
i
)
,
b
(
i
)
}
s(i)=\frac{b(i)-a(i)}{\max \{a(i), b(i)\}}
s(i)=max{a(i),b(i)}b(i)−a(i)
s
(
i
)
=
{
1
−
a
(
i
)
b
(
i
)
,
a
(
i
)
<
b
(
i
)
0
,
a
(
i
)
=
b
(
i
)
b
(
i
)
a
(
i
)
−
1
,
a
(
i
)
>
b
(
i
)
s(i)=\left\{\begin{array}{cc} 1-\frac{a(i)}{b(i)}, & a(i)<b(i) \\ 0, & a(i)=b(i) \\ \frac{b(i)}{a(i)}-1, & a(i)>b(i) \end{array}\right.
s(i)=⎩⎪⎨⎪⎧1−b(i)a(i),0,a(i)b(i)−1,a(i)<b(i)a(i)=b(i)a(i)>b(i)
s
i
s_i
si接近1,说明样本i聚类合理;
s
i
s_i
si接近-1,说明样本应该聚类到其他的簇;若
s
i
s_i
si接近0,则说明样本i应该聚类到两个簇的边界上。
所有样本
s
i
s_i
si的均值称为聚类结果的轮廓系数,是该类是否合理的有效度量。
2.层次聚类:
层次聚类对给定的数据集进行层次的分解,直到某种条件满足为止。
凝聚的层次聚类(AGENS算法):
一种自底而上的策略,首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到某个终结条件被满足。
分裂的层次聚类(DIANA算法):
采用自顶向下的策略,它首先将所有簇位于一个簇中,然后逐渐细分为越来越小的簇 ,直到到达了某个终结条件。
AGNES簇间距离的不同定义:
最小距离:两个集合中最近的两个样本,容易形成链状结构。
最大距离:两个集合中最远的两个样本,若存在异常值则不稳定;
平均距离:两个集合中样本间两两距离的平均值,两个集合中样本间两两距离的平方和。
3.密度聚类:
密度聚类方法的指导思想是,只要样本点的密度大于某阈值,则将该样本添加到最近的簇中。这类算法能克服基于距离的算法只能发现“类圆形”(凸)的聚类的缺点,可发现任意形状的聚类,且对噪声数据不敏感。但计算密度单元的计算复杂度大,需要建立空间索引来降低计算量。
(1)DBSCAN算法:
一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在有“噪声”的数据中发现任意形状的聚类。
DBSCAN算法的若干概念
对象的ε-邻域:给定对象在半径ε内的区域。
核心对象:对于给定的数目m,如果一个对象的ε-邻域至少包含m个对象,则称该对象为核心对象。
直接密度可达:给定一个对象集合D,如果p是在q的ε-邻域内,而q是一个核心对象,我们说对象p从对象q出发是直接密度可达的。
密度可达:如果存在一个对象链p1p2…pn,p1=q,pn=p,对pi∈D,(1≤i ≤n),pi+1是从pi关于ε和m直接密度可达的,则对象p是从对象q关于ε和m密度可达的。
密度相连:如果对象集合D中存在一个对象o,使得对象p和q是从o关于ε和m密度可达的,那么对象p和q是关于ε和m密度相连的。
簇:一个基于密度的簇是最大的密度相连对象的集合。
噪声:不包含在任何簇中的对象称为噪声。
DBSCAN算法流程:
如果一个点p的ε-邻域包含多于m个对象,则创建一个p作为核心对象的新簇;
寻找并合并核心对象直接密度可达的对象;
没有新点可以更新簇时,算法结束。
由DBSCAN算法可知:
每个簇至少包含一个核心对象;
非核心对象可以是簇的一部分,构成了簇的边缘(edge);
包含过少对象的簇被认为是噪声。
(2)密度最大值聚类:
密度最大值聚类是一种简洁优美的聚类算法, 可以识别各种形状的类簇, 并且参数很容易确定。
定义:局部密度
ρ
i
\rho \mathbf{i}
ρi:
ρ
i
=
∑
j
χ
(
d
i
j
−
d
c
)
,
其
中
,
χ
(
x
)
=
{
1
x
<
0
0
otherwise
\rho_{i}=\sum_{j} \chi\left(d_{i j}-d_{c}\right), \quad 其中, \quad \chi(x)=\left\{\begin{array}{cc} 1 & x<0 \\ 0 & \text { otherwise } \end{array}\right.
ρi=j∑χ(dij−dc),其中,χ(x)={10x<0 otherwise
dc是一个截断距离, ρi即到对象i的距离小于dc的对象的个数。由于该算法只对ρi的相对值敏感, 所以对dc的选择是稳健的,一种推荐做法是选择dc,使得平均每个点的邻居数为所有点的1%-2%
定义:高局部密度点距离δi
δ
i
=
min
j
:
ρ
j
>
ρ
i
(
d
i
j
)
\delta_{i}=\min _{j: \rho_{j}>\rho_{i}}\left(d_{i j}\right)
δi=j:ρj>ρimin(dij)
在密度高于对象i的所有对象中,到对象i最近的距离,即高局部密度点距离。
簇中心的识别:那些有着比较大的局部密度ρi和很大的高密距离δi的点被认为是簇的中心;高密距离δi较大但局部密度ρi较小的点是异常点;确定簇中心之后,其他点按照距离已知簇的中心最近进行分类,也可按照密度可达的方法进行分类。
举例:
左图是所有点在二维空间的分布, 右图是以ρ为横坐标, 以δ为纵坐标绘制的决策图。可以看到,1和10两个点的ρi和δi都比较大,作为簇的中心点。26、27、28三个点的δi也比较大,但是ρi较小,所以是异常点。
边界和噪声的重认识:
在聚类分析中,通常需要确定每个点划分给某个簇的可靠性:在该算法中,可以首先为每个簇定义一个边界区域(border region),亦即划分给该簇但是距离其他簇的点的距离小于dc的点的集合。然后为每个簇找到其边界区域的局部密度最大的点,令其局部密度为ρh。该簇中所有局部密度大于ρh的点被认为是簇核心的一部分(亦即将该点划分给该类簇的可靠性很大),其余的点被认为是该类簇的光晕(halo),亦即可以认为是噪声。
4.谱聚类:
谱聚类是一种基于图论的聚类方法,通过对样本数据的拉普拉斯矩阵的特征向量进行聚类,从而达到对样本数据聚类的目的。方阵作为线性算子,它的所有特征值的全体统称方阵的谱,方阵的谱半径为最大的特征值,矩阵A的谱半径:(
A
T
A
A^TA
ATA)的最大特征值。
谱分析的整体过程:
给定一组数据x1,x2,…xn,记任意两个点之间的相似度(―距离”的减函数)为sij=<xi,xj>,形成相似度图(similarity graph):G=(V,E) 。如果xi和xj之间的相似度sij大于一定的阈值,那么,两个点是连接的,权值记做sij。
接下来,可以用相似度图来解决样本数据的聚类问题:找到图的一个划分,形成若干个组(Group),使得不同组之间有较低的权值,组内有较高的权值。
若干概念:
无向图G=(V,E)
邻接矩阵
W
=
(
w
i
j
)
i
,
j
=
1
,
…
,
n
W=\left(w_{i j}\right)_{i, j=1, \ldots, n}
W=(wij)i,j=1,…,n
顶点的度di 度矩阵D (对角阵)
d
i
=
∑
j
=
1
n
w
i
j
d_{i}=\sum_{j=1}^{n} w_{i j}
di=j=1∑nwij
子图A的指示向量
1
A
=
(
f
1
,
…
,
f
n
)
′
∈
R
n
f
i
=
1
if
v
i
∈
A
f
i
=
0
otherwise
\begin{array}{l} \mathbb{1}_{A}=\left(f_{1}, \ldots, f_{n}\right)^{\prime} \in \mathbb{R}^{n} \\ \qquad \begin{array}{l} f_{i}=1 \text { if } v_{i} \in A \\ f_{i}=0 \text { otherwise } \end{array} \end{array}
1A=(f1,…,fn)′∈Rnfi=1 if vi∈Afi=0 otherwise
A和B是图G的不相交子图,则定义子图的连接权:
W
(
A
,
B
)
:
=
∑
i
∈
A
,
j
∈
B
w
i
j
W(A, B):=\sum_{i \in A, j \in B} w_{i j}
W(A,B):=i∈A,j∈B∑wij
相似度图G的建立方法:
全连接图:距离越大,相似度越小
高斯相似度
s
(
x
i
,
x
j
)
=
exp
(
−
∥
x
i
−
x
j
∥
2
2
σ
2
)
s\left(x_{i}, x_{j}\right)=\exp \left(\frac{-\left\|x_{i}-x_{j}\right\|^{2}}{2 \sigma^{2}}\right)
s(xi,xj)=exp(2σ2−∥xi−xj∥2)
ε近邻图
k近邻图(k-nearest neighbor graph)
拉普拉斯矩阵及其性质:拉普拉斯矩阵:L = D – W
f
T
L
f
=
f
T
D
f
−
f
T
W
f
=
∑
i
=
1
n
d
i
f
i
2
−
∑
i
,
j
=
1
n
f
i
f
j
w
i
j
=
1
2
(
∑
i
=
1
n
d
i
f
i
2
−
2
∑
i
,
j
=
1
n
f
i
f
j
w
i
j
+
∑
j
=
1
n
d
j
f
j
2
)
=
1
2
∑
i
,
j
=
1
n
w
i
j
(
f
i
−
f
j
)
2
\begin{aligned} &f^{T} L f=f^{T} D f-f^{T} W f=\sum_{i=1}^{n} d_{i} f_{i}^{2}-\sum_{i, j=1}^{n} f_{i} f_{j} w_{i j}\\ &=\frac{1}{2}\left(\sum_{i=1}^{n} d_{i} f_{i}^{2}-2 \sum_{i, j=1}^{n} f_{i} f_{j} w_{i j}+\sum_{j=1}^{n} d_{j} f_{j}^{2}\right)\\ &=\frac{1}{2} \sum_{i, j=1}^{n} w_{i j}\left(f_{i}-f_{j}\right)^{2} \end{aligned}
fTLf=fTDf−fTWf=i=1∑ndifi2−i,j=1∑nfifjwij=21(i=1∑ndifi2−2i,j=1∑nfifjwij+j=1∑ndjfj2)=21i,j=1∑nwij(fi−fj)2
L是对称半正定矩阵,最小特征值是0,相应的特征向量是全1向量。
(1)未正则拉普拉斯矩阵
输入:n个点{pi},簇的数目k
计算n×n的相似度矩阵W和度矩阵D;
计算拉普拉斯矩阵L=D-W;
计算L的前k个特征向量u1,u2,…,uk;
将k个列向量u1,u2,…,uk组成矩阵U,U∈Rn×k;
对于i=1,2,…,n,令yi∈Rk是U的第i行的向量;
使用k-means算法将点(yi)i=1,2,…,n聚类成簇C1,C2,…Ck;
输出簇A1,A2,…Ak,其中,Ai={j|yj∈Ci}
(2)随机游走拉普拉斯矩阵
输入:n个点{pi},簇的数目k
计算n×n的相似度矩阵W和度矩阵D;
计算正则拉普拉斯矩阵Lrw=D-1(D-W);
计算Lrw的前k个特征向量u1,u2,…,uk;
将k个列向量u1,u2,…,uk组成矩阵U,U∈ Rn×k ;
对于i=1,2,…,n,令yi∈Rk是U的第i行的向量;
使用k-means算法将点(yi)i=1,2,…,n聚类成簇C1,C2,…Ck ;
输出簇A1,A2,…Ak,其中,Ai={j|yj∈Ci}
(3)对称拉普拉斯矩阵
输入:n个点{pi},簇的数目k
计算n×n的相似度矩阵W和度矩阵D;
计算正则拉普拉斯矩阵Lsym=D-1/2(D-W) D-1/2;
计算Lsym的前k个特征向量u1,u2,…,uk;
将k个列向量u1,u2,…,uk组成矩阵U,U∈Rn×k;
对于i=1,2,…,n,令yi∈Rk是U的第i行的向量;
对于i=1,2,…,n,将yi∈Rk依次单位化,使得|yi|=1;
使用k-means算法将点(yi)i=1,2,…,n聚类成簇C1,C2,…Ck;
输出簇A1,A2,…Ak,其中,Ai={j|yj∈Ci}
进一步思考:
谱聚类中的K如何确定?
k
∗
=
arg
max
∣
λ
k
+
1
−
λ
k
∣
k^{*}=\arg \max \left|\lambda_{k+1}-\lambda_{k}\right|
k∗=argmax∣λk+1−λk∣
最后一步K-Means的作用是什么?
目标函数是关于子图划分指示向量的函数,该向量的值根据子图划分确定,是离散的。该问题是NP的,转换成求连续实数域上的解,最后用K-Means算法离散化。
未正则/对称/随机游走拉普拉斯矩阵,首选哪个?随机游走拉普拉斯矩阵
(4)标签传递算法
对于部分样本的标记给定,而大多数样本的标记未知的情形,为半监督学习问题。标签传递算法(Label Propagation Algorithm,LPA),将标记样本的标记通过一定的概率传递给未标记样本,直到最终收敛。
标签传递过程