1. 程式人生 > 程式設計 >python 伯努利分佈詳解

python 伯努利分佈詳解

伯努利分佈 是一種離散分佈,有兩種可能的結果。1表示成功,出現的概率為p(其中0<p<1)。0表示失敗,出現的概率為q=1-p。這種分佈在人工智慧裡很有用,比如你問機器今天某飛機是否起飛了,它的回覆就是Yes或No,非常明確,這個分佈在分類演算法裡使用比較多,因此在這裡先學習 一下。

概率分佈有兩種型別:離散(discrete)概率分佈和連續(continuous)概率分佈。

離散概率分佈也稱為概率質量函式(probability mass function)。離散概率分佈的例子有伯努利分佈(Bernoulli distribution)、二項分佈(binomial distribution)、泊松分佈(Poisson distribution)和幾何分佈(geometric distribution)等。

連續概率分佈也稱為概率密度函式(probability density function),它們是具有連續取值(例如一條實線上的值)的函式。正態分佈(normal distribution)、指數分佈(exponential distribution)和β分佈(beta distribution)等都屬於連續概率分佈。

from scipy.stats import binom #匯入伯努利分佈
import matplotlib.pyplot as plt
import numpy as np
#次數
n = 10
#概率
p = 0.3
#匯入特徵係數
k = np.arange(0,21)
#伯努利分佈的特徵值匯入
binomial = binom.pmf(k,n,p)
plt.plot(k,binomial,'o-')
plt.title('Binomial: n = %i,p=%0.2f' % (n,p),fontsize=15)
plt.xlabel('Number of successes')
plt.ylabel('Probability of sucesses',fontsize=15)
plt.savefig(r'C:\Users\Administrator\Desktop\106\data\textdata\12.png')
plt.show()

二項分佈:離散型概率分佈,n 重伯努利分佈

如果隨機變數序列 Xn(n=1,2,…) 中的隨機變數均服從與引數為 p 的伯努利分佈,那麼隨機變數序列 Xn 就形成了引數為 p 的 n 重伯努利試驗。例如,假定重複拋擲一枚均勻硬幣 n 次,如果在第 i 次拋擲中出現正面,令 Xi=1;如果出現反面,則令 Xi=0。那麼,隨機變數 Xn(n=1,…) 就形成了引數為 1/2 的 n 重伯努利試驗。

可見,n 重伯努利試驗需滿足下列條件:

每次試驗只有兩種結果,即 X=1,或 X=0

各次試驗中的事件互相獨立,且 X=1 和 X=0 的概率分別為 p(0<p<1) 和 q=1-p

n 重伯努利試驗的結果就是 n 重伯努利分佈,即二項分佈。反之,當 Xn(n=1) 時,二項分佈的結果服從於伯努利分佈。因為二項分佈實際上是進行了 n 次的伯努利分佈,所以二項分佈的離散型隨機變數期望為 E(x)=np,方差為 D(x)=np(1-p) 。

需要注意的是,滿足二項分佈的樣本空間有一個非常重要的性質,假設進行 n 次獨立試驗,滿足二項分佈(每次試驗成功的概率為 p,失敗的概率為 1−p),那麼成功的次數 X 就是一個引數為 n 和 p 的二項隨機變數,即滿足下述公式:

P(X=k) = C(n,k) * p^k * (1-p)^(n-k)

X=k,試驗 n 次,成功的次數恰好有 k 次的隨機變數(事件)

C(n,k),表示從集合 n 中取出 k 個元素的組合數,結果為 n!/(k!*(n-k)!)

例如,小明參加雅思考試,每次考試的通過率 1/3,不通過率為 q=2/3。如果小明連續參加考試 4 次,那麼恰好有兩次通過的概率是多少?

解析:因為每次考試只有兩種結果,通過或不通過,符合條件 (1);每次考試結果互相獨立,且概率不變,符合條件 (2)。滿足二項分佈樣本,代入公式求解得概率為:C(4,2)*(1/2)^2*(2/3)^(4-2) ≈ 8/27

二項分佈概率直方圖:

python 伯努利分佈詳解

圖形特性:

當 p=q 時,圖形是對稱的

當 p≠q 時,圖形呈偏態,p<q 與 p>q 的偏斜方向相反

當 (n+1)p 不為整數時,二項概率 P(X=k) 在 k=(n+1)*p 時達到最大值

當 (n+1)p 為整數時,二項概率 P(X=k) 在 k=(n+1)*p 和 k=(n+1)*p-1 時達到最大值

NOTE:當 n 很大時,即使 p≠q,二項分佈概率直方圖的偏態也會逐漸降低,最終成為正態分佈。也就是說,二項分佈的極限情形即為正態分佈,故當 n 很大時,二項分佈的概率可用正態分佈的概率作為近似值。那麼 n 需要多大才可謂之大呢?

一般規定,當 p<q 且 np≥5,或 p>q 且 nq≥5 時,這時的 n 就足夠大了,可以用正態分佈的概率作為近似值。則正態分佈引數 μ=np,σ^2=np(1-p) 。

二項分佈:

from scipy.stats import binom 
import matplotlib.pyplot as plt
import numpy as np
fig,ax = plt.subplots(1,1)
n = 100
p = 0.5
#平均值,方差,偏度,峰度
mean,var,skew,kurt=binom.stats(n,p,moments='mvsk')
print(mean,kurt)
#ppf:累積分佈函式的反函式。q=0.01時,ppf就是p(X<x)=0.01時的x值。
x=np.arange(binom.ppf(0.01,binom.ppf(0.99,p))
ax.plot(x,binom.pmf(x,'o')
plt.rcParams['font.sans-serif']=['SimHei']
plt.title(u'二項分佈概率質量函式')
plt.savefig(r'C:\Users\Administrator\Desktop\106\data\textdata\1.png')
plt.show()

補充拓展:python--scipy--1離散概率分佈:伯努利分佈

#匯入包
#陣列包
import numpy as np
#繪圖包
import matplotlib.pyplot as plt
#統計計算包的統計模組
from scipy import stats
'''
arange用於生成一個等差陣列,arange([start,]stop,[step,]
使用見文件:https://docs.scipy.org/doc/numpy/reference/generated/numpy.arange.html
'''

'''
第1步,定義隨機變數:1次拋硬幣
成功指正面朝上記錄為1,失敗指反面朝上記錄為0
'''
X = np.arange(0,1)
X

array([0,1])

'''
伯努利分佈官方使用文件:
https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.bernoulli.html#scipy.stats.bernoulli
'''
#第2步,#求對應分佈的概率:概率質量函式 (PMF)
#它返回一個列表,列表中每個元素表示隨機變數中對應值的概率
p = 0.5 # 硬幣朝上的概率
pList = stats.bernoulli.pmf(X,p)
pList

array([0.5,0.5])

#第3步,繪圖
'''
plot預設繪製折線,這裡我們只繪製點,所以傳入下面的引數:
marker:點的形狀,值o表示點為圓圈標記(circle marker)
linestyle:線條的形狀,值None表示不顯示連線各個點的折線
'''
plt.plot(X,pList,marker='o',linestyle='None')
'''
vlines用於繪製豎直線(vertical lines),引數說明:vline(x座標值,y座標最小值,y座標值最大值)
我們傳入的X是一個數組,是給陣列中的每個x座標值繪製豎直線,
豎直線y座標最小值是0,y座標值最大值是對應pList中的值
官網文件:https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.vlines
'''
plt.rcParams['font.sans-serif']=['SimHei'] 
plt.vlines(X,pList)
#x軸文字
plt.xlabel('隨機變數:拋硬幣1次')
#y軸文字
plt.ylabel('概率')
#標題
plt.title('伯努利分佈:p=%.2f' % p)
#顯示圖形
plt.show()

python 伯努利分佈詳解

以上這篇python 伯努利分佈詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。