单高斯分布 MLE posterior 正比例于 likelihood * prior
p
(
θ
∣
x
)
∝
p
(
x
∣
θ
)
?
p
(
θ
)
p(\theta | x) \propto p(x|\theta) * p(\theta)
p(θ∣x)∝p(x∣θ)?p(θ)
参
数
θ
的
后
验
分
布
∝
参
数
θ
表
示
的
x
分
布
上
已
知
样
本
有
多
大
概
率
?
参
数
θ
的
先
验
分
布
参数\theta的后验分布 \propto 参数\theta表示的x分布上已知样本有多大概率 * 参数\theta的先验分布
参数θ的后验分布∝参数θ表示的x分布上已知样本有多大概率?参数θ的先验分布
参
数
的
后
验
∝
样
本
的
l
i
k
e
l
i
h
o
o
d
?
参
数
的
先
验
参数的后验 \propto 样本的likelihood * 参数的先验
参数的后验∝样本的likelihood?参数的先验 MLE : max log_likelihood estimator MAP: max a posterior
混合高斯分布(多个高斯分布混合在一起) MLE
单高斯混合分布, 只需要令:
?
L
?
u
=
0
\frac{\partial{L}}{\partial{u}}=0
?u?L?=0,
?
L
?
Σ
=
0
\frac{\partial{L}}{\partial{\Sigma}}=0
?Σ?L?=0 ; 即可一步到位的精确的求出
u
和
Σ
u和\Sigma
u和Σ的值
混合高斯分布,由于L中有log(多个式子求和), 而log(多个式子求和)求出导数是可以的, 但 要解
?
L
?
u
=
0
\frac{\partial{L}}{\partial{u}}=0
?u?L?=0、
?
L
?
Σ
=
0
\frac{\partial{L}}{\partial{\Sigma}}=0
?Σ?L?=0 比较难, 所以 没法一步到位精确求解,只能迭代求解 。 此迭代求解方法 即 EM算法
即: 解方程
?
l
o
g
(
多
个
式
子
的
乘
积
)
?
其
中
一
个
变
量
\frac{\partial{log(多个式子的乘积)}}{\partial{其中一个变量}}
?其中一个变量?log(多个式子的乘积)? = 0 较难 解方程
?
l
o
g
(
多
个
式
子
的
和
)
?
其
中
一
个
变
量
\frac{\partial{log(多个式子的和)}}{\partial{其中一个变量}}
?其中一个变量?log(多个式子的和)? = 0 较容易 注意:两者的导数都可以求得出来
EM算法(混合高斯分布)
中心点或均值u、形状或协方差矩阵
Σ
\Sigma
Σ
em算法迭代过程演示
e
m
算
法
参
数
Θ
初
始
化
为
Θ
(
1
)
em算法参数\Theta初始化为\Theta^{(1)}
em算法参数Θ初始化为Θ(1)
e
m
算
法
第
1
次
迭
代
结
果
Θ
(
2
)
em算法第1次迭代结果\Theta^{(2)}
em算法第1次迭代结果Θ(2)
e
m
算
法
第
2
次
迭
代
结
果
Θ
(
3
)
em算法第2次迭代结果\Theta^{(3)}
em算法第2次迭代结果Θ(3)
e
m
算
法
第
f
次
迭
代
结
果
(
e
m
算
法
收
敛
时
的
结
果
)
Θ
(
f
)
em算法第f次迭代结果(em算法收敛时的结果) \Theta^{(f)}
em算法第f次迭代结果(em算法收敛时的结果)Θ(f)
em迭代描述 em算法迭代过程描述:
Θ
(
g
+
1
)
=
Θ
(
g
)
\Theta^{(g+1)}=\Theta^{(g)}
Θ(g+1)=Θ(g)
Θ
(
g
+
1
)
=
a
r
g
m
a
x
Θ
∫
z
l
o
g
p
(
X
,
z
∣
Θ
)
p
(
z
∣
X
,
Θ
(
g
)
)
d
z
\Theta^{(g+1)}={argmax}_{\Theta}\int_{z} {log p(X,z|\Theta) p(z|X,\Theta^{(g)})} dz
Θ(g+1)=argmaxΘ?∫z?logp(X,z∣Θ)p(z∣X,Θ(g))dz (这里看完后 弄清楚了 回头要明确一下)
em算法引入的隐变量z应该保持边缘分布不变:
这里的
z
i
z_i
zi? 就是前面"EM算法(混合高斯分布)" 中的
α
l
\alpha_l
αl? 上图
p
(
x
i
)
p(x_i)
p(xi?) 就是
p
(
x
i
∣
Θ
)
p(x_i|\Theta)
p(xi?∣Θ)
em算法中 log_likelihood
l
o
g
p
(
X
∣
Θ
)
log p(X|\Theta)
logp(X∣Θ) 逐步增加 推导 1 如果 对于任意
Θ
\Theta
Θ 有
H
(
Θ
(
g
)
,
Θ
(
g
)
)
≥
H
(
Θ
,
Θ
(
g
)
)
H(\Theta^{(g)}, \Theta^{(g)} ) \ge H(\Theta, \Theta^{(g)} )
H(Θ(g),Θ(g))≥H(Θ,Θ(g)), 则
H
(
Θ
(
g
)
,
Θ
(
g
)
)
≥
H
(
Θ
(
g
+
1
)
,
Θ
(
g
)
)
H(\Theta^{(g)}, \Theta^{(g)} ) \ge H(\Theta^{(g+1)}, \Theta^{(g)} )
H(Θ(g),Θ(g))≥H(Θ(g+1),Θ(g))
em算法中 log_likelihood
l
o
g
p
(
X
∣
Θ
)
log p(X|\Theta)
logp(X∣Θ) 逐步增加 推导 2 Jensen’s inequality (琴生不等式)
…
sklearn 手写数字数据集 gmm 例子 (图片的一个像素点被当成一个随机变量)
"""sklearn 手写数字数据集 gmm 例子 (图片的一个像素点被当成一个随机变量)
来自 https://jakevdp.github.io/PythonDataScienceHandbook/05.12-gaussian-mixtures.html
或 https://github.com/jakevdp/PythonDataScienceHandbook/blob/master/notebooks/05.12-Gaussian-Mixtures.ipynb
"""
import numpy as np
from sklearn.datasets import load_digits
from matplotlib import pyplot as plt
def plot_digits(data):
fig, ax = plt.subplots(10, 10, figsize=(8, 8),
subplot_kw=dict(xticks=[], yticks=[]))
fig.subplots_adjust(hspace=0.05, wspace=0.05)
for i, axi in enumerate(ax.flat):
im = axi.imshow(data[i].reshape(8, 8), cmap='binary')
im.set_clim(0, 16)
plt.show()
digits = load_digits()
print(digits.data.shape)
from sklearn.decomposition import PCA
pca = PCA(n_components=0.99, whiten=True)
data = pca.fit_transform(digits.data)
print(data.shape)
from sklearn.mixture import GaussianMixture
"""
n_components = np.arange(50, 210, 10)
models = [GaussianMixture(n_components=n, covariance_type='full', random_state=0) for n in n_components]
aics = [model.fit(data).aic(data) for model in models]
plt.plot(n_components, aics); plt.show()
"""
gmm = GaussianMixture(n_components=150, covariance_type='full', random_state=0)
gmm.fit(data)
print(gmm.converged_)
data_new,label_new = gmm.sample(n_samples=100)
print(data_new.shape)
digits_new = pca.inverse_transform(data_new)
plot_digits(digits_new)
|