均匀分布叠加与正态分布叠加
1 理论2 实践均匀分布生成一个标准正态分布import numpy as npimport matplotlib.pyplot as plt#-1~1 uniformu = 2*np.random.uniform(size=30000)-1normal_rv = [300 * np.mean(2*np.random.uniform(size=30000)-1) for i in r...
1 理论
1.1 两个正态分布之和为正态分布
1.2 均匀分布相减
x 1 ∼ U ( 0 , 1 ) x 2 ∼ U ( 0 , 1 ) z = x 1 − x 2 \begin{array}{l} {x_{1}} & {\sim U(0,1)} \\ {x_{2}} & {\sim U(0,1)} \\ {z} & {=x_{1}-x_{2}}\end{array} x1x2z∼U(0,1)∼U(0,1)=x1−x2
概率密度函数不再是均匀分布,会是三角形或者梯形。
易知, z 的取值范围是,-1到1。
f
z
(
z
)
=
∫
−
∞
∞
f
(
z
+
x
2
)
f
(
x
2
)
d
x
2
=
∫
0
1
f
(
z
+
x
2
)
d
x
2
=
t
=
z
+
x
2
∫
0
1
f
(
t
)
d
(
t
−
z
)
=
∫
z
z
+
1
f
(
t
)
d
t
=
{
1
+
z
−
1
<
z
<
0
1
−
z
0
<
z
<
1
\begin{aligned} f_z(z) &=\int_{-\infty}^{\infty} f\left(z+x_{2}\right) f\left(x_{2}\right) d x_{2} \\ &=\int_{0}^{1} f\left(z+x_{2}\right) d x_{2} \\ &\overset{t=z+x_{2}}{=} \int_{0}^{1} f(t) d(t-z) \\ &=\int_{z}^{z+1} f(t) dt \\ &= \{\begin{array}{ll}{1+z} & {-1<z<0} \\ {1-z} & {0<z<1}\end{array} \end{aligned}
fz(z)=∫−∞∞f(z+x2)f(x2)dx2=∫01f(z+x2)dx2=t=z+x2∫01f(t)d(t−z)=∫zz+1f(t)dt={1+z1−z−1<z<00<z<1
这里解释下,
f
(
⋅
)
f(·)
f(⋅)可看做
f
x
(
⋅
)
f_x(·)
fx(⋅), 是x1, x2 概率密度函数,在(0,1)区间值为0; 在其他区间取值0。
2 实践
2.1 两个正态分布和为正态分布
import numpy as np
import matplotlib.pyplot as plt
n1 = 4*np.random.normal(size=3000)
n2 = 3*np.random.normal(size=3000)-1
n_sum = n1 + n2
print('n_1 mean:{:.3}'.format(np.mean(n1)))
print('n_1 std:{:.3}'.format( np.std(n1)))
print('n_2 mean:{:.3}'.format(np.mean(n2)))
print('n_2 std:{:.3}'.format( np.std(n2)))
print('n_sum mean:{:.3}'.format( np.mean(n_sum)))
print('n_sum std:{:.3}'.format( np.std(n_sum)))
plt.hist(n1, bins = 50)
plt.show()
plt.hist(n_sum,bins = 100)
plt.show()
结果:
n_1 mean:-0.0118
n_1 std:3.98
n_2 mean:-0.948
n_2 std:2.96
n_sum mean:-0.96
n_sum std:4.95
2.2 均匀分布如何生成一个标准正态分布?
其实从熵增原理也可以解释为什么均匀分布的叠加是高斯分布了。
比如,有两颗硬币,同时抛,会有三种情况(不考虑硬币1,2的区别):1(正正)2(正负)1(负负)。
抛的更多,会往概率大的方向进行,就是熵增。
import numpy as np
import matplotlib.pyplot as plt
#-1~1 uniform
u = 2*np.random.uniform(size=30000)-1
normal_rv = [300 * np.mean(2*np.random.uniform(size=30000)-1) for i in range(10000)]
print(np.mean(normal_rv))
print(np.std(normal_rv))
plt.hist(u, bins = 50)
plt.show()
plt.hist(normal_rv,bins = 100)
plt.show()
2.3 两个均匀分布叠加
两个均匀分布相加减,概率密度曲线是梯形/三角形;
#两个均匀分布相减
u1 = np.random.uniform(size = 300000)
u2 = 2*np.random.uniform(size = 300000) - 1
#u = u1*u2
#u = u1+u2
u = u2 - u1
plt.hist(u, bins = 500)
plt.show()
#两个均匀分布相减
u1 = np.random.uniform(size = 300000)
u2 = np.random.uniform(size = 300000)
#u = u1*u2
#u = u1+u2
u = u2 - u1
plt.hist(u, bins = 500)
plt.show()
结果:
最近开通了个公众号,主要分享从原理上讲机器学习与数学联系,推荐系统,风控等算法相关的内容,感兴趣的伙伴可以关注下。
公众号相关的学习资料会上传到QQ群596506387,欢迎关注。
reference:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)