MeanShift聚类
又称均值漂移算法,首先需要一个迭代半径r,相似阈值T
对每个数据,作为一个新类,从其位置半径r内,选择满足相似条件的数据,放到一个表中。
计算表内数据的位置均值,数据均值,将新的位置和均值作为该类的特征,重新计算满足相似条件的数据,不断迭代直到收敛。
相当于数据有两个相似条件,一个位置相似条件r,一个数据相似条件T。
K-Means聚类
该方法被称为k均值,首先需要选定k个聚类中心。
对每个数据,计算出最近的聚类中心C,将其放入C类的数据列表中
拿到每个聚类中心列表中的数据,求取数据均值,将该值作为新的数据中心。不断迭代直到中心不再变化
若将数据分为位置数据和特征值,它和meanshift就很像了。
不过区别在于k-means中,类的数量是手动确定的,而mean shift的类数量是迭代自动确定的,并且最坏情况可能是每个数据都是一个类。
GMM聚类
原理
首先,假设数据中有k个高斯分布,数据的实际分布可用其线性组合描述:
p
(
x
)
=
∑
k
=
1
K
π
k
N
(
x
∣
μ
k
,
Σ
k
)
p(\boldsymbol{x}) = \sum_{k=1}^K\pi_k \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)
p(x)=∑k=1K?πk?N(x∣μk?,Σk?)
其中
N
(
x
∣
μ
k
,
Σ
k
)
\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)
N(x∣μk?,Σk?)称为混合模型中的第k个分量。
π
k
\pi_k
πk? 是混合系数(或者叫权重、选中该分量的概率),且满足:
-
∑
k
=
1
K
π
k
=
1
\sum_{k=1}^K\pi_k = 1
∑k=1K?πk?=1
-
0
≤
π
k
≤
1
0\leq \pi_k \leq 1
0≤πk?≤1
如果要从 GMM 的分布中随机地取一个点的话,实际上可以分为两步:
-
首先随机地在这 K 个分量之中选一个,每个分量被选中的概率实际上就是它的系数
π
k
\pi_k
πk? -
选中之后,再单独地考虑从这个分量的高斯分布中选取一个点就可以了。
EM参数估计
对于GMM中的每个分量,有三个参数:选中概率
π
k
\pi_k
πk?,分布均值
μ
k
{\mu}_k
μk?,分布标准差
Σ
k
{\Sigma}_k
Σk?。如果我们从分布选取一个点,怎么知道这个点是来自哪个分量呢?或者说如何确定
π
k
\pi_k
πk??EM算法就可以解决GMM参数估计的问题。
通过EM算法,我们可以迭代计算出GMM中的参数:
(
π
k
,
x
k
,
Σ
k
)
(\pi_k, \boldsymbol{x}_k, \boldsymbol{\Sigma}_k)
(πk?,xk?,Σk?)。
首先我们可以引入一个新的随机变量
z
∈
{
z
1
,
z
2
,
.
.
.
z
k
}
\boldsymbol{z}∈\{z_1,z_2,...z_k\}
z∈{z1?,z2?,...zk?}
p
(
z
k
)
=
π
k
p(z_k)=\pi_k
p(zk?)=πk?,表示第k个分量被选中的概率,由于是每次只能有一个分量被选中,即:
-
∑
k
z
k
=
Ω
\sum_k{z_k}=\Omega
∑k?zk?=Ω
-
p
(
z
)
=
∑
k
p
(
z
k
)
=
∑
k
π
k
=
1
p(z)= \sum_k{p(z_k)}=\sum_k{\pi_k}=1
p(z)=∑k?p(zk?)=∑k?πk?=1
-
p
(
x
∣
z
k
)
=
N
(
x
∣
μ
k
,
Σ
k
)
p(x|z_k)= \mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k, \boldsymbol{\Sigma}_k)
p(x∣zk?)=N(x∣μk?,Σk?)
-
p
(
x
)
=
∑
k
p
(
x
)
p
(
x
∣
z
k
)
p(x)= \sum_kp(x)p(x|z_k)
p(x)=∑k?p(x)p(x∣zk?)
根据贝叶斯定理,
p
(
z
)
p(z)
p(z)是先验概率,
p
(
x
∣
z
)
p(x∣z)
p(x∣z)是似然概率,
p
(
z
∣
x
)
p(z∣x)
p(z∣x)是后验概率。设
x
=
{
x
1
,
x
2
,
.
.
.
x
N
}
\boldsymbol{x}=\{x_1,x_2,...x_N\}
x={x1?,x2?,...xN?},我们有
-
p
(
z
∣
x
)
=
p
(
x
∣
z
)
p
(
z
)
p(z∣x)=p(x∣z)p(z)
p(z∣x)=p(x∣z)p(z)
-
μ
k
=
1
N
k
∑
n
p
(
z
∣
x
n
)
p
(
x
n
)
μ_k=\frac{1}{N_k}\sum_np(z∣x_n)p(x_n)
μk?=Nk?1?∑n?p(z∣xn?)p(xn?)
EM算法
- 定义分量数目
k
k
k,对每个分量设置
π
k
\pi_k
πk?、
μ
k
μ_k
μk?和
Σ
k
\boldsymbol{\Sigma}_ k
Σk? 的初始值,然后计算对数似然函数。
l
n
??
p
(
x
∣
π
,
μ
,
Σ
)
=
∑
n
?
l
n
∑
k
π
k
N
(
x
n
∣
μ
k
,
Σ
k
)
ln\ \ p(x|\pi,μ,\boldsymbol{\Sigma})= \sum_n\ ln\sum_k\pi_kN(x_n∣μ_k,\boldsymbol{\Sigma}_k)
ln??p(x∣π,μ,Σ)=∑n??ln∑k?πk?N(xn?∣μk?,Σk?)
- E 阶段: 根据当前的
π
k
\pi_k
πk?、
μ
k
μ_k
μk?和
Σ
k
\boldsymbol{\Sigma}_ k
Σk? 计算后验概率
γ
(
z
n
k
)
γ(z_{nk})
γ(znk?)
γ
(
z
n
k
)
=
π
k
N
(
x
n
∣
μ
n
,
Σ
n
)
∑
j
=
1
k
π
j
N
(
x
n
∣
μ
j
,
Σ
j
)
γ(z_{nk})=\frac{π_kN(x_n∣μ_n,\boldsymbol{\Sigma}_n)} {∑_{j=1}^kπ_jN(x_n∣μ_j,\boldsymbol{\Sigma}_ j)}
γ(znk?)=∑j=1k?πj?N(xn?∣μj?,Σj?)πk?N(xn?∣μn?,Σn?)?
- M阶段:根据E阶段中计算的
γ
(
z
n
k
)
\gamma(z_{nk})
γ(znk?)再计算新的
π
k
\pi_k
πk?、
μ
k
μ_k
μk?和
Σ
k
\boldsymbol{\Sigma}_ k
Σk?
令
N
k
=
∑
n
γ
(
z
n
k
)
N_k=\sum_n\gamma(z_{nk})
Nk?=∑n?γ(znk?) ,则:
-
π
k
=
N
k
N
\pi_k=\frac{N_k}{N}
πk?=NNk??
-
μ
k
=
1
N
k
∑
n
γ
(
z
n
k
)
x
n
μ_k=\frac{1}{N_k}\sum_n\gamma(z_{nk}) x_n
μk?=Nk?1?∑n?γ(znk?)xn?
-
Σ
k
=
1
N
k
∑
n
γ
(
z
n
k
)
(
x
n
?
μ
k
)
(
x
n
?
μ
k
)
T
\boldsymbol{\Sigma}_ k=\frac{1}{N_k}\sum_n\gamma(z_{nk})(x_n-μ_k)(x_n-μ_k)^T
Σk?=Nk?1?∑n?γ(znk?)(xn??μk?)(xn??μk?)T
?
-
重新计算步骤1中的对数似然函数 -
检查参数是否收敛或对数似然函数是否收敛,若不收敛,则返回第2步。
其他参考
EM算法 详解EM算法与混合高斯模型 高斯混合模型(GMM)及其EM算法的理解 更多聚类算法参考我另一篇博客:无监督算法
|