文章目录
前言
聚类是一种无监督学习方法,把相似的对象通过静态分类的方法分成不同的组别或子集合,使得同一类别或子集中的对象具有相似的属性,在数据挖掘、模式识别、图像分析、数据分 析中具有广泛的应用。
一、K均值算法(K-means)
目标:将所有数据样本聚类成
K
K
K个类别。即找到
k
k
k个聚类中心
μ
1
,
μ
2
,
.
.
.
,
μ
K
\mu_1,\mu_2,...,\mu_K
μ1,μ2,...,μK,则每个样本点的聚类类别为与之最近的聚类中心所对应类别。
1.模型定义
数据集中有
N
N
N个样本:
{
x
1
,
x
2
,
.
.
.
,
x
N
}
\{x_1, x_2, ...,x_N\}
{x1,x2,...,xN},对于每个样本
x
n
x_n
xn,定义其聚类类别
r
n
,
r
n
∈
R
K
r_n, r_n\in \mathbb{R}^K
rn,rn∈RK.
r
n
r_n
rn相当于类别的one-hot表示,是一个
K
K
K维的向量,即如果
x
n
x_n
xn属于第
k
k
k个聚类类别,则其第
k
k
k个维度
r
n
k
=
1
r_{nk}=1
rnk=1,其余维度为
0
0
0。例如
r
n
=
[
0
,
0
,
1
,
0
]
T
r_n=[0,0,1,0]^{\mathrm{T}}
rn=[0,0,1,0]T表示聚类类别一共4类,且样本
x
n
x_n
xn属于第3类。
模型的目标函数定义如下:
J
=
∑
n
=
1
N
∑
k
=
1
K
r
n
k
∥
x
n
−
μ
k
∥
2
J=\sum^N_{n=1}\sum^K_{k=1}r_{nk}\parallel \textbf{x}_n - \mu_k \parallel^2
J=n=1∑Nk=1∑Krnk∥xn−μk∥2
2.模型算法
目标函数中包含有类别中心
μ
\mu
μ和样本所属类别
r
n
r_n
rn这两类可更新的参数,可以利用EM算法对其进行更新:
首先随机初始化
K
K
K个聚类中心
μ
1
\mu_1
μ1到
μ
K
\mu_K
μK,然后使用EM算法循环更新参数:
-
Expectation Step:在当前给定的聚类中心的条件下,计算并更新每个样本的期望类别:
r n k = { 1 , k = arg min j ∥ x n − μ j ∥ 0 , e l s e r_{nk}=\left\{ \begin{aligned} 1 & , & k=\argmin_j \parallel \textbf{x}_n-\mu_j \parallel \\ 0 & , & else \end{aligned} \right. rnk=⎩⎨⎧10,,k=jargmin∥xn−μj∥else -
Maximization Step:在当前给定的样本聚类类别条件下,按照最优化准则生成 μ 1 \mu_1 μ1到 μ k \mu_k μk:
将目标函数对参数 μ k \mu_k μk求偏导并置零:
∂ J ∂ μ k = 2 ∑ n = 1 N r n k ( x n − μ k ) = 0 \frac{\partial J}{\partial \mu_k} = 2\sum^N_{n=1}r_{nk}(\textbf{x}_n-\mu_k)=0 ∂μk∂J=2n=1∑Nrnk(xn−μk)=0 得到:
μ k = ∑ n r n k x n ∑ n r n k \mu_k=\frac{\sum_nr_{nk}\textbf{x}_n}{\sum_nr_{nk}} μk=∑nrnk∑nrnkxn用该公式更新 μ 1 \mu_1 μ1到 μ k \mu_k μk
可通过观察目标函数
J
J
J的值判断是否收敛
二、高斯混合模型(GMM - Gaussian Mixture Model)
高斯混合模型的基本原理是将
K
K
K不同的高斯分布赋予不同的权重,相加在一起组成一个复杂的分布。理论上如果
K
K
K值以及权重的的选取得当,高斯混合模型可以拟合任何分布。
1.与K-means的异同
GMM与K-means的思想大致相同,即都需要寻找
K
K
K聚类中心,将所有样本进行分类。但K-means中每个聚类中心仅仅对应一个固定的点(只有均值
μ
\mu
μ这一个参数),每个样本只属于一个聚类类别,即距离它最近的聚类中心所对应的类别;而GMM中每个聚类中心对应的是一个高斯分布(拥有均值
μ
\mu
μ和方差
σ
2
\sigma^2
σ2这两个参数),因为高斯分布的定义域是全体实数,因此每个样本将同时属于
K
K
K个聚类类别,但对应的概率不同,分类时选择概率最高的分布对应的聚类类别即可。
2.模型定义
对于
N
N
N个样本:
{
x
1
,
x
2
,
.
.
.
,
x
N
}
\{x_1,x_2,...,x_N\}
{x1,x2,...,xN},定义样本服从的分布为
p
(
x
)
=
∑
k
=
1
K
p
(
z
k
)
p
(
x
∣
z
k
)
p(x) = \sum_{k=1}^Kp(z_k)p(x|z_k)
p(x)=k=1∑Kp(zk)p(x∣zk) 上式相当于一个全概率公式,其中
- z k z_k zk:表示第 k k k个聚类类别
- p ( z k ) p(z_k) p(zk):表示第 k k k个聚类类别的概率,在高斯分布中记为 π k \pi_k πk,并且满足所有类别的概率之和等于1,即 ∑ k = 1 K p ( z k ) = ∑ k = 1 K π k = 1 \sum^K_{k=1}p(z_k)=\sum^K_{k=1}\pi_k=1 ∑k=1Kp(zk)=∑k=1Kπk=1
- p ( x ∣ z k ) p(x|z_k) p(x∣zk):第 k k k个类别的高斯分布,定义为 N ( x ∣ μ k , Σ k ) \mathcal{N}(x|\mu_k,\Sigma_k) N(x∣μk,Σk)
因此可以将上述样本分布改写为:
p
(
x
∣
π
,
μ
,
Σ
)
=
∑
k
=
1
K
π
k
N
(
x
∣
μ
k
,
Σ
k
)
,
s
.
t
.
∑
k
=
1
K
π
k
=
1
p(x|\pi,\mu,\Sigma)=\sum^K_{k=1}\pi_k\mathcal{N}(x|\mu_k,\Sigma_k) ,\quad s.t.\sum^K_{k=1}\pi_k=1
p(x∣π,μ,Σ)=k=1∑KπkN(x∣μk,Σk),s.t.k=1∑Kπk=1从这个式子中可以更好的看出,高斯混合模型实际上就是用
K
K
K个不同的加权和形成的分布来拟合真实的样本分布。那么模型中一共有三类参数需要学习:每个类别的权重
π
k
\pi_k
πk,每个类别的均值
μ
k
\mu_k
μk,每个类别的方差
Σ
k
\Sigma_k
Σk
3.模型算法
(1) 几个定义
定义聚类类别
z
k
z_k
zk的后验分布
γ
(
z
k
)
\gamma(z_k)
γ(zk):
γ
(
z
k
)
=
p
(
z
k
∣
x
)
=
p
(
z
k
)
p
(
x
∣
z
k
)
∑
i
=
1
K
p
(
z
i
)
p
(
x
∣
z
i
)
=
π
k
N
(
x
∣
μ
k
,
Σ
k
)
∑
i
=
1
K
π
i
N
(
x
∣
μ
i
,
Σ
i
)
\begin{aligned} \gamma(z_k) & = p(z_k|x) \\ & = \frac{p(z_k)p(x|z_k)}{\sum^K_{i=1}p(z_i)p(x|z_i)} \\ & = \frac{\pi_k \mathcal{N}(x|\mu_k,\Sigma_k)}{\sum^K_{i=1}\pi_i \mathcal{N}(x|\mu_i,\Sigma_i)} \end{aligned}
γ(zk)=p(zk∣x)=∑i=1Kp(zi)p(x∣zi)p(zk)p(x∣zk)=∑i=1KπiN(x∣μi,Σi)πkN(x∣μk,Σk)这样就可以通过后验分布计算样本
x
i
x_i
xi属于聚类类别
k
k
k的概率
γ
(
z
i
k
)
\gamma(z_{ik})
γ(zik),可以将其看做是样本
x
i
x_i
xi的类别标签:
γ
(
z
i
k
)
=
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
∑
i
=
1
K
π
i
N
(
x
i
∣
μ
i
,
Σ
i
)
\gamma(z_{ik}) = \frac{\pi_k \mathcal{N}(x_i|\mu_k,\Sigma_k)}{\sum^K_{i=1}\pi_i \mathcal{N}(x_i|\mu_i,\Sigma_i)}
γ(zik)=∑i=1KπiN(xi∣μi,Σi)πkN(xi∣μk,Σk)
定义
N
k
N_k
Nk为属于第
k
k
k个聚类类别的样本数量(或期望):
N
k
=
∑
i
=
1
N
γ
(
z
i
k
)
N_k=\sum^N_{i=1}\gamma(z_{ik})
Nk=i=1∑Nγ(zik) 总样本数量
N
N
N可以改写为:
N
=
∑
k
=
1
K
∑
i
=
1
N
γ
(
z
i
k
)
N=\sum^K_{k=1}\sum^N_{i=1}\gamma(z_{ik})
N=k=1∑Ki=1∑Nγ(zik)
(2) 求解推导
对于类别权重
π
k
\pi_k
πk,类别均值
μ
k
\mu_k
μk,以及类别方差
Σ
k
,
\Sigma_k,
Σk,这三类参数,依旧采用EM算法进行更新学习:
首先写出对数似然函数:
ln
L
(
x
∣
π
,
μ
,
Σ
)
=
ln
∏
i
=
1
N
p
(
x
i
∣
π
,
μ
,
Σ
)
=
ln
∏
i
=
1
N
∑
k
=
1
K
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
=
∑
i
=
1
N
ln
∑
k
=
1
K
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
=
∑
i
=
1
N
ln
∑
k
=
1
K
π
k
(
2
π
)
−
D
2
Σ
k
−
1
2
exp
{
−
1
2
(
x
i
−
μ
k
)
T
Σ
k
−
1
(
x
i
−
μ
k
)
}
\begin{aligned} \ln L(x| \pi,\mu,\Sigma) & = \ln \prod^N_{i=1}p(x_i|\pi,\mu,\Sigma) \\ & = \ln \prod^N_{i=1}\sum^K_{k=1}\pi_k\mathcal{N}(x_i|\mu_k,\Sigma_k) \\ & = \sum^N_{i=1} \ln \sum^K_{k=1}\pi_k\mathcal{N}(x_i|\mu_k,\Sigma_k) \\ & = \sum^N_{i=1} \ln \sum^K_{k=1}\pi_k(2\pi)^{-\frac{D}{2}}\Sigma_k^{-\frac{1}{2}} \exp \left\{-\frac{1}{2}(x_i-\mu_k)^{\mathrm{T}}\Sigma^{-1}_k(x_i-\mu_k)\right\} \end{aligned}
lnL(x∣π,μ,Σ)=lni=1∏Np(xi∣π,μ,Σ)=lni=1∏Nk=1∑KπkN(xi∣μk,Σk)=i=1∑Nlnk=1∑KπkN(xi∣μk,Σk)=i=1∑Nlnk=1∑Kπk(2π)−2DΣk−21exp{−21(xi−μk)TΣk−1(xi−μk)}
对
μ
k
\mu_k
μk求偏导:
∂
∂
μ
k
ln
L
(
x
∣
π
,
μ
,
Σ
)
=
−
∑
i
=
1
N
∂
∂
μ
k
ln
∑
k
=
1
K
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
=
−
∑
i
=
1
N
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
∑
k
=
1
K
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
⋅
Σ
−
1
(
x
i
−
μ
k
)
=
−
∑
i
=
1
N
γ
(
z
i
k
)
⋅
Σ
−
1
(
x
i
−
μ
k
)
\begin{aligned} \frac{\partial}{\partial \mu_k}\ln L(x| \pi,\mu,\Sigma) & = -\sum^N_{i=1}\frac{\partial}{\partial \mu_k} \ln \sum^K_{k=1}\pi_k\mathcal{N}(x_i|\mu_k,\Sigma_k) \\ & = -\sum^N_{i=1} \frac{\pi_k\mathcal{N}(x_i|\mu_k,\Sigma_k)}{\sum^K_{k=1}\pi_k\mathcal{N}(x_i|\mu_k,\Sigma_k)} \cdot \Sigma^{-1}(x_i-\mu_k) \\ & = -\sum^N_{i=1}\gamma(z_{ik})\cdot \Sigma^{-1}(x_i-\mu_k) \end{aligned}
∂μk∂lnL(x∣π,μ,Σ)=−i=1∑N∂μk∂lnk=1∑KπkN(xi∣μk,Σk)=−i=1∑N∑k=1KπkN(xi∣μk,Σk)πkN(xi∣μk,Σk)⋅Σ−1(xi−μk)=−i=1∑Nγ(zik)⋅Σ−1(xi−μk)导数置零得:
μ
k
=
∑
i
=
1
N
γ
(
z
i
k
)
x
i
∑
i
=
1
N
γ
(
z
i
k
)
=
1
N
k
∑
i
=
1
N
γ
(
z
i
k
)
x
i
\mu_k=\frac{\sum^N_{i=1}\gamma(z_{ik})x_i}{\sum^N_{i=1}\gamma(z_{ik})} = \frac{1}{N_k}\sum^N_{i=1}\gamma(z_{ik})x_i
μk=∑i=1Nγ(zik)∑i=1Nγ(zik)xi=Nk1i=1∑Nγ(zik)xi
对
Σ
k
\Sigma_k
Σk求偏导:
∂
∂
Σ
k
ln
L
(
x
∣
π
,
μ
,
Σ
)
=
−
∑
i
=
1
N
∂
∂
Σ
k
ln
∑
k
=
1
K
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
=
∑
i
=
1
N
−
1
2
Σ
k
−
1
⋅
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
+
1
2
Σ
k
−
1
(
x
i
−
μ
k
)
(
x
i
−
μ
k
)
T
Σ
k
−
1
⋅
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
∑
k
=
1
K
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
=
−
1
2
∑
i
=
1
N
{
γ
(
z
i
k
)
[
Σ
k
−
1
−
Σ
k
−
1
(
x
i
−
μ
k
)
(
x
i
−
μ
k
)
T
Σ
k
−
1
]
}
\begin{aligned} \frac{\partial}{\partial \Sigma_k}\ln L(x| \pi,\mu,\Sigma) & = -\sum^N_{i=1}\frac{\partial}{\partial \Sigma_k} \ln \sum^K_{k=1}\pi_k\mathcal{N}(x_i|\mu_k,\Sigma_k) \\ & = \sum^N_{i=1} \frac{-\frac{1}{2}\Sigma^{-1}_k \cdot \pi_k\mathcal{N}(x_i|\mu_k,\Sigma_k) + \frac{1}{2}\Sigma^{-1}_k(x_i-\mu_k)(x_i-\mu_k)^{\mathrm{T}}\Sigma^{-1}_k\cdot\pi_k\mathcal{N}(x_i|\mu_k,\Sigma_k)}{\sum^K_{k=1}\pi_k\mathcal{N}(x_i|\mu_k,\Sigma_k)} \\ & = -\frac{1}{2}\sum^N_{i=1}\{\gamma(z_{ik})[\Sigma^{-1}_k - \Sigma^{-1}_k(x_i-\mu_k)(x_i-\mu_k)^{\mathrm{T}}\Sigma^{-1}_k]\} \end{aligned}
∂Σk∂lnL(x∣π,μ,Σ)=−i=1∑N∂Σk∂lnk=1∑KπkN(xi∣μk,Σk)=i=1∑N∑k=1KπkN(xi∣μk,Σk)−21Σk−1⋅πkN(xi∣μk,Σk)+21Σk−1(xi−μk)(xi−μk)TΣk−1⋅πkN(xi∣μk,Σk)=−21i=1∑N{γ(zik)[Σk−1−Σk−1(xi−μk)(xi−μk)TΣk−1]} 导数置零得:
Σ
k
=
1
∑
i
=
1
N
γ
(
z
i
k
)
∑
i
=
1
N
γ
(
z
i
k
)
(
x
i
−
μ
k
)
(
x
i
−
μ
k
)
T
=
1
N
k
∑
i
=
1
N
γ
(
z
i
k
)
(
x
i
−
μ
k
)
(
x
i
−
μ
k
)
T
\begin{aligned} \Sigma_k & = \frac{1}{\sum^N_{i=1}\gamma(z_{ik})}\sum^N_{i=1}\gamma(z_{ik})(x_i-\mu_k)(x_i-\mu_k)^{\mathrm{T}} \\ & = \frac{1}{N_k}\sum^N_{i=1}\gamma(z_{ik})(x_i-\mu_k)(x_i-\mu_k)^{\mathrm{T}} \end{aligned}
Σk=∑i=1Nγ(zik)1i=1∑Nγ(zik)(xi−μk)(xi−μk)T=Nk1i=1∑Nγ(zik)(xi−μk)(xi−μk)T
对
π
k
\pi_k
πk求偏导:
由于模型对
π
\pi
π具有限制条件:
∑
k
=
1
K
π
k
=
1
\sum^K_{k=1}\pi_k=1
∑k=1Kπk=1,因此需要引入拉格朗日乘子
λ
(
∑
k
=
1
K
π
k
−
1
)
\lambda(\sum^K_{k=1}\pi_k-1)
λ(∑k=1Kπk−1),再进行求导:
∂
∂
Σ
k
[
ln
L
(
x
∣
π
,
μ
,
Σ
)
−
λ
(
∑
k
=
1
K
π
k
−
1
)
]
=
∑
i
=
1
N
N
(
x
i
∣
μ
k
,
Σ
k
)
∑
k
=
1
K
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
−
λ
=
1
π
k
(
∑
i
=
1
N
N
(
x
i
∣
μ
k
,
Σ
k
)
⋅
π
k
∑
k
=
1
K
π
k
N
(
x
i
∣
μ
k
,
Σ
k
)
−
λ
⋅
π
k
)
=
1
π
k
(
∑
i
=
1
N
γ
(
z
i
k
)
−
λ
⋅
π
k
)
\begin{aligned} \frac{\partial}{\partial \Sigma_k}[\ln L(x| \pi,\mu,\Sigma) - \lambda(\sum^K_{k=1}\pi_k-1)] & = \sum^N_{i=1}\frac{\mathcal{N}(x_i|\mu_k,\Sigma_k)}{\sum^K_{k=1}\pi_k\mathcal{N}(x_i|\mu_k,\Sigma_k)} - \lambda \\ & = \frac{1}{\pi_k}\left( \sum^N_{i=1} \frac{\mathcal{N}(x_i|\mu_k,\Sigma_k) \cdot \pi_k}{\sum^K_{k=1}\pi_k\mathcal{N}(x_i|\mu_k,\Sigma_k)} - \lambda \cdot \pi_k \right) \\ & = \frac{1}{\pi_k} \left( \sum^N_{i=1} \gamma(z_{ik}) - \lambda \cdot \pi_k \right) \\ \end{aligned}
∂Σk∂[lnL(x∣π,μ,Σ)−λ(k=1∑Kπk−1)]=i=1∑N∑k=1KπkN(xi∣μk,Σk)N(xi∣μk,Σk)−λ=πk1(i=1∑N∑k=1KπkN(xi∣μk,Σk)N(xi∣μk,Σk)⋅πk−λ⋅πk)=πk1(i=1∑Nγ(zik)−λ⋅πk) 导数置零,求得
λ
\lambda
λ:
∑
i
=
1
N
γ
(
z
i
k
)
−
λ
⋅
π
k
=
0
∑
k
=
1
K
λ
⋅
π
k
=
∑
k
=
1
K
∑
i
=
1
N
γ
(
z
i
k
)
λ
=
∑
k
=
1
K
∑
i
=
1
N
γ
(
z
i
k
)
\sum^N_{i=1} \gamma(z_{ik}) - \lambda \cdot \pi_k = 0 \\ \sum^K_{k=1}\lambda \cdot \pi_k = \sum^K_{k=1}\sum^N_{i=1} \gamma(z_{ik}) \\ \lambda = \sum^K_{k=1}\sum^N_{i=1} \gamma(z_{ik})
i=1∑Nγ(zik)−λ⋅πk=0k=1∑Kλ⋅πk=k=1∑Ki=1∑Nγ(zik)λ=k=1∑Ki=1∑Nγ(zik)所以最终得到:
π
k
=
∑
k
=
1
K
λ
⋅
π
k
∑
k
=
1
K
∑
i
=
1
N
γ
(
z
i
k
)
=
N
k
N
\pi_k=\frac{\sum^K_{k=1}\lambda \cdot \pi_k}{ \sum^K_{k=1}\sum^N_{i=1} \gamma(z_{ik})} = \frac{N_k}{N}
πk=∑k=1K∑i=1Nγ(zik)∑k=1Kλ⋅πk=NNk
(3) EM算法更新
首先随机初始化所有参数: π k , μ k , Σ k \pi_k,\mu_k,\Sigma_k πk,μk,Σk,其中 k = 1 , 2 , . . . , K k=1,2,...,K k=1,2,...,K,之后利用EM算法进行迭代更新。
-
Expectation Step:根据当前给定的参数 π k , μ k , Σ k \pi_k,\mu_k,\Sigma_k πk,μk,Σk计算所有样本的后验概率 γ ( z i k ) \gamma(z_{ik}) γ(zik)
γ ( z i k ) = π k N ( x i ∣ μ k , Σ k ) ∑ i = 1 K π i N ( x i ∣ μ i , Σ i ) \gamma(z_{ik}) = \frac{\pi_k \mathcal{N}(x_i|\mu_k,\Sigma_k)}{\sum^K_{i=1}\pi_i \mathcal{N}(x_i|\mu_i,\Sigma_i)} γ(zik)=∑i=1KπiN(xi∣μi,Σi)πkN(xi∣μk,Σk) -
Maximization Step:在当前给定的样本聚类类别条件下,按照最优化准则生成 μ 1 \mu_1 μ1到 μ k \mu_k μk:
{ μ k = 1 N k ∑ i = 1 N γ ( z i k ) x i Σ k = 1 N k ∑ i = 1 N γ ( z i k ) ( x i − μ k ) ( x i − μ k ) T π k = N k N \left\{ \begin{aligned} \mu_k & = \frac{1}{N_k}\sum^N_{i=1}\gamma(z_{ik})x_i \\ \Sigma_k & = \frac{1}{N_k}\sum^N_{i=1}\gamma(z_{ik})(x_i-\mu_k)(x_i-\mu_k)^{\mathrm{T}} \\ \pi_k & = \frac{N_k}{N} \end{aligned} \right. ⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧μkΣkπk=Nk1i=1∑Nγ(zik)xi=Nk1i=1∑Nγ(zik)(xi−μk)(xi−μk)T=NNk