示例中使用的离散随机变量分布的PMF
首先,我们编写函数以使用这些代码行为一个样本生成离散随机变量。
Generate arbitary discrete distributed random variables given
the probability vector
def discrete_inverse_trans(prob_vec):
U=uniform.rvs(size=1)
if U<=prob_vec[0]:
return 1
else:
for i in range(1,len(prob_vec)+1):
if sum(prob_vec[0:i])<U and sum(prob_vec[0:i+1])>U:
return i+1
然后,我们创建一个函数以使用这些代码行生成许多随机变量样本。
def discrete_samples(prob_vec,n=1):
sample=[]
for i in range(0,n):
sample.append(discrete_inverse_trans(prob_vec))
return np.array(sample)
最后,我们创建一个函数来模拟结果,并通过这些代码行将其与实际结果进行比较。
‘’’
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
‘’’
def discrete_simulate(prob_vec,numbers,n=1):
sample_disc=discrete_samples(prob_vec,n)
unique, counts=np.unique(sample_disc,return_counts=True)
fig=plt.figure()
ax=fig.add_axes([0,0,1,1])
prob=counts/n
ax.bar(numbers,prob)
ax.set_title(“Simulation of Generating %i Discrete Random Variables” %n)
plt.show()
data={‘X’:unique,‘Number of samples’:counts,‘Empirical Probability’:prob,‘Actual Probability’:prob_vec}
df=pd.DataFrame(data=data)
return df
我们可以在下面运行一些示例以查看结果。同样,请注意,由于我们要生成随机变量,因此结果可能会有所不同。
prob_vec=np.array([0.1,0.3,0.5,0.05,0.05])
numbers=np.array([1,2,3,4,5])
dis_example1=discrete_simulate(prob_vec, numbers, n=100)
dis_example2=discrete_simulate(prob_vec, numbers, n=500)
dis_example3=discrete_simulate(prob_vec, numbers, n=1000)
生成与实际的100个离散随机变量
生成的vs实际的500个离散随机变量
生成的与实际的1000个离散随机变量
In[11]: dis_example1
Out[11]:
X Number of samples Empirical Probability Actual Probability
0 1 8 0.08 0.10
1 2 35 0.35 0.30
2 3 50 0.50 0.50
3 4 5 0.05 0.05
4 5 2 0.02 0.05
In[12]: dis_example2
Out[12]:
X Number of samples Empirical Probability Actual Probability
0 1 53 0.106 0.10
1 2 159 0.318 0.30
2 3 234 0.468 0.50
3 4 30 0.060 0.05
4 5 24 0.048 0.05
In[13]: dis_example3
Out[13]:
X Number of samples Empirical Probability Actual Probability
0 1 108 0.108 0.10
1 2 290 0.290 0.30
2 3 491 0.491 0.50
3 4 51 0.051 0.05
4 5 60 0.060 0.05
结果很有趣!我们可以看到,随着我们增加随机变量样本的数量,经验概率越来越接近实际概率。尝试使用不同数量的样本和/或不同的分布进行实验,以查看不同的结果。
总结
这种逆变换方法是统计中非常重要的工具,尤其是在仿真理论中,在给定随机变量均匀分布在(0,1)中的情况下,我们想生成随机变量。研究案例本身非常广泛,您可以使用在生成经验累积分布函数,预测分析中使用到的这种方法。
文末有福利领取哦~
👉一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉二、Python必备开发工具
👉三、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉 四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
👉五、Python练习题
检查学习结果。
👉六、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!