实验二
一 实验名称
贝叶斯估计
二 目的和意义
- 学习使用python进行贝叶斯估计的方法。
- 学会简单的贝叶斯学习方法进行机器学习。
三 操作步骤或算法结构
-
使用 Python 中 numpy 的库生成指定的(均值 3.6 3.6 3.6 ,标准差 1 1 1 )随机分布样本,作为研究样本,验证之后的方法是否能找到该样本正确的分布参数(
numpy.random.normal
) -
给定参数初始分布估计值(均值3.6,标准差0.4)的情况下,计算样本的均值的贝叶斯估计量(教材公式 3.51 3.51 3.51 )。
- 公式
3.51
3.51
3.51
ln p ( θ ∣ X , y ) = − 1 2 ( θ − m 0 ) T S 0 − 1 ( θ − m 0 ) + ∑ i = 1 N [ y i ln p ( y i ln p ( y i = 1 ∣ x i , θ ) ) + ( 1 − y i ) ln ( 1 − p ( y i = 1 ∣ x i , θ ) ) ] + const \ln p(\theta|X,\textbf y) = -\frac 12(\theta-m_0)^TS_0^{-1}(\theta-m_0) + \sum\limits^N_{i = 1}[y_i\ln p(y_i\ln p(y_i = 1|x_i,\theta))\\+(1-y_i)\ln(1-p(y_i =1|x_i,\theta))]+\textbf{const} lnp(θ∣X,y)=−21(θ−m0)TS0−1(θ−m0)+i=1∑N[yilnp(yilnp(yi=1∣xi,θ))+(1−yi)ln(1−p(yi=1∣xi,θ))]+const
- 公式
3.51
3.51
3.51
-
使用贝叶斯学习的方法,通过多次迭代,估计并调整贝叶斯估计值——样本均值,并通过matplotlib 库绘制该估计值的演变过程。
-
调整上述步骤中指定的参数,重复实验,观察结果。
四 结构程序设计
编程实现
import matplotlib.pyplot as plt
import numpy as np
def cal(i):
return 1000 * 1 * 1 / (1000 * 1 * 1 + np.var(example)) * avg(example) + np.var(example) / (
1000 * 1 * 1 + np.var(example)) * i
def avg(i):
return sum(i) / len(i)
example = np.random.normal(3.6, 1, 1000)
y = [3]
for i in range(0, 999):
y.append(cal(y[i]))
绘图
x = range(0, 1000)
plt.plot(x, y)
plt.xlim(0, 4)
plt.show()
五 实验结果分析
得到如下结果
数据于开始段急速上升而后趋于稳定
调整参数后,实验效果的变化不明显,可能是没能充分掌握各函数的数学意义。对于多个参数的调参,全靠猜测和经验是行不通的。