针对于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:

针对于MLE和MLP的代码例子实现_第1张图片

图2:

针对于MLE和MLP的代码例子实现_第2张图片

你可能感兴趣的:(ML\NLP,机器学习,python,人工智能)