文章目录

  • 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

  1. n_components: 混合高斯模型个数,默认为1
  2. covariance_type: 协方差类型,包括{‘full’,‘tied’, ‘diag’, ‘spherical’}四种,分别对应完全协方差矩阵(元素都不为零),相同的完全协方差矩阵(HMM会用到),对角协方差矩阵(非对角为零,对角不为零),球面协方差矩阵(非对角为零,对角完全相同,球面特性),默认‘full’ 完全协方差矩阵
  3. tol:EM迭代停止阈值,默认为1e-3.
  4. reg_covar: 协方差对角非负正则化,保证协方差矩阵均为正,默认为0
  5. max_iter: 最大迭代次数,默认100
  6. n_init: 初始化次数,用于产生最佳初始参数,默认为1
  7. init_params: {‘kmeans’, ‘random’}, defaults to ‘kmeans’.初始化参数实现方式,默认用kmeans实现,也可以选择随机产生
  8. weights_init: 各组成模型的先验权重,可以自己设,默认按照7产生
  9. means_init: 初始化均值,同8
  10. precisions_init: 初始化精确度(模型个数,特征个数),默认按照7实现
  11. random_state :随机数发生器
  12. warm_start :若为True,则fit()调用会以上一次fit()的结果作为初始化参数,适合相同问题多次fit的情况,能加速收敛,默认为False。
  13. verbose :使能迭代信息显示,默认为0,可以为1或者大于1(显示的信息不同)
  14. verbose_interval :与13挂钩,若使能迭代信息显示,设置多少次迭代后显示信息,默认10次。

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(期望极大化)算法及其推广相关推荐

  1. EM期望最大化算法实现二项混合分布与高斯混合分布

    EM(Expectation-maximization algorithm)译为期望最大化算法,EM算法是数据挖掘的十大算法之一,主要解决有隐含变量时,如何利用最大似然法求解未知参数.现实中会遇到多个 ...

  2. EM(期望最大)算法

    前言 从机器学习到模式识别,已经遇到了很多次EM算法,但是好像并没有真正的理解,本篇文章将从浅到深,从通俗的语言到数学推导来讲解这个算法. (这里默认大家都已经掌握了极大似然的思想) 简介 EM算法( ...

  3. EM 期望最大化算法

    (EM算法)The EM Algorithm EM是我一直想深入学习的算法之一,第一次听说是在NLP课中的HMM那一节,为了解决HMM的参数估计问题,使用了EM算法.在之后的MT中的词对齐中也用到了. ...

  4. 用python求期望_Python——EM(期望极大算法)教学(附详细代码与注解)

    今天,我们详细的讲一下EM算法. 前提准备 Jupyter notebook 或 Pycharm 火狐浏览器或谷歌浏览器 win7或win10电脑一台 网盘提取csv数据 需求分析 实现高斯混合模型的 ...

  5. Python——EM(期望极大算法)实战(附详细代码与注解)(二)

    开始之前 各位朋友,大家好!针对上回讲的EM算法,有朋友反馈还是没弄清楚,今天,我再来详细的讲一下EM算法.请耐心食用本教程,滴滴滴~,上车! 前提准备 Jupyter notebook 或 Pych ...

  6. Python——EM(期望极大算法)实战(附详细代码与注解)(一)

    开始之前 各位朋友大家好!今天我将带大家撸EM算法代码,在撸之前(呵呵,可别乱想≧◔◡◔≦),我们首先讲清楚什么是EM算法?为什么要用EM算法?.在这里我简要的介绍一下,大家都知道极大似然估计吧(至少 ...

  7. 复现经典:《统计学习方法》第 9 章 EM 算法及其推广

    本文是李航老师的<统计学习方法>[1]一书的代码复现. 作者:黄海广[2] 备注:代码都可以在github[3]中下载. 我将陆续将代码发布在公众号"机器学习初学者", ...

  8. 机器学习理论《统计学习方法》学习笔记:第九章 EM算法及其推广

    第九章 EM算法及其推广 概述 EM算法 EM算法的收敛性 EM算法实现 K-Means与高斯混合模型 K-Means 高斯混合模型 概述 EM算法是一种迭代算法,1977年由Dempster等人总结 ...

  9. 统计学习方法(九)EM算法及其推广

    第九章 EM算法及其推广 9.1 EM算法的引入 9.1.1 EM算法 9.1.2 EM算法的导出 9.1.3 EM算法在非监督学习中的应用 9.2 EM算法的收敛性 第九章 EM算法及其推广 EM算 ...

最新文章

  1. 百度:YOLOX和NanoDet都没我优秀!轻量型实时目标检测模型PP-PicoDet开源
  2. C51端口结构和工作原理(转)
  3. PHP使用Zend Opcache之优化加速和缓存清理总结
  4. 令牌桶限流之redis-cell的安装,使用,详解
  5. 老是说我编译版本不够_海思3518E编译环境搭建
  6. vue、bus 使用遇到的坑,组件之间无法传值;vue、bus 第一次获取不到值,后面再点击重复执行
  7. windows media player upnp
  8. NoSQL和Redis简介及Redis在Windows下的安装和使用教程
  9. 一路走来一路歌—我和团队有个约会
  10. 【深度学习】你该会的精选面试题(二)
  11. mysql 拼音首字母排序
  12. 吴恩达教授机器学习课程笔记【九】- k均值聚类算法
  13. Unity采用Forge Networking Remastered数据的远程传输Basic Moving Cube Example
  14. Java Se 、JavaEE、JavaME区别
  15. 静电放电(ESD)知识小记
  16. [BZOJ]1059: [ZJOI2007]矩阵游戏
  17. 商人过河问题c语言图片,商人渡河问题图解法.doc
  18. SDL库的安装,spca5xx的安装,spcaview 的安装,摄像头的查看,及常见问题的解决方法。
  19. 我学习从事项目经理第一个课
  20. 物联网大咖华山论剑,MVP学院打造高端成长营

热门文章

  1. 【Java】jdk 1.8 新特性——Lambda表达式
  2. libSVM分类小例C++
  3. c++ int *p = new int()
  4. java 线程间通信 handler_Handler不同线程间的通信
  5. layer ajax 用法,layer加载遮罩层使用 Ajax Loading Demo
  6. 源码安装mysql数据库_Linux下源码安装mysql数据库
  7. BP神经网络算法学习
  8. 网上支付心案例payment
  9. DllImport的用法
  10. ubuntu6.06容易死机的一种解决方法