针对于MLE和MLP的代码例子实现

背景

首先该例子来源于CSDN:详解最大似然估计(MLE),最大后验概率估计(MAP),以及贝叶斯公式的理解_nebulaf91的博客

这里的代码作为对上述内容的补充和实现。

代码

import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as optimize

# 假设共进行了10次实验,并且我们已知十次实验中有7次硬币向上,有3次硬币向下
coin_up=7
coin_down=3

# 表示这个事件的发生概率,也就是P(x_0 | \theta)
def coin_up_prop(theta):
    return (theta**coin_up)*(1-theta)**coin_down

# 高斯函数,可以被用来绘图
def Gauss_Function(mu,delta,x):
    multier1=1/(np.sqrt(2*np.pi)*delta)
    sup_e=(x-mu)**2/(2*delta**2)
    multier2=np.exp(-sup_e)
    return multier1*multier2

# 假设抛硬币时,假定硬币的质地分布,正面占比0.5
def P(theta):
    return Gauss_Function(0.5,0.1,theta)

# 图1,用来表示theta的分布
# 如果没有问题,结果图像应该如下图1所示
theta=np.arange(0,1,0.001)
plt.xlabel(r"$\theta$")
plt.ylabel(r"$P(\theta)$")
plt.plot(theta,P(theta))

def P_x0(theta):
    return coin_up_prop(theta)
def multi_px0_p(theta):
    return P_x0(theta)*P(theta)

# 对于我们所求的函数的绘制 当上面的coin_up和coin_down不同时,P(x_0|theta)也不同
# 也就是当上面提到的coin_up不同时,结果图不同,但是形状应该是类似的
y=multi_px0_p(theta)
plt.xlabel(r'$\theta$')
plt.ylabel(r'$P(x_0 | \theta)* P(\theta)$')
plt.plot(theta,y)

def max_val_func(Func,theta):
    return optimize.minimize(fun=Func,x0=theta,tol=1e-270)

# 由于求解的限制,这里给定的参数初始值如果偏差太大会陷入局部最优解导致结果不对
# 当coin_up=70时,选择为0.4即可
# coin_up=70
# coin_down=30
# init_theta=float(0.4)
# max_val_func(multi_px0_p,init_theta).x[0]

# 自己傻了,既然知道了函数不是非凸的,直接求解即可
print(theta[np.argmax(y)])

# 最后输出值大致为:
# coin_up=70 : 0.663
# coin_up=700: 0.6960000000000001

图1:

1

图2:

1

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值