python怎么模拟EM算法
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇内容介绍了"python怎么模拟EM算法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!模拟课本第
千家信息网最后更新 2025年12月02日python怎么模拟EM算法
本篇内容介绍了"python怎么模拟EM算法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
模拟课本第一个例子,即用EM算法估计三个硬币模型的参数。
问题引入:有三个硬币:A、B、C。现在先投掷A,根据A的结果进行选择,A为正面选B,A为反面选C。然后用选出的硬币进行投掷。结果[1, 1, 0, 1, 0, 0, 1, 0, 1, 1]。问题:先只能观测到抛硬币结果,不能观测过程的前提下,如何估计三个硬币正面出现的概率,即三个硬币模型的参数。
EM算法解决代码:
import numpy as npimport mathclass EM: def __init__(self, prob): self.pro_A, self.pro_B, self.pro_C = prob # e_step def pmf(self, i): pro_1 = self.pro_A * math.pow(self.pro_B, data[i]) * math.pow( (1 - self.pro_B), 1 - data[i]) pro_2 = (1 - self.pro_A) * math.pow(self.pro_C, data[i]) * math.pow( (1 - self.pro_C), 1 - data[i]) return pro_1 / (pro_1 + pro_2) # m_step def fit(self, data): count = len(data) print('init prob:{}, {}, {}'.format(self.pro_A, self.pro_B, self.pro_C)) for d in range(count): # _ = yield # 关于yield强烈推荐这篇: https://developer.ibm.com/zh/articles/os-cn-python-yield/ _pmf = [self.pmf(k) for k in range(count)] pro_A = 1 / count * sum(_pmf) pro_B = sum([_pmf[k] * data[k] for k in range(count)]) / sum( [_pmf[k] for k in range(count)]) pro_C = sum([(1 - _pmf[k]) * data[k] for k in range(count)]) / sum([(1 - _pmf[k]) for k in range(count)]) print('{}/{} pro_a:{:.3f}, pro_b:{:.3f}, pro_c:{:.3f}'.format( d + 1, count, pro_A, pro_B, pro_C)) self.pro_A = pro_A self.pro_B = pro_B self.pro_C = pro_Cdata = [1, 1, 0, 1, 0, 0, 1, 0, 1, 1]# 由于EM算法与初始值有关,这里有两组不同的初始值,以便体会# 第一组# em = EM(prob=[0.5, 0.5, 0.5])# f = em.fit(data)# 如果用yield# 需要下边代码# next(f) # 执行到上面的yield卡主,即只完成了初始化# next(f) # 继续执行,到下一次yield之前。也就是完成了一次迭代# 第二组em = EM(prob=[0.4, 0.6, 0.7])f2 = em.fit(data)结果:
没有用yield时:
init prob:0.4, 0.6, 0.71/10 pro_a:0.406, pro_b:0.537, pro_c:0.6432/10 pro_a:0.406, pro_b:0.537, pro_c:0.6433/10 pro_a:0.406, pro_b:0.537, pro_c:0.6434/10 pro_a:0.406, pro_b:0.537, pro_c:0.6435/10 pro_a:0.406, pro_b:0.537, pro_c:0.6436/10 pro_a:0.406, pro_b:0.537, pro_c:0.6437/10 pro_a:0.406, pro_b:0.537, pro_c:0.6438/10 pro_a:0.406, pro_b:0.537, pro_c:0.6439/10 pro_a:0.406, pro_b:0.537, pro_c:0.64310/10 pro_a:0.406, pro_b:0.537, pro_c:0.643
用yield的时候一条一条输出上面的语句
"python怎么模拟EM算法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
硬币
算法
三个
结果
代码
内容
参数
更多
模型
正面
知识
过程
问题
面的
有关
观测
输出
不同
实用
学有所成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器挂外网如何安全处理
网络安全和信息处置制度
关系数据库用什么结构存放
数据库怎样和java链接
人工智能公共服务器
服务器怎么实时查共享文件
db2数据库截取时间
一体四翼确保网络安全
甘肃天水网络安全宣传
如何确保自己的网络安全
生死狙击服务器被黑客攻击
创业项目管理软件开发
软件开发项目的独特点
老帕萨特氧传感器数据库
把计算机设置成服务器
北京包车软件开发
软件开发项目wbs
医院疾病数据库隐私
数据库脚本为文本文档
登录器不显示服务器列表如何解决
网络技术有限公司有哪些
网络安全联盟联系方式
服务器硬盘离线状态怎么解除
网络安全工程师证考试
济南名云网络安全公司
部队网络安全防陷阱
excel数据库使用技巧
arcgis时空数据库
外国电影网络安全
创实互联网科技