python怎么模拟EM算法
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,本篇内容介绍了"python怎么模拟EM算法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!模拟课本第
千家信息网最后更新 2025年01月25日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安全错误
数据库的锁怎样保障安全
教育软件开发需求分析
长沙那个学院学软件开发好
电脑锁住怎么进入网络安全模式
海南定制软件开发排行榜
二手服务器主板cpu
国际版吃鸡哪个服务器最好
江苏net软件开发价格
湖北php软件开发
服务器最多支持多少兆
软件开发都需要什么人员
国外服务器加速器下载
关联方交易软件开发
app社交软件开发
信息网络技术的发展特点不包括
怎么把数据库的表导出
数据库高并发写入
触屏控制软件开发
计算机和网络安全
吴忠市第四届网络安全宣传日活动
系统集成运维软件开发
三级数据库学什么用
网络安全微课黑客攻击
网络安全社会层面包括哪些
网络安全自我保护意识征文
DNS服务器属于管理服务器
软件开发 oa
三峡大坝数据库
建立网络安全工作责任制考核制度
数据库 教案
redis数据库取数据