文章目录
1. 聚类(clustering)简介
- 是一种无监督学习:没有训练样本的标记信息。需要自己去挖掘样本数据的内在性质及规律。
- 聚类:将数据集中的样本中距离较近的样本点按照一定策略划分为若干个不相交的子集,把每个子集成为一个"簇",代表不同的类。希望统一簇的样本尽可能相似,不同簇的样本尽可能不同。我们可以从这些簇中自己总结一些规律、概念。
- 数学表达:
样本集 D = { x 1 , x 2 , ⋯   , x m } D=\{x_1,x_2,\cdots,x_m\} D={x1,x2,⋯,xm},有m个无标记样本,每个样本是n维特征向量。聚类将样本集D划分为k个不相交的簇 { C l ∣ l = 1 , 2 , ⋯   , k } \{C_l|l=1,2,\cdots,k\} {Cl∣l=1,2,⋯,k}。每个簇间没有交集,且 D = ⋃ l = 1 k C l D = \bigcup_{l=1}^k C_l D=⋃l=1kCl。每个样本 x j x_j xj的“簇标记” λ j ∈ { 1 , 2 , ⋯   , k } \lambda_j \in \{1,2,\cdots,k\} λj∈{1,2,⋯,k},相应的 x j ∈ C λ j x_j \in C_{\lambda_j} xj∈Cλj。样本集D的聚类的结果可以用每个样本的簇标记表示 λ = ( λ 1 , ⋯   , λ m ) \lambda = (\lambda_1,\cdots,\lambda_m) λ=(λ1,⋯,λm)。 - 聚类任务有时也使用有标记训练的样本。
- 聚类既能作为一个单独过程,寻找数据内在分布;也可以作为分类等其他学习任务的前驱过程,例如当无法定义类别时,可以先用聚类将每个簇定义为一个类,再基于这些类训练分类模型。
2. 距离计算
2.1 “距离度量”的基本性质
- 非负性: d i s t ( x i , x j ) ⩾ 0 dist(x_i,x_j)\geqslant 0 dist(xi,xj)⩾0
- 同一性:当且仅当 x i = x j x_i=x_j xi=xj时, d i s t ( x i , x j ) = 0 dist(x_i,x_j)= 0 dist(xi,xj)=0
- 对称性: d i s t ( x i , x j ) = d i s t ( x j , x i ) dist(x_i,x_j) = dist(x_j,x_i) dist(xi,xj)=dist(xj,xi)
- 直递性: d i s t ( x i , x j ) ⩽ d i s t ( x i , x k ) + d i s t ( x j , x k ) dist(x_i,x_j) \leqslant dist(x_i,x_k) + dist(x_j,x_k) dist(xi,xj)⩽dist(xi,xk)+dist(xj,xk),两边之和大于第三边
2.2 聚类中不同属性的距离计算
- “有序属性”:例如连续属性,和有大小关系的离散属性
- “无序属性”:例如取值离散但没有大小关系的离散属性
有序属性的距离表示
- 闵科夫斯基距离(Minkowski distance)
d i s t m k ( x i , x j ) = ( ∑ u = 1 n ∣ x i ( u ) − x j ( u ) ∣ p ) 1 p dist_{mk}(x_i,x_j) = \big(\sum_{u=1}^n|x_i^{(u)}-x_j^{(u)}|^p \big)^{\frac{1}{p}} distmk(xi,xj)=(u=1∑n∣xi(u)−xj(u)∣p)p1
也可以用加权距离:
d i s t w m k ( x i , x j ) = ( w 1 ∣ x i ( 1 ) − x j ( 1 ) ∣ p + ⋯ + w n ∣ x i ( n ) − x j ( n ) ∣ p ) 1 p dist_{wmk}(x_i,x_j) = \big(w_1|x_i^{(1)}-x_j^{(1)}|^p + \cdots + w_n|x_i^{(n)}-x_j^{(n)}|^p \big)^{\frac{1}{p}} distwmk(xi,xj)=(w1∣xi(1)−xj(1)∣p+⋯+wn∣xi(n)−xj(n)∣p)p1 - 欧式距离(Euclidean distance)
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 ) 1 2 dist_{ed}(x_i,x_j) =||x_i - x_j||_2 = \big(\sum_{u=1}^n|x_i^{(u)}-x_j^{(u)}|^2 \big)^{\frac{1}{2}} disted(xi,xj)=∣∣xi−xj∣∣2=(u=1∑n∣xi(u)−xj(u)∣2)21 - 曼哈顿距离(Manhattan distance)
d i s t e d ( x i , x j ) = ∣ ∣ x i − x j ∣ ∣ 1 = ∑ u = 1 n ∣ x i ( u ) − x j ( u ) ∣ dist_{ed}(x_i,x_j) =||x_i - x_j||_1 = \sum_{u=1}^n|x_i^{(u)}-x_j^{(u)}| disted(xi,xj)=∣∣xi−xj∣∣1=u=1∑n∣xi(u)−xj(u)∣
无序属性的距离VDM(value difference metric)
用
m
u
,
a
m_{u,a}
mu,a表示在属性u上取值a的样本数;
m
u
,
a
,
i
m_{u,a,i}
mu,a,i表示在第i个簇中,属性u取值a的样本数。k是簇数。那么在属性a上两个离散值a,b之间的VDM距离为
V
D
M
p
(
a
,
b
)
=
∑
i
=
1
k
∣
m
u
,
a
,
i
m
u
,
a
−
m
u
,
b
,
i
m
u
,
b
∣
p
VDM_p(a,b) = \sum_{i=1}^k|\frac{m_{u,a,i}}{m_{u,a}}-\frac{m_{u,b,i}}{m_{u,b}}|^p
VDMp(a,b)=i=1∑k∣mu,amu,a,i−mu,bmu,b,i∣p
混合属性
用闵科夫斯基距离和VDM混合处理。假设有
n
c
n_c
nc个有序属性,
n
−
n
c
n-n_c
n−nc个无序属性。另有序属性排列在无序属性之前,则:
d
i
s
t
(
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
)
,
x
j
(
u
)
)
)
dist(x_i,x_j) = \Big(\sum_{u=1}^{n_c}|x_i^{(u)}-x_j^{(u)}|^p + \sum_{u=n_c+1}^n VDM_p(x_i^{(u)},x_j^{(u)})\Big)
dist(xi,xj)=(u=1∑nc∣xi(u)−xj(u)∣p+u=nc+1∑nVDMp(xi(u),xj(u)))
聚类中距离的使用
- 聚类中,通常基于某种形式的距离定义簇间“相似度度量”,距离越大,相似度越小。
- 但用于相似度度量的距离可以是"非度量距离"(non-metrix distance)。即不满足直递性(两边和大于第三边的性质)的距离(例如余弦距离)。
3. k-means
算法基于最小化平方误差:
E
=
∑
i
=
1
k
∑
x
∈
C
i
∣
∣
x
−
μ
i
∣
∣
2
2
E = \sum_{i=1}^k\sum_{x \in C_i}||x-\mu_i||_2^2
E=i=1∑kx∈Ci∑∣∣x−μi∣∣22
其中
μ
i
=
1
C
i
∑
x
∈
C
i
x
i
\mu_i = \frac{1}{C_i}\sum_{x \in C_i}x_i
μi=Ci1∑x∈Cixi是簇
C
i
C_i
Ci的均值向量。代表簇内样本围绕均值向量的紧密程度,E越小簇内样本相似度越高。
3.1.k-means算法
- 描述
有数据集,从数据集中随机选出k个样本,作为k类的质心;将数据集中剩余的的样本计算和每个质心的距离,选出距离最小的质心,作为此质心代表的类的样本点。再用每类的样本点计算平均值更新质心,再划分样本点。 - 算法
输入:数据 D = x 1 , x 2 , x 3 , ⋯   , x m D={x_1,x_2,x_3,\cdots,x_m} D=x1,x2,x3,⋯,xm、聚类的簇数k,最大迭代次数N
输出:簇的划分 C = c 1 , c 2 , ⋯   , c k C={c_1,c_2,\cdots,c_k} C=c1,c2,⋯,ck
- 1)从数据集D中随机选出k个样本,作为初始的k个质心 u 1 , u 2 , ⋯   , u k {u_1,u_2,\cdots,u_k} u1,u2,⋯,uk
- 2)对于
n
=
1
,
2
,
.
.
.
,
N
n=1,2,...,N
n=1,2,...,N(迭代次数)
- 将簇划分C初始化为 C t = ∅ , t = 1 , 2 , ⋯   , k C_t = \emptyset,t=1,2,\cdots,k Ct=∅,t=1,2,⋯,k
- 对于 i = 1 , 2 , . . . m i=1,2,...m i=1,2,...m,计算样本 x i x_i xi和k个质心向量的距离 d i j = ∣ ∣ x i − u j ∣ ∣ d_{ij}=||x_i - u_j|| dij=∣∣xi−uj∣∣,将 x i x_i xi标记为最小的 d i j d_{ij} dij对应的类别 λ i \lambda_i λi。此时更新 C λ i = C λ i ⋃ { x i } C_{\lambda_i} = C_{\lambda_i} \bigcup \{x_i\} Cλi=Cλi⋃{xi}
- 对于 j = 1 , 2 , ⋯   , k j=1,2,\cdots,k j=1,2,⋯,k对 C j C_j Cj中所有d样本点重新计算新的质心 u j = 1 ∣ C j ∣ ∑ x ∈ C j x u_j = \frac{1}{|C_j|}\sum_{x\in C_j} x uj=∣Cj∣1∑x∈Cjx
- 如果k个质心向量都没有发生变化,跳转到步骤3
- 3)输出 C = { C 1 , C 2 , C 3 , ⋯   , C k } C = \{C_1,C_2,C_3,\cdots,C_k\} C={C1,C2,C3,⋯,Ck}
其中,停止条件:k个质心向量不再变化,或到达N次迭代次数。其中距离如果用闵氏距离计算,需要将特征归一化,因为用不同的量纲计算距离无意义。
3. 缺点
- 聚类簇数k需要自己指定
- 初始化质心时随机挑选K个样本点,如果初始化设置点不好,可能需要很多次迭代,质心点才能收敛
- 每次迭代需要计算全部样本距质心的距离,计算量很大
3.2. k-means++(改进算法)
- 从数据集中随机选择一个点作为聚类中心 u 1 u_1 u1
- 对数据中每个点 x i x_i xi,计算它与已经选择的聚类中心点的距离 D ( x ) = a r g m i n ∑ r = 1 k − s e l e c t e d ∣ ∣ x i − u r ∣ ∣ 2 D(x) = argmin \sum_{r=1}^{k-selected} ||x_i - u_r||^2 D(x)=argmin∑r=1k−selected∣∣xi−ur∣∣2(距所有中心点距离的最小值,当作此点距聚类中心点的距离)
- 选择 D ( x ) D(x) D(x)较大的数据点作为新的聚类中心
- 重复2,3,直到选出了k个质心
- 利用这k个质心作为初始化质心去运行标准的K-means算法
3.3. elkan k-means(改进算法)
可以解决计算量太大的问题;但不支持稀疏数据。
- 每轮迭代时不需要计算样本点到所有质心的距离,而是通过“两边之和大于等于第三边,以及两边之差小于第三边”的性质,减少计算量。
- 假如有一个样本点 x x x和两个质心 u 1 , u 2 u_1,u_2 u1,u2。预先计算两个质心点之间的距离 d i s t ( u 1 , u 2 ) dist(u_1,u_2) dist(u1,u2),如果 2 d i s t ( x , u 1 ) ⩽ d i s t ( u 1 , u 2 ) 2dist(x,u_1) \leqslant dist(u_1,u_2) 2dist(x,u1)⩽dist(u1,u2)就可以得出 d i s t ( x , u 1 ) < = d i s t ( x , u 2 ) dist(x,u_1) <= dist(x,u_2) dist(x,u1)<=dist(x,u2)。没有必要再计算 d i s t ( x , u 2 ) dist(x,u_2) dist(x,u2)
- 对于一个样本点x和两个质心 u 1 , u 2 u_1,u_2 u1,u2,可以得到 d i s t ( x , u 1 ) > = m a x ( 0 , D ( x , u 1 ) − d i s t ( u 1 , u 2 ) ) dist(x,u1) >= max(0,D(x,u1)-dist(u_1,u_2)) dist(x,u1)>=max(0,D(x,u1)−dist(u1,u2))
3.4. miniBatch k-means(改进)
减少计算量
- 更快的将算法在局部最优点收敛,有一定的精度损失
- 先随机抽取部分样本点,将样本分配到最近的中心点,接着更新中心点。
- 直到算法达到收敛或指定迭代次数,算法停止
3.5. k-means总结
注意:需要调量纲
- 优点
- 原理简单,实现容易
- 聚类效果较优
- 算法可解释度较强
- 需要调参的参数仅仅是簇数k
- 缺点
- k值不好把握
- 对不是凸的数据集比较难收敛
- 如果各类隐含类别的数据不平衡,比如各类别的数据量严重失衡,或各隐含类别的方差不同,则聚类效果不佳
- 使用迭代,得到的结果是局部最优
- 对噪声和异常点比较敏感,需要去除异常点
- 对拉长的簇或不规则形状的簇的响应较差。
- 在高维空间中,欧几里德距离可能会有维数灾难。所以在k-means聚类之前运行降维算法,如主成分分析(PCA),可以缓解这一问题并加快计算速度。
4. 高斯混合聚类(mixture of Gaussian)
- 采用概率模型表达聚类原型(原型,指样本空间中具有代表性的点)
4.1. 概念
- 多元高斯分布
n维样本空间中的随机向量x,概率密度为
p ( x ∣ μ , Σ ) = p ( x ) = 1 ( 2 π ) n / 2 ∣ Σ ∣ 1 / 2 e − 1 2 ( x − μ ) T Σ − 1 ( x − μ ) p(x|\mu,\Sigma)=p(x) = \frac{1}{(2\pi)^{n/2}|\Sigma|^{1/2}}e^{-\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)} p(x∣μ,Σ)=p(x)=(2π)n/2∣Σ∣1/21e−21(x−μ)TΣ−1(x−μ)
其中 μ \mu μ是n维均值向量, Σ \Sigma Σ是 n × n n\times n n×n的协方差矩阵。
一个高手的链接:多元高斯分布 - 高斯混合分布
p m i x ( x ) = ∑ i = 1 k α i p ( x ∣ μ i , Σ i ) p_{mix}(x) = \sum_{i=1}^k\alpha_i p(x|\mu_i,\Sigma_i) pmix(x)=i=1∑kαip(x∣μi,Σi)
由k个多元高斯分布组成。 ∑ i = 1 k α i = 1 \sum_{i=1}^k \alpha_i = 1 ∑i=1kαi=1
4.2. 高斯混合聚类
- 假设样本集是由高斯混合分布给出:
根据不同高斯分布的权重 α 1 , α 2 , ⋯   , α k \alpha_1,\alpha_2,\cdots,\alpha_k α1,α2,⋯,αk,选择一个高斯分布;根据选择的高斯分布的概率密度函数采样,生成样本。 - 聚类的结果:
样本 x j x_j xj由第 i i i个高斯分布生成(由哪个高斯分布生成的概率最大),类别 z j z_j zj值为第 i i i类。不同的高斯分布构成不同的簇,共将样本集划分为k个簇。
其中样本 x j x_j xj由第i个高斯分布生成的概率为:
p m i x ( z j = i ∣ x j ) = p ( z j = i ) p m i x ( x j ∣ z j = i ) p m i x ( x j ) = α i p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l p ( x j ∣ μ l , Σ l ) \begin{aligned} p_{mix}(z_j=i|x_j) &= \frac{p(z_j = i)p_{mix}(x_j|z_j = i)}{p_{mix}(x_j)} \\ &=\frac{\alpha_i p(x_j|\mu_i,\Sigma_i)}{\sum_{l=1}^k \alpha_l p(x_j|\mu_l,\Sigma_l)} \end{aligned} pmix(zj=i∣xj)=pmix(xj)p(zj=i)pmix(xj∣zj=i)=∑l=1kαlp(xj∣μl,Σl)αip(xj∣μi,Σi)
另 r j i = p m i x ( z j = i ∣ x j ) r_{ji} =p_{mix}(z_j=i|x_j) rji=pmix(zj=i∣xj);最终样本 x j x_j xj的类标记为 λ j = arg max i ∈ 1 , 2 , ⋯   , k r j i \lambda_j = \arg\max_{i\in {1,2,\cdots,k}} r_{ji} λj=argmaxi∈1,2,⋯,krji,即概率最大的那个高斯分布。 - 利用极大似然估计求解高斯混合分布的参数
μ
1
,
⋯
 
,
μ
k
;
Σ
1
,
⋯
 
,
Σ
k
\mu_1,\cdots,\mu_k;\Sigma_1,\cdots,\Sigma_k
μ1,⋯,μk;Σ1,⋯,Σk
L L ( D ) = l n ( ∏ j = 1 m p m i x ( x j ) ) = ∑ j = 1 m l n ( ∑ i = 1 k α i p ( x j ∣ μ i , Σ i ) ) \begin{aligned} LL(D) &= ln(\prod_{j=1}^mp_{mix}(x_j)) \\ &= \sum_{j=1}^mln(\sum_{i=1}^k \alpha_i p(x_j|\mu_i,\Sigma_i) ) \end{aligned} LL(D)=ln(j=1∏mpmix(xj))=j=1∑mln(i=1∑kαip(xj∣μi,Σi))
利用EM算法迭代优化求解。 - 公式推导:
条件:
L L ( D ) = ∑ j = 1 m l n ( ∑ i = 1 k α i p ( x j ∣ μ i , Σ i ) ) ∑ i = 1 k α i = 1 \begin{aligned} LL(D) &= \sum_{j=1}^mln(\sum_{i=1}^k \alpha_i p(x_j|\mu_i,\Sigma_i) ) \\ \sum_{i=1}^k \alpha_i &= 1 \end{aligned} LL(D)i=1∑kαi=j=1∑mln(i=1∑kαip(xj∣μi,Σi))=1
其中D是样本集,m是D样本集样本个数,k是高斯混合分布中高斯分布的个数。
拉格朗日函数:
L = ∑ j = 1 m l n ( ∑ i = 1 k α i p ( x j ∣ μ i , Σ i ) ) + λ ( ∑ i = 1 k α i − 1 ) \begin{aligned} L &= \sum_{j=1}^mln(\sum_{i=1}^k \alpha_i p(x_j|\mu_i,\Sigma_i) ) + \lambda(\sum_{i=1}^k \alpha_i - 1) \\ \end{aligned} L=j=1∑mln(i=1∑kαip(xj∣μi,Σi))+λ(i=1∑kαi−1)
对 α i \alpha_i αi求导
∂ L ∂ α i = ∑ j = 1 m p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α i p ( x j ∣ μ l , Σ l ) + λ = 0 λ = − ∑ j = 1 m p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l p ( x j ∣ μ l , Σ l ) α i λ = − ∑ j = 1 m α i p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l p ( x j ∣ μ l , Σ l ) = − ∑ j = 1 m r j i ∑ i = 1 k α i λ = λ = − ∑ j = 1 m ∑ i = 1 k α i p ( x j ∣ μ i , Σ i ) ∑ l = 1 k α l p ( x j ∣ μ l , Σ l ) = − m α i = 1 m ∑ j = 1 m r j i \begin{aligned} \frac{\partial L}{\partial \alpha_i} &= \sum_{j=1}^m \frac{p(x_j|\mu_i,\Sigma_i)}{\sum_{l=1}^k \alpha_i p(x_j|\mu_l,\Sigma_l)} + \lambda =0 \\ \lambda &= -\sum_{j=1}^m \frac{p(x_j|\mu_i,\Sigma_i)}{\sum_{l=1}^k \alpha_l p(x_j|\mu_l,\Sigma_l)} \\ \alpha_i \lambda &= -\sum_{j=1}^m \frac{\alpha_ip(x_j|\mu_i,\Sigma_i)}{\sum_{l=1}^k \alpha_l p(x_j|\mu_l,\Sigma_l)} = -\sum_{j=1}^m r_{ji} \\ \sum_{i=1}^k \alpha_i \lambda =\lambda&= -\sum_{j=1}^m\frac{\sum_{i=1}^k\alpha_ip(x_j|\mu_i,\Sigma_i)}{\sum_{l=1}^k \alpha_l p(x_j|\mu_l,\Sigma_l)} = -m \\ \alpha_i &= \frac{1}{m}\sum_{j=1}^m r_{ji} \end{aligned} ∂αi∂Lλαiλi=1∑kαiλ=λαi=j=1∑m∑l=1kαip(xj∣μl,Σl)p(xj∣μi,Σi)+λ=0=−j=1∑m∑l=1kαlp(xj∣μl,Σl)p(xj∣μi,Σi)=−j=1∑m∑l=1kαlp(xj∣μl,Σl)αip(xj∣μi,Σi)=−j=1∑mrji=−j=1∑m∑l=1kαlp(xj∣μl,Σl)∑i=1kαip(xj∣μi,Σi)=−m=m1j=1∑mrji
对 μ i \mu_i μi求导
∂ L ∂ μ i = ∑ j = 1 m α i ∑ l = 1 k α i p ( x j ∣ μ l , Σ l ) ∂ p ( x j ∣ μ i , Σ i ) ∂ μ i p ( x j ∣ μ i , Σ i ) = 1 ( 2 π ) n / 2 ∣ Σ i ∣ 1 / 2 e − 1 2 ( x j − μ i ) T Σ i − 1 ( x j − μ i ) p ( x j ∣ μ i , Σ i ) ∂ μ i = p ( x j ∣ μ i , Σ i ) [ 1 2 Σ i − 1 ( x j − μ i ) + 1 2 ( Σ i − 1 ) T ( x j − μ i ) ] = p ( x j ∣ μ i , Σ i ) Σ i − 1 ( x j − μ i ) ∂ L ∂ μ i = ∑ j = 1 m α i p ( x j ∣ μ i , Σ i ) Σ i − 1 ( x j − μ i ) ∑ l = 1 k α i p ( x j ∣ μ l , Σ l ) = ∑ j = 1 m r j i Σ i − 1 ( x j − μ i ) = 0 μ i = ∑ j = 1 m r j i x j ∑ j = 1 m r j i \begin{aligned} \frac{\partial L}{\partial \mu_i} &= \sum_{j=1}^m \frac{\alpha_i }{\sum_{l=1}^k \alpha_i p(x_j|\mu_l,\Sigma_l)}\frac{\partial p(x_j|\mu_i,\Sigma_i)}{\partial \mu_i}\\ p(x_j|\mu_i,\Sigma_i) &= \frac{1}{(2\pi)^{n/2}|\Sigma_i|^{1/2}}e^{-\frac{1}{2}(x_j-\mu_i)^T\Sigma_i^{-1}(x_j-\mu_i)} \\ \frac{p(x_j|\mu_i,\Sigma_i)}{\partial \mu_i} &= p(x_j|\mu_i,\Sigma_i)\big[\frac{1}{2}\Sigma_i^{-1}(x_j-\mu_i) + \frac{1}{2}(\Sigma_i^{-1})^T(x_j-\mu_i)\big] \\ &=p(x_j|\mu_i,\Sigma_i) \Sigma_i^{-1}(x_j-\mu_i) \\ \frac{\partial L}{\partial \mu_i} &= \sum_{j=1}^m \frac{\alpha_i p(x_j|\mu_i,\Sigma_i) \Sigma_i^{-1}(x_j-\mu_i)}{\sum_{l=1}^k \alpha_i p(x_j|\mu_l,\Sigma_l)} =\sum_{j=1}^m r_{ji}\Sigma_i^{-1}(x_j-\mu_i) =0 \\ \mu_i &= \frac{\sum_{j=1}^m r_{ji}x_j}{\sum_{j=1}^m r_{ji}} \end{aligned} ∂μi∂Lp(xj∣μi,Σi)∂μip(xj∣μi,Σi)∂μi∂Lμi=j=1∑m∑l=1kαip(xj∣μl,Σl)αi∂μi∂p(xj∣μi,Σi)=(2π)n/2∣Σi∣1/21e−21(xj−μi)TΣi−1(xj−μi)=p(xj∣μi,Σi)[21Σi−1(xj−μi)+21(Σi−1)T(xj−μi)]=p(xj∣μi,Σi)Σi−1(xj−μi)=j=1∑m∑l=1kαip(xj∣μl,Σl)αip(xj∣μi,Σi)Σi−1(xj−μi)=j=1∑mrjiΣi−1(xj−μi)=0=∑j=1mrji∑j=1mrjixj
对 Σ i \Sigma_i Σi求导
∂ L ∂ Σ i = ∑ j = 1 m α i ∑ l = 1 k α i p ( x j ∣ μ l , Σ l ) ∂ p ( x j ∣ μ i , Σ i ) ∂ Σ i p ( x j ∣ μ i , Σ i ) = 1 ( 2 π ) n / 2 ∣ Σ i ∣ 1 / 2 e − 1 2 ( x j − μ i ) T Σ i − 1 ( x j − μ i ) p ( x j ∣ μ i , Σ i ) ∂ Σ i = 不会,等会了再补,哭 Σ i = ∑ j = 1 m r j i ( x j − μ i ) ( x j − μ i ) T ∑ j = 1 m r j i \begin{aligned} \frac{\partial L}{\partial \Sigma_i} &= \sum_{j=1}^m \frac{\alpha_i }{\sum_{l=1}^k \alpha_i p(x_j|\mu_l,\Sigma_l)}\frac{\partial p(x_j|\mu_i,\Sigma_i)}{\partial \Sigma_i} \\ p(x_j|\mu_i,\Sigma_i) &= \frac{1}{(2\pi)^{n/2}|\Sigma_i|^{1/2}}e^{-\frac{1}{2}(x_j-\mu_i)^T\Sigma_i^{-1}(x_j-\mu_i)} \\ \frac{p(x_j|\mu_i,\Sigma_i)}{\partial \Sigma_i} &= \text{不会,等会了再补,哭} \\ \Sigma_i &=\frac{\sum_{j=1}^m r_{ji}(x_j-\mu_i)(x_j-\mu_i)^T}{\sum_{j=1}^m r_{ji}} \end{aligned} ∂Σi∂Lp(xj∣μi,Σi)∂Σip(xj∣μi,Σi)Σi=j=1∑m∑l=1kαip(xj∣μl,Σl)αi∂Σi∂p(xj∣μi,Σi)=(2π)n/2∣Σi∣1/21e−21(xj−μi)TΣi−1(xj−μi)=不会,等会了再补,哭=∑j=1mrji∑j=1mrji(xj−μi)(xj−μi)T - 算法
在EM算法中,E步:每步迭代时,现根据当前参数计算每个样本属于每个高斯分布的概率 r j i r_{ji} rji;M步,更新参数 ( α i , μ i , Σ i ) (\alpha_i,\mu_i,\Sigma_i) (αi,μi,Σi)。
- 先初始化参数 ( α i , μ i , Σ i ) (\alpha_i,\mu_i,\Sigma_i) (αi,μi,Σi)
- 循环:
- E步:计算所有样本的 r j i r_{ji} rji值
- M步:更新参数 ( α i , μ i , Σ i ) (\alpha_i,\mu_i,\Sigma_i) (αi,μi,Σi)
- 如果满足条件(如到达最大迭代次数),确定样本 x j x_j xj的簇标记 λ j \lambda_j λj,将样本划入相应的簇 C λ j C_{\lambda_j} Cλj;输出簇划分
5. DBSCAN密度聚类
- DBSCAN:(density-bases spatial clustering of applications with noise)
- 密度聚类是假定同一类别样本之间的密度更加紧密。基于样本的可连接性不断扩展簇。
5.1. 介绍
- DBSCAN最重要的两个参数是 ϵ , M i n P t s \epsilon,MinPts ϵ,MinPts。
- ϵ \epsilon ϵ描述了某一样本的邻域距离阈值
- MinPts描述了某个样本的距离为 ϵ \epsilon ϵ的邻域中样本个数的阈值。(想象以一个样本为中心画一个半径为 ϵ \epsilon ϵ的圆,要求圈在圆内的样本数大于等于MinPts)
- 设输入数据 D = x 1 , x 2 , ⋯   , x m D={x_1,x_2,\cdots,x_m} D=x1,x2,⋯,xm
- ϵ \epsilon ϵ邻域:样本集D中,与某个样本x的距离不大于 ϵ \epsilon ϵ的所有样本子集
- 核心对象:对于一个样本x,如果其 ϵ \epsilon ϵ邻域至少包含MinPts个样本,则样本x是核心对象
- 密度直达:如果样本 x j x_j xj位于 x i x_i xi的 ϵ \epsilon ϵ邻域中,且 x i x_i xi是核心对象,则 x j x_j xj由 x i x_i xi密度直达。
- 密度可达:对于 x i x_i xi和 x j x_j xj,存在样本序列 p 1 , p 1 , ⋯   , p T p1,p1,\cdots,p_T p1,p1,⋯,pT,其中 p 1 = x i , p T = x j p_1 = x_i,p_T = x_j p1=xi,pT=xj,且 p t + 1 p_{t+1} pt+1由 p t p_t pt密度直达( p t + 1 p_{t+1} pt+1是以 p t p_t pt为中心的圈内样本点),则称 x j x_j xj由 x i x_i xi密度可达。密度可达满足传递性。此时序列中的 p 1 , p 1 , ⋯   , p T − 1 p1,p1,\cdots,p_{T-1} p1,p1,⋯,pT−1都是核心对象,只有核心对象才能使其他样本密度直达。
- 密度相连:对于 x i x_i xi和 x j x_j xj,如果存在核心对象样本 x k x_k xk,使 x i x_i xi和 x j x_j xj均由 x k x_k xk密度可达( x k x_k xk可以传播到 x i x_i xi,另一方向上传播到 x j x_j xj),则称 x i x_i xi和 x j x_j xj密度相连。密度相连满足对称性。
DBSCAN中“簇”的定义:由密度可达导出的最大的密度相连样本集合。样本集中不属于任何“簇”的样本被认为是噪声或异常样本。
5.2. 算法
输入:样本集
D
=
{
x
1
,
x
2
,
⋯
 
,
x
m
}
D=\{x_1,x_2,\cdots,x_m\}
D={x1,x2,⋯,xm},邻域参数
(
ϵ
,
M
i
n
P
t
s
)
(\epsilon,MinPts)
(ϵ,MinPts),样本距离度量方式
输出:簇划分C
- 1)初始化核心对象集合 Ω = ∅ \Omega=\emptyset Ω=∅,初始化聚类簇数k=0,初始化未访问样本集合 Γ = D \Gamma = D Γ=D,簇划分 C = ∅ C=\emptyset C=∅
- 2)对于
j
=
1
,
2
,
⋯
 
,
m
j=1,2,\cdots,m
j=1,2,⋯,m,按下面步骤找出所有的核心对象:
- 通过距离度量方式,找到样本 x j x_j xj的 ϵ \epsilon ϵ邻域子样本集 N ϵ ( x j ) N_{\epsilon}(x_j) Nϵ(xj)
- 如果子样本及样本个数满足 ∣ N ϵ ( x j ) ∣ ⩾ M i n P t s |N_{\epsilon}(x_j)|\geqslant MinPts ∣Nϵ(xj)∣⩾MinPts,将样本 x j x_j xj加入核心对象样本集合 Ω = Ω ⋃ { x j } \Omega = \Omega \bigcup \{x_j\} Ω=Ω⋃{xj}
- 3 ) 如果核心对象集合 Ω = ∅ \Omega = \emptyset Ω=∅,算法结束,否则转入步骤4
- 4)在核心对象集合 Ω \Omega Ω中,随机选择一个核心对象o,初始化当前簇核心对象队列 Ω c u r = { o } \Omega_{cur} = \{o\} Ωcur={o},初始化类别序号 k = k + 1 k=k+1 k=k+1,初始化当前簇样本集合 C = { o } C=\{o\} C={o},更新未访问样本集合 Γ = Γ − { o } \Gamma = \Gamma - \{o\} Γ=Γ−{o}
- 5 )如果当前簇核心对象队列 Ω c u r = ∅ \Omega_{cur} = \emptyset Ωcur=∅,则当前聚类簇 C k C_k Ck生成完毕,更新簇划分 C = { C 1 , C 2 , ⋯   , C k } C=\{C_1,C_2,\cdots,C_k\} C={C1,C2,⋯,Ck},更新核心对象集 Ω = Ω − C k \Omega = \Omega-C_k Ω=Ω−Ck
- 6 )在当前簇核心对象队列 Ω c u r \Omega_{cur} Ωcur中取出一个核心对象 o ′ o' o′ ,通过邻域距离阈值 ϵ \epsilon ϵ找出所有的 ϵ \epsilon ϵ邻域子样本集 N ϵ ( o ′ ) N_{\epsilon}(o') Nϵ(o′),令 Δ = N ϵ ( o ′ ) ⋂ Γ \Delta = N_{\epsilon}(o') \bigcap \Gamma Δ=Nϵ(o′)⋂Γ,更新当前簇样本集合 C k = C k ⋃ Δ C_k = C_k \bigcup \Delta Ck=Ck⋃Δ,更新未访问样本集合 Γ = Γ − Δ \Gamma = \Gamma - \Delta Γ=Γ−Δ,更新 Ω c u r = Ω c u r ⋃ ( N ϵ ( o ′ ) ⋂ Ω ) \Omega_{cur} = \Omega_{cur} \bigcup (N_{\epsilon}(o') \bigcap \Omega) Ωcur=Ωcur⋃(Nϵ(o′)⋂Ω),转入步骤5
5.3. 优缺点
优点:
- 可以对任意形状的稠密数据集进行聚类,而k-means一般只适用于凸数据集
- 可以在聚类时发现异常点,对数据集中的异常点不敏感
- 聚类结果没有偏倚,相对的,k-means的聚类算法初始值对聚类结果有很大影响
缺点:
- 如果样本集密度不均匀,聚类间距差相差很大时,聚类质量交叉,这时用DBSCAN聚类不合适
- 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最邻近是建立的KD树或球树进行规模限制来改进
- 调参相对于k-means之类复杂,主要需要对 ϵ \epsilon ϵ距离阈值,邻域样本数阈值 M i n P t s MinPts MinPts联合调参,不同的参数组和对最后的聚类效果有较大影响
6. hierarchical clustering层次聚类
- 通过计算不同类别数据点间的相似度来创建一颗有层次的嵌套聚类树。
- 层次聚类的策略:
- AGNES(AGglomerative NESting):每个点看作一个簇,找到距离最近的两个簇,合并这些簇形成聚类,不断减少簇的数目,直到达到预设的聚类簇个数。“自底向上”的聚合策略
- divisive:所有的点在一个簇内,分解这些点到各自簇内形成聚类
- 上面两种方法分别是merge和split,使用贪婪方式计算,非常耗时(分别是
O
(
n
3
)
O(n^3)
O(n3) ,
O
(
n
2
)
)
O(n^2))
O(n2))。有一些高效的方法
- slink
- clink
- 衡量簇之间的相似度的方法
- single linkage:
d m i n ( C i , C j ) = min x ∈ C i , z ∈ C j d i s t ( x , z ) d_{min}(C_i,C_j) = \min_{x \in C_i, z \in C_j} dist(x,z) dmin(Ci,Cj)=minx∈Ci,z∈Cjdist(x,z)
将两个组和数据点中距离最近的两个数据点间的距离作为这两个组和数据点的距离。这种方法容易受到极端的影响。两个相似的组和数据点可能由于其中某个极端的数据点距离较近而组和在一起 - complete linkage:
d m a x ( C i , C j ) = min x ∈ C i , z ∈ C j d i s t ( x , z ) d_{max}(C_i,C_j) = \min_{x \in C_i, z \in C_j} dist(x,z) dmax(Ci,Cj)=minx∈Ci,z∈Cjdist(x,z)
将两个组和数据点中距离最远的两个数据点间的距离作为这两个组和数据点的距离 - average linkage:
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_{avg}(C_i,C_j) = \frac{1}{|C_i||C_j|} \sum_{x \in C_i}\sum_{z \in C_j} dist(x,z) davg(Ci,Cj)=∣Ci∣∣Cj∣1∑x∈Ci∑z∈Cjdist(x,z)
计算两个组和数据点中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个组合数据间的距离
- single linkage:
7. 聚类性能度量/有效性指标(validity index)
性能度量大致有两种:
- 外部指标(external index): 将聚类结果和某个参考模型(reference model)进行比较
- 内部指标(internal index): 直接考察聚类结果不利用任何参考模型
Calinski-Harabaz Index
对于K个聚类,Calinski-Harabaz的分数s被定义为组件离散和组内离散的比率。分数越大聚类效果越好。
s
(
k
)
=
T
r
(
B
k
)
T
r
(
W
k
)
×
N
−
k
k
−
1
W
k
=
∑
q
=
1
k
∑
x
∈
C
q
(
x
−
c
q
)
(
x
−
c
q
)
T
B
k
=
∑
q
n
q
(
c
q
−
c
)
(
c
q
−
c
)
T
\begin{aligned} s(k) &= \frac{Tr(B_k)}{Tr(W_k)} \times \frac{N-k}{k-1} \\ W_k &= \sum_{q=1}^k \sum_{x \in C_q}(x-c_q)(x-c_q)^T \\ B_k &= \sum_{q}n_q(c_q - c)(c_q - c)^T \end{aligned}
s(k)WkBk=Tr(Wk)Tr(Bk)×k−1N−k=q=1∑kx∈Cq∑(x−cq)(x−cq)T=q∑nq(cq−c)(cq−c)T
- 其中 C q C_q Cq是在聚类q中的样本点集合
- c q c_q cq是聚类q的中心点
- n q n_q nq是聚类q中的样本点数量
- c c c是数据集中心点。
- B k B_k Bk代表类别之间的协方差矩阵。类间数据的协方差越大,s越大。
- W k W_k Wk是类内数据的协方差矩阵。类内的数据的协方差越小,s越大