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(ZY,θ) 关于 P(Z∣Y,θ(i))P (Z | Y, \theta ^{(i)})P(ZY,θ(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))=ZlogP(Y,Zθ)P(ZY,θ(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θmaxQ(θ,θ(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()

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GridView 中添加删除确认提示框

在GridView中我们可以直接添加一个CommandField删除列来删除某行信息。但为了避免误操作引起的误删除&#xff0c;在删除操作者让操作者再确认下&#xff0c;完后再进行删除。 首先我们给我们的GridView 添加一个模板列&#xff0c;如下&#xff1a; <asp:TemplateField He…

终于有人喊出来:论文一稿多投是作者的合法权利!

文 | 马建平&#xff0c;三峡大学学报编辑源 | 现代出版一稿多投目前已演变为许多作者一种常态化的投稿方式。针对一稿多投现象&#xff0c;舆论似乎是一边倒的反对和谴责之声&#xff0c;认为它浪费了极为稀缺的出版资源&#xff0c;扰乱了报刊社正常的出版秩序&#xff0c;是…

python中pop用法_Python dict pop()用法及代码示例

Python语言为几乎所有容器(无论是列表容器还是集合容器)指定了pop()。这篇特别的文章着重说明Python词典提供的pop()方法。这种方法对于经常处理字典的程序员很有用。 用法&#xff1a;dict.pop(key, def) 参数&#xff1a; key:必须返回并删除其键值对的键。 def:如果指定的键…

桩训日记

2007年2月7日 弄了一天的模拟练习&#xff0c;挺累的&#xff0c;明天估计是练习 起步停车2007年2月8日 上午起步停车&#xff08;年龄挺大的李教练&#xff09;&#xff0c;临近中午开始倒库&#xff08;挺帅的尹教练&#xff09;&#xff0c;下午继续倒库&#xff0c;基本茫然…

LeetCode 912. 排序数组(10种排序)

文章目录1. 题目2. 解题2.1 插入排序2.2 冒泡排序2.3 选择排序2.4 希尔排序2.5 归并排序2.6 快速排序2.7 堆排序2.8 计数排序2.9 桶排序2.10 基数排序3. 复杂度表1. 题目 给你一个整数数组 nums&#xff0c;将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,…

顶会审稿人谈论文中稿“潜规则”

科研论文&#xff0c;不同于毕业论文之处在于——科研论文是根据有价值的生产实践或科研课题写作的&#xff0c;具有原创性和独到性的论文。在学术界&#xff0c;有人写论文是为了升硕士&#xff0c;升博士或者研究生博士顺利毕业。毕竟在学术界论文是工作和科研水平的直观体现…

python asyncio_如何使用Python中的asyncio?

【51CTO.com快译】Python的异步编程功能(简称async)让你可以编写不必等待独立任务完成就可以完成更多工作的程序。Python附带的asyncio库为你提供了使用async处理磁盘或网络I/O、无需其他方面等待的工具。 asyncio提供了两种处理异步操作的API&#xff1a;高级和低级。高级API用…

程序员面试金典 - 面试题 08.05. 递归乘法(位运算)

1. 题目 递归乘法。 写一个递归函数&#xff0c;不使用 * 运算符&#xff0c; 实现两个正整数的相乘。 可以使用加号、减号、位移&#xff0c;但要吝啬一些。 示例1:输入&#xff1a;A 1, B 10输出&#xff1a;10示例2:输入&#xff1a;A 3, B 4输出&#xff1a;12提示: …

最新整理完成

终于把主站做完了&#xff0c;用了一个小型的cms系统&#xff0c;因为买不起asp.net的空间&#xff0c;而且因为买的时候没问清楚&#xff0c;后来才知道限制cpu4%以内&#xff0c;才知道频繁的server unavaliable是多么的痛苦。我现在把修正后的新闻系统重新提供下载&#xff…

PromptCLUE:大规模多任务Prompt预训练中文开源模型

简介PromptCLUE&#xff1a;大规模多任务Prompt预训练中文开源模型。中文上的三大统一&#xff1a;统一模型框架&#xff0c;统一任务形式&#xff0c;统一应用方式。支持几十个不同类型的任务&#xff0c;具有较好的零样本学习能力和少样本学习能力。针对理解类任务&#xff0…

JS基础知识总结

前几天在网上看到的一个总结&#xff0c;觉得挺好的&#xff0c;所以记录了下来&#xff0c;以备查用。1 创建脚本块 1: <script language”JavaScript”>2: JavaScript code goes here3: </script> 2 隐藏脚本代码 1: <script language”JavaScript”>2: &…

程序员面试金典 - 面试题 10.02. 变位词组(哈希map)

1. 题目 编写一种方法&#xff0c;对字符串数组进行排序&#xff0c;将所有变位词组合在一起。 变位词是指字母相同&#xff0c;但排列不同的字符串。 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"]…

python3.7安装wordcloud_Python中的wordcloud库安装问题及解决方法

今天下载wordcloud的时候出现了很多问题&#xff0c;在此总结总结 1.问题一&#xff1a;You are using pip version 19.0.3, however version 20.0.2 is available…问题解决方法&#xff1a; 打开cmd输入如下命令 python -m pip install -U pip 2.问题二&#xff1a;error: Mi…

互联网最值得加入的173家国企汇总

文 | 重庆搬砖喵、王二源 | 知乎今年的就业形势&#xff0c;实在是严峻。社招都这样&#xff0c;更别说应届生。虽然有一些垃圾国企&#xff0c;但仍然有非常多值得考虑的国企&#xff0c;毕竟优质的国企很稳定&#xff0c;不会像互联网一样担忧年纪大被裁员的情况发生&#xf…

LeetCode 1111. 有效括号的嵌套深度(奇偶分离)

1. 题目 有效括号字符串 仅由 "(" 和 ")" 构成&#xff0c;并符合下述几个条件之一&#xff1a; 空字符串连接&#xff0c;可以记作 AB&#xff08;A 与 B 连接&#xff09;&#xff0c;其中 A 和 B 都是有效括号字符串嵌套&#xff0c;可以记作 (A)&…

一首好听的音乐

昨天在不经意间突然听到一首超好听的曲子&#xff0c;来自班得瑞的《赞美主》,一直狂听好几个小时&#xff0c;音乐实在太美了&#xff0c;似同宁静的山谷中发出最自然的声音&#xff0c;让人心旷神怡&#xff0c;真是一种享受。一直以来都认为古典音乐是最美的&#xff0c;没想…

bpsk调制及解调实验_无线通信中的IQ调制,BPSK调制,QPSK调制,16QAM调制的理解...

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群先从IQ调制说起&#xff1a;IQ调制&#xff1a;IQ解调原理&#xff1a;Linux下使用GNU Octave运行下面的代码&#xff1a;MATLAB123456t-1:0.001:1;f1;ycos(2*pi*2*f*t);subplot(1,2,…

突发!图森未来CEO侯晓迪被罢免,公司疑遭SEC、FBI联手调查,市值一夜砍半

编辑 | 泽南、小舟来源 | 机器之心侯晓迪&#xff1a;我被「无故撤职」了。自动驾驶领域又有大事发生。著名自动驾驶卡车公司图森未来&#xff08;TuSimple, TSP&#xff09;10 月 31 日突然表示&#xff0c;已将首席执行官兼联合创始人侯晓迪解雇&#xff0c;该决定立即生效。…

异常处理的最佳习惯

一个被良好设计的错误处理代码块集可以让程序更健壮并且面临更少的崩溃机会&#xff0c;因为这样的应用程序对错误进行了处理。下面的列表包含了异常处理最佳习惯中的建议&#xff1a;知道什么时候要设立 try/catch 块。例如&#xff0c;你可以通过编程来检查可能发生在使用异常…

LeetCode 299. 猜数字游戏

1. 题目 你正在和你的朋友玩 猜数字&#xff08;Bulls and Cows&#xff09;游戏&#xff1a;你写下一个数字让你的朋友猜。 每次他猜测后&#xff0c;你给他一个提示&#xff0c;告诉他有多少位数字和确切位置都猜对了&#xff08;称为“Bulls”, 公牛&#xff09;&#xff0…