matplotlib繪製伯努利分佈的概率密度圖

梧桐雪發表於2020-09-24

根據伯努利分佈的定義,我們可以得到以下公式: f ( x ) = p x ( 1 − p ) 1 − x  for  x ∈ { 0 , 1 } f(x)=p^{x}(1-p)^{1-x} \quad \text { for } x \in\{0,1\} f(x)=px(1p)1x for x{0,1}當我們進行觀測,得到了事件 x x x發生頻率的觀測值(程式碼中假設是0.5,比如拋硬幣1000次,500次朝上、500次朝下),我們就可以畫出伯努利分佈的概率p的密度圖。

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
#x表示觀測到的實驗結果,也就是有0.5的概率正面朝上
x = 0.5
p = np.linspace(0,1,100)
f = (p**x)*((1-p)**(1-x))

#以下使用spline對曲線進行平滑處理
import os
os.sys.path.append('p:\\users\\loara\anaconda3\\lib\\site-packages')
from scipy.interpolate import make_interp_spline
p_smooth = np.linspace(p.min(),p.max(),300) #300 represents number of points to make between T.min and T.max
f_smooth = make_interp_spline(p,f)(p_smooth)
plt.plot(p_smooth,f_smooth)
plt.show()

在這裡插入圖片描述
可見,當 p p p取0.5時,概率密度達到最大,所以我們認為對 p p p的最佳估計就是0.5。

我們來修改一下實驗資料,如果觀測到的 x x x為0.7,我們可以得到以下圖形:
在這裡插入圖片描述
我們可以看到最佳估計就在0.7估計,此時此刻,我只能說:伯努利分佈真牛逼!

相關文章