赞
踩
欢迎大家来到安静到无声的《模式识别与人工智能(程序与算法)》,如果对所写内容感兴趣请看模式识别与人工智能(程序与算法)系列讲解 - 总目录,同时这也可以作为大家学习的参考。欢迎订阅,优惠价只需9.9元,请多多支持!
如何产生任意的概率分布?本文采用MCMC的方法进行演示。这个任务在进行算法仿真时具有很好的意义,首先我们需要设定一个所需的分布(需满足的要求是
∫
−
∞
+
∞
p
(
x
)
d
x
=
1
\int_{ - \infty }^{ + \infty } {p(x)dx{\text{ }} = 1}
∫−∞+∞p(x)dx =1),本文以指数分布为例,主要阐述实现的过程,如需更详细的解释,请参考相关的文献。
实现过程主要为6步。
上面的方法可能会陷入局部最小值,所以可以采用metropolis hastings的采样方法,区别是计算
α
\alpha
α的方法不同,即为
α
=
min
{
f
(
y
)
q
(
x
t
∣
y
)
f
(
x
t
)
q
(
y
∣
x
t
)
,
1
}
\alpha = \min \left\{ {\frac{{f(y)q({x_t}|y)}}{{f({x_t})q(y|{x_t})}},1} \right\}
α=min{f(xt)q(y∣xt)f(y)q(xt∣y),1}
由此可得表示代码:
import numpy as np np.random.seed(0) x_t = np.random.rand(1) import math def function(x): Lambda = 2 e = 2.718281828459 if x > 0: y = Lambda * e ** (-Lambda * x) else: y = 0 return(y) list_x_t = [float(x_t)] for i in range(100000): y=np.random.normal(loc=x_0 , scale=1.0, size=None) #loc:均值 scale:标准差 u = np.random.rand(1) alpha = min(float(function(y)* np.random.normal(loc=y , scale=1.0)/function(x_t)* np.random.normal(loc=x_t , scale=1.0)),1.) if u < alpha: x_t = y else: x_t = x_t list_x_t.append(float(x_t)) import matplotlib.pyplot as plt plt.hist(list_x_t,bins=1000) plt.title("Data distribution histogram") plt.show()
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。