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
二項分佈概率直方圖:
圖形特性:
當 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 伯努利分佈詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。