首页 > 编程语言 >实现EM算法的单次迭代过程

实现EM算法的单次迭代过程

时间:2024-06-12 09:59:18浏览次数:9  
标签:EM 迭代 硬币 正面 num theta counts 单次 朝上

编程要求

根据提示,在右侧编辑器补充 Begin-End 段中的代码,完成 em_single(priors, observations)函数。该函数需要完成的功能是模拟抛掷硬币实验并估计在一次迭代中,硬币 A 与硬币 B 正面朝上的概率。其中:

  • init_values :硬币 A 与硬币 B 正面朝上的概率的初始值,类型为 list ,如 [0.2, 0.7] 代表硬币 A 正面朝上的概率为 0.2,硬币 B 正面朝上的概率为 0.7。

  • observations :抛掷硬币的实验结果记录,类型为 list 。 list 的行数代表做了几轮实验,列数代表每轮实验用某个硬币抛掷了几次。 list 中的值代表正反面,0 代表反面朝上,1 代表正面朝上。如 [[1, 0, 1], [0, 1, 1]] 表示进行了两轮实验,每轮实验用某硬币抛掷三次。第一轮的结果是正反正,第二轮的结果是反正正。

  • 返回值:将估计出来的硬币 A 和硬币 B 正面朝上的概率组成 list 返回。如 [0.4, 0.6] 表示你认为硬币 A 正面朝上的概率为 0.4,硬币 B 正面朝上的概率为 0.6。

测试说明

平台会对你编写的代码进行测试,你只需完成 em_single 函数即可。

测试输入:

{'init_values':[0.2, 0.7], 'observations':[[1, 1, 0, 1, 0], [0, 0, 1, 1, 0], [1, 0, 0, 0, 0], [1, 0, 0, 1, 1], [0, 1, 1, 0, 0]]}

预期输出: [0.346548, 0.528706]

import numpy as np
from scipy import stats
def em_single(init_values, observations):
    """
    模拟抛掷硬币实验并估计在一次迭代中,硬币A与硬币B正面朝上的概率
    :param init_values:硬币A与硬币B正面朝上的概率的初始值,类型为list,如[0.2, 0.7]代表硬币A正面朝上的概率为0.2,硬币B正面朝上的概率为0.7。
    :param observations:抛掷硬币的实验结果记录,类型为list。
    :return:将估计出来的硬币A和硬币B正面朝上的概率组成list返回。如[0.4, 0.6]表示你认为硬币A正面朝上的概率为0.4,硬币B正面朝上的概率为0.6。
    """
    #********* Begin *********#
    observations = np.array(observations)
    counts = {'A': {'H': 0, 'T': 0}, 'B': {'H': 0, 'T': 0}}
    theta_A = init_values[0]
    theta_B = init_values[1]
    # E step
    for observation in observations:
        len_observation = len(observation)
        num_heads = observation.sum()
        num_tails = len_observation - num_heads
        # 两个二项分布
        contribution_A = stats.binom.pmf(num_heads, len_observation, theta_A)
        contribution_B = stats.binom.pmf(num_heads, len_observation, theta_B)
        weight_A = contribution_A / (contribution_A + contribution_B)
        weight_B = contribution_B / (contribution_A + contribution_B)
        # 更新在当前参数下A、B硬币产生的正反面次数
        counts['A']['H'] += weight_A * num_heads
        counts['A']['T'] += weight_A * num_tails
        counts['B']['H'] += weight_B * num_heads
        counts['B']['T'] += weight_B * num_tails
    # M step
    new_theta_A = counts['A']['H'] / (counts['A']['H'] + counts['A']['T'])
    new_theta_B = counts['B']['H'] / (counts['B']['H'] + counts['B']['T'])
    return [new_theta_A, new_theta_B]
    #********* End *********#

标签:EM,迭代,硬币,正面,num,theta,counts,单次,朝上
From: https://blog.csdn.net/qq_64884115/article/details/139603296

相关文章

  • COMP643 Advanced Database Management
    COMP643AdvancedDatabaseManagementAssignment3Worth:20%ofcoursemarksforCOMP643.Due:Friday,14thJune20245:00p.m.LatePenalty:Worknotreceivedbytheduetimeattractsanimmediatepenalty,upto25%ofthepointsavailable.Noworkw......
  • FastAPI+MemFire Cloud+LangChain开发ChatGPT应用
    为什么选择这三个组合OpenAI官方SDK是Python,此开发语言首选PythonFastAPI是Python语言编写的高性能的现代化Web框架MemFireCloud提供向量数据库支持,向量数据库是开发知识库应用的必选项MemFireCloud提供Supabase托管,LangChain原生支持SupabaseAPILangChain是AI应用开发......
  • D. "a" String Problem
    原题链接一句话题解由于t必须要包含非a字符,所以假如t包含前k个非a字符,那么s所包含的非a字符数量一定是k的倍数实施遍历t能包含几个非a字符,然后再算有几种填充a的方法复杂度\(logn·n\)之所以有logn是因为遍历s包含的非a字符数量的因子code#include<bits/stdc++.h>using......
  • FlinkSQL 运行官网的 filesystem SQL 连接器例子出错:Cannot discover a connector usi
    我的例子程序是仿照官网例子写的:我的程序:packagecom.xxx.demo;importorg.apache.flink.streaming.api.datastream.DataStream;importorg.apache.flink.streaming.api.environment.StreamExecutionEnvironment;importorg.apache.flink.table.api.bridge.java.StreamTabl......
  • C# get TotalVisibleMemorySize FreePhysicalMemory TotalVirtualMemorySize FreeVirt
    1.InstallSystem.ManagementinNuget;2usingSystem.Management;namespaceConsoleApp37{internalclassProgram{staticvoidMain(string[]args){System.Timers.Timertm=newSystem.Timers.Timer();tm.......
  • DISM(Deployment Image Servicing and Management)和wimlib虽然都可以用来处理Windows映
    DISM(DeploymentImageServicingandManagement)和wimlib都是用于Windows系统的映像管理工具,它们可以用来处理Windows映像文件(.wim文件),但在功能和使用上有一些不同点。下面是它们的比较:DISM(DeploymentImageServicingandManagement)内置工具:DISM是Windows操作系统......
  • Codeforces Problem 1980B Choosing cubes(基本排序)
    timelimitpertest1secondmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputDmitryhas n......
  • 数据库-Duckdb-catalog和schema
    创建数据库1.会有一个或者两个文件.duckbd.wal 2.用户的数据库名称--databasename-database_oid数据库对象表的全限定名可表示为:Catalog名.Schema名.表名01.DuckDB'stwointernaldatabaseschemanames,systemandtemp.有两个内部的数据schema_nameT......
  • Adobe Premiere Pro 2024下载安装(视频剪辑软件Pr2024)
    百度网盘下载地址(含PR教学课程(PR从入门到精通108节课程))https://pan.baidu.com/s/1WKYZENoMzTcKhbgMgbEPGQ?pwd=SIMS一、Pr简介Pr全称Premiere,是Adobe公司开发的一款功能强大的视频剪辑软件,目前被广泛应用于抖音、快手以及火山小视频等。AdobePremierePro2024是一款专业的......
  • python 圖片拼接demo
    fromPILimportImagedefcomb(png1,png2,png3,png4,png5,style='horizontal'):img1,img2,img3,img4,img5=Image.open(png1),Image.open(png2),Image.open(png3),Image.open(png4),Image.open(png5)#统一图片尺寸,可以自定义设置(宽,高)img1=img1.r......