python怎么模拟EM算法
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容介绍了"python怎么模拟EM算法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!模拟课本第
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
中智农互联网科技
广州淘业互联网络科技
广州大一互联网络科技有限公司
互联网科技公司经营范围
蓝思科技飞鸽互联网
科技互联网产品
互联网科技公司华为
互联网核心科技是什么
互联网金融与金融科技
互联网的科技创新
青岛互联网科技公司
善班互联网科技
奇酷互联网络科技
有木互联网科技
互联网科技有限公司 翻译
互联网实体化科技化
互联网系的金融科技公司
健康食品互联网创新科技园项目
兰石爱特工业互联网科技分公司
科技互联网企业在行动
南京欣网互联网络科技
猪兼强互联网科技
狮子座互联网科技
凡科互联网科技
米客互联网科技
奔汉互联网科技
团飞科技与伯堂互联网服务平台
彤创互联网科技有限公司
世界互联网领先科技成果获奖
互联网科技融合创新