最大似然法

这篇具有很好参考价值的文章主要介绍了最大似然法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

任务描述

本关任务:理解最大似然法的基本原理并解决实际问题。

相关知识

为了完成本关任务,你需要:

  1. 理解极大似然原理;
  2. 理解并掌握极大似然法的数学模型。

极大似然原理

最大似然法是建立在极大似然原理的基础上的一个统计方法。极大似然原理可以这么描述:一个随机试验如有若干个可能的结果A,B,C...,若在一次试验中,结果 A 出现了,那么可以认为实验条件对A的出现有利,即出现的概率 P(A) 较大。

举个简单的例子: 设甲箱中有99个白球,1个黑球;乙箱中有1个白球和99个黑球。现随机取出一箱,再从抽取的一箱中随机取出一球,结果是黑球。这一黑球从乙箱抽取的概率比从甲箱抽取的概率大得多,这时我们自然更多地相信这个黑球是取自乙箱的。

一般说来,事件A发生的概率与某一未知参数θ有关,θ取值不同,则事件A发生的概率P(A∣θ)也不同。当我们在一次试验中事件A发生了,则认为此时的θ值应是一切可能取值中使P(A∣θ)达到最大的那一个。极大似然估计法就是要选取这样的θ值作为参数θ的估计值,使所选取的样本在被选的总体中出现的可能性为最大。

最大似然估计

给定一堆数据,假如我们知道它是从某一种分布中随机取出来的,可是我们并不知道这个分布具体的参,即“模型已定,参数未知”。例如,我们知道这个分布是正态分布,但是不知道均值和方差;或者是二项分布,但是不知道均值。最大似然估计(MLE,Maximum Likelihood Estimation)就可以用来估计模型的参数。MLE 的目标是找出一组参数,使得模型产生出观测数据的概率最大。在图像处理中,最大似然法有很多的应用,例如图像搜索、图像匹配等方面。

最大似然估计是建立在这样的思想上:已知某个参数能使这个样本出现的概率最大,我们当然不会再去选择其他小概率的样本,所以干脆就把这个参数作为估计的真实值。

我们考虑独立同分布的数据集合C={c1​,c2​,...,cn​}来估计参数μ。则联合概率密度函数P(C∣μ)被称为μ相对于C的似然函数: P(c1​,c2​,…,cn​∣μ)=∏i=1n​P(ci​;μ)

如果μ^​是参数空间中能使似然函数最大的μ值,则应该是“最可能”的参数值,那么就是μ^​的最大似然估计量。μ^​(c1​,c2​,...,cn​)被称为最大似然函数估计值。

编程要求

本次任务考虑一个抛硬币的例子。

问题1:盒子里现在有三枚硬币,由于硬币的质地问题,这三个硬币抛出正面的概率分别为p1​=0.34、p2​=0.5、p3​=0.67。假设我们从一个装了三个硬币的盒子里头取出一枚硬币,我们把这个硬币抛80次(即,我们获取一个采样x1​,x2​,...,xt​并把正面的次数记下来,正面记为H,反面记为T)。并把抛出一个正面的概率记为p,抛出一个反面的概率记为1−p。假设抛出了49个正面,31个反面。这些硬币没有标记,求哪个硬币的可能性最大?

本关的编程任务是,补全右侧编辑器 Begin-End 区间的代码,解决问题 1 提出的问题。具体要求如下:

  • step1 :使用Factorial阶乘函数,补全 calcu_prob 函数代码,实现问题 1 的似然函数计算。此函数是求解问题的输入为 w: 正面朝上的概率;H:正面朝上的次数;T:反面朝上的次数。输出H+T次抛硬币,H次正面朝上,T次反面朝上的概率值。

  • step2 :补全mle函数代码。输入硬币1,2,3正面朝上的概率coin_1,coin_2,coin_3, 正面朝上的次数h, 反面朝上的次数t。输出最大的概率值(保留3位小数)及硬币的编号(三枚硬币分别编号为coin_1 , coin_2 , coin_3 )。

测试输入:

  1. 0.34
  2. 0.5
  3. 0.67
  4. 49
  5. 31

预期输出:

  1. 0.051
  2. coin_3

代码:文章来源地址https://www.toymoban.com/news/detail-492606.html

from functools import reduce

coin_1 = float(input())     #硬币1正面朝上概率
coin_2 = float(input())     #硬币2正面朝上概率
coin_3 = float(input())     #硬币3正面朝上概率
h = int(input())     #正面朝上次数
t = int(input())     #反面朝上次数

# 实现概率计算
# 输入:w:正面朝上的概率  H:正面朝上的次数  T:反面朝上的次数
# 输出:H+T次抛硬币,H次正面朝上,T次反面朝上的概率值。
def calcu_prob(w,H,T):
    ########## Begin ##########
    # 计算正反面组合数
    c1=Factorial(H+T)
    c2=Factorial(H)
    c3=Factorial(T)
    P=round((c1/c2/c3)*pow(w,H)*pow(1-w,T),3)
    return P

    ########## End ##########

# 求正整数x的阶乘
# 输入:正整数x
# 输出:x的阶乘
def Factorial(x):
    return reduce(lambda x, y: x * y, range(1, x + 1))


# 最大似然函数求解
# 输入: 硬币1,2,3正面朝上的概率coin_1,coin_2,coin_3, 正面朝上的次数h, 反面朝上的次数t
# 输出: 打印最大硬币的概率r与最大硬币的编号
def mle(coin_1,coin_2,coin_3,h,t):
    ########## Begin ##########
    # 参考步骤
    # 1. 计算三枚硬币各自的概率,保留三位小数
    # 2. 建立硬币与概率的字典,方便索引
    # 3. 选出最大值
    # 4. 打印最大值
    # 5. 通过字典索引打印硬币编号
    a=calcu_prob(coin_1,h,t)
    b=calcu_prob(coin_2,h,t)
    c=calcu_prob(coin_3,h,t)
    dit={a:"coin_1",b:"coin_2",c:"coin_3"}
    print(max(a,b,c))
    print(dit[max(a,b,c)])



    ########## End ##########


if __name__ == "__main__":
    # 主函数执行
    mle(coin_1,coin_2,coin_3,h,t)

到了这里,关于最大似然法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包