EM(期望极大化)算法及其推广
文章目錄
- 1. EM算法
- 2. EM算法收斂
- 3. EM算法應用
- 4. EM算法的推廣
- 5. sklearn.mixture.GaussianMixture
- 概率模型有時既有觀測變量(observable variable),又有隱變量或潛在變量(latent variable)
- 如果概率模型的變量都是觀測變量,那么給定數據,可以直接用極大似然估計法,或貝葉斯估計法估計模型參數。
- 當模型含有隱變量時,不能簡單地使用這些估計方法。EM算法就是含有隱變量的概率模型參數的極大似然估計法,或極大后驗概率估計法。
EM 算法與初值的選擇有關,選擇不同的初值可能得到不同的參數估計值
1. EM算法
- EM算法是含有隱變量的概率模型極大似然估計或極大后驗概率估計的迭代算法
- 含有隱變量的概率模型的數據表示為 P(Y,Z∣θ)P(Y,Z| \theta)P(Y,Z∣θ) 。YYY 是觀測變量的數據,ZZZ 是隱變量的數據,θ\thetaθ 是模型參數。
- EM算法通過迭代求解觀測數據的對數似然函數 L(θ)=log?P(Y∣θ){L}(\theta)=\log {P}(\mathrm{Y} | \theta)L(θ)=logP(Y∣θ) 的極大化,實現極大似然估計。
每次迭代包括兩步:
- EEE 步,求期望,即求 log?P(Z∣Y,θ)\log P ( Z | Y, \theta )logP(Z∣Y,θ) 關于 P(Z∣Y,θ(i))P (Z | Y, \theta ^{(i)})P(Z∣Y,θ(i)) 的期望:
Q(θ,θ(i))=∑Zlog?P(Y,Z∣θ)P(Z∣Y,θ(i))Q\left(\theta, \theta^{(i)}\right)=\sum_{Z} \log P(Y, Z | \theta) P\left(Z | Y, \theta^{(i)}\right)Q(θ,θ(i))=Z∑?logP(Y,Z∣θ)P(Z∣Y,θ(i))
稱為 QQQ 函數,這里 θ(i)\theta^{(i)}θ(i) 是參數的現估計值
- MMM步,求極大,即極大化 QQQ 函數得到參數的新估計值:
θ(i+1)=arg?max?θQ(θ,θ(i))\theta^{(i+1)}=\arg \max _{\theta} Q\left(\theta, \theta^{(i)}\right)θ(i+1)=argθmax?Q(θ,θ(i))
在構建具體的EM算法時,重要的是定義QQQ函數。每次迭代中,EM算法通過極大化QQQ函數來增大對數似然函數L(θ){L}(\theta)L(θ)
2. EM算法收斂
EM算法在每次迭代后均提高觀測數據的似然函數值,單調遞增的,即
P(Y∣θ(i+1))?P(Y∣θ(i))P\left(Y | \theta^{(i+1)}\right) \geqslant P\left(Y | \theta^{(i)}\right)P(Y∣θ(i+1))?P(Y∣θ(i))
在一般條件下EM算法是收斂的,但不能保證收斂到全局最優
3. EM算法應用
- EM算法應用極其廣泛,主要應用于含有隱變量的概率模型的學習
- 高斯混合模型的參數估計是EM算法的一個重要應用
- 下一章的隱馬爾可夫模型的非監督學習也是EM算法的一個重要應用
4. EM算法的推廣
- EM算法還可以解釋為 FFF 函數的 極大-極大算法
- EM算法有許多變形,如 GEM 算法
- GEM算法的特點是每次迭代增加 FFF 函數值(并不一定是極大化 FFF 函數),從而增加似然函數值
5. sklearn.mixture.GaussianMixture
sklearn.mixture.GaussianMixture
class sklearn.mixture.GaussianMixture(n_components=1, covariance_type='full', tol=0.001, reg_covar=1e-06, max_iter=100, n_init=1, init_params='kmeans', weights_init=None, means_init=None, precisions_init=None, random_state=None, warm_start=False, verbose=0, verbose_interval=10)參數說明:參考了 https://blog.csdn.net/lihou1987/article/details/70833229
sklearn官方實例
#%% # ---------sklearn GaussianMixture----- import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LogNorm from sklearn import mixture from mpl_toolkits.mplot3d import Axes3D #3維繪圖 n_samples = 300 np.random.seed(0)#%% 以(-10,15) 和(0,20)為中心的高斯分布 shifted_gaussian = np.random.randn(n_samples, 2) + np.array([20, 20]) shifted_gaussian2 = np.random.randn(n_samples, 2) + np.array([-10, 15])#%% 拉伸的(0,0)為中心的高斯分布 C = np.array([[0, -0.7], [3.5, 0.7]]) stretched_gaussian = np.dot(np.random.randn(n_samples, 2), C)#%% 數據堆疊 X_train = np.vstack([shifted_gaussian, stretched_gaussian,shifted_gaussian2])#%% 高斯分布 3個高斯分布 clf = mixture.GaussianMixture(n_components=3, covariance_type='full')#%% 擬合 clf.fit(X_train)#%% x = np.linspace(-20, 30) y = np.linspace(-20, 40)#%% X, Y = np.meshgrid(x, y) XX = np.array([X.ravel(), Y.ravel()]).T Z = -clf.score_samples(XX)#%% Z = Z.reshape(X.shape) CS = plt.contour(X, Y, Z, norm=LogNorm(vmin=1.0, vmax=1000), levels=np.logspace(1, 4, 18)) CB = plt.colorbar(CS, shrink=0.8, extend='both') plt.scatter(X_train[:, 0], X_train[:, 1], 0.8) plt.show()# 3D繪圖 fig = plt.figure() ax = Axes3D(fig) # ax.scatter(X,Y,Z) ax.plot_surface(X, Y, Z, cmap=plt.cm.autumn) plt.show()
總結
以上是生活随笔為你收集整理的EM(期望极大化)算法及其推广的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员面试金典 - 面试题 17.05.
- 下一篇: LeetCode 365. 水壶问题(最