python怎么模拟EM算法
发表于:2024-09-29 作者:千家信息网编辑
千家信息网最后更新 2024年09月29日,本篇内容介绍了"python怎么模拟EM算法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!模拟课本第
千家信息网最后更新 2024年09月29日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安全错误
数据库的锁怎样保障安全
宝塔服务器安全组未放行
中行软件开发五部
阜宁仓鼠软件开发有限公司
杭州都快网络技术有限公司
服务器电源普通电脑能用么
阿里云的什么品牌服务器
国内软件开发如何做
山西财大数据库数据库
福建省邵武市网络安全教育平台
全球软件开发大会有哪些
网络安全缺乏系统的法律
无线网络安全设置怎么设置好
数据库主属性是啥
六安电力软件开发费用
企业网络安全方案设计的摘要
广州人资优选互联网科技有限公司
2021年网络安全宣传周音乐
ftp服务器与web服务器
数据库原理做表
3月互联网科技大事件
2020年网络安全大会深圳
ios 管理服务器app
求生之路2本地服务器打不开
4cpu 服务器管理
湖北省宝乐购网络技术有限公司
桌面投影触摸软件开发
php递交到数据库乱码
录像机出现影像数据库文件
法院网络安全演讲
软件开发项目风险的特