機率論中常見分佈總結以及python的scipy庫使用:兩點分佈、二項分佈、幾何分佈、泊松分佈、均勻分佈、指數分佈、正態分佈html
機率分佈有兩種類型:離散(discrete)機率分佈和連續(continuous)機率分佈。python
離散機率分佈也稱爲機率質量函數(probability mass function)。離散機率分佈的例子有伯努利分佈(Bernoulli distribution)、二項分佈(binomial distribution)、泊松分佈(Poisson distribution)和幾何分佈(geometric distribution)等。函數
連續機率分佈也稱爲機率密度函數(probability density function),它們是具備連續取值(例如一條實線上的值)的函數。正態分佈(normal distribution)、指數分佈(exponential distribution)和β分佈(beta distribution)等都屬於連續機率分佈。spa
一、兩點分佈(伯努利分佈)code
伯努利試驗:orm
伯努利試驗是在一樣的條件下重複地、各次之間相互獨立地進行的一種試驗。htm
即只先進行一次伯努利試驗,該事件發生的機率爲p,不發生的機率爲1-p。這是一個最簡單的分佈,任何一個只有兩種結果的隨機現象都服從0-1分佈。blog
最多見的例子爲拋硬幣事件
其中,ip
指望E = p
方差D = p*(1-p)^2+(1-p)*(0-p)^2 = p*(1-p)
二、二項分佈(n重伯努利分佈)(X~B(n,p))
即作n個兩點分佈的實驗
其中,
E = np
D = np(1-p)
對於二項分佈,能夠參考https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.binom.html
二項分佈的應用場景主要是,對於已知次數n,關心發生k次成功。
,即爲二項分佈公式可求。
對於拋硬幣的問題,作100次實驗,觀察其機率分佈函數:
# -*- coding: utf-8 -*- from scipy.stats import binom import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np ## 設置屬性防止中文亂碼 mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = False fig,ax = plt.subplots(1,1) n = 100 p = 0.5 #平均值, 方差, 偏度, 峯度 mean,var,skew,kurt = binom.stats(n,p,moments='mvsk') print (mean,var,skew,kurt) #ppf:累積分佈函數的反函數。q=0.01時,ppf就是p(X<x)=0.01時的x值。 x = np.arange(binom.ppf(0.01, n, p),binom.ppf(0.99, n, p)) ax.plot(x, binom.pmf(x, n, p),'o') plt.title(u'二項分佈機率質量函數') plt.show()
首先導入庫函數以及設置對中文的支持
觀察機率分佈圖,能夠看到,對於n = 100次實驗中,有50次成功的機率(正面向上)的機率最大。
三、幾何分佈(X ~ GE(p))
在n次伯努利實驗中,第k次實驗才獲得第一次成功的機率分佈。其中:P(k) = (1-p)^(k-1)*p
E = 1/p 推到方法就是利用利用錯位相減法而後求lim - k ->無窮
D = (1-p)/p^2 推到方法利用了D(x) = E(x)^2-E(x^2),其中E(x^2)求解同上
幾何分佈能夠參考:https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.geom.html#scipy.stats.geom
# -*- coding: utf-8 -*- from scipy.stats import geom import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np ## 設置屬性防止中文亂碼 mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = False fig,ax = plt.subplots(1,1) p = 0.5 #平均值, 方差, 偏度, 峯度 mean,var,skew,kurt = geom.stats(p,moments='mvsk') print (mean,var,skew,kurt) #ppf:累積分佈函數的反函數。q=0.01時,ppf就是p(X<x)=0.01時的x值。 x = np.arange(geom.ppf(0.01, p),geom.ppf(0.99, p)) ax.plot(x, geom.pmf(x, p),'o') plt.title(u'幾何分佈機率質量函數') plt.show()
所以,能夠看到,對於拋硬幣問題,拋個兩三次就能成功。
四、泊松分佈(X~P(λ))
描述單位時間/面積內,隨機事件發生的次數。P(x = k) = λ^k/k!*e^(-λ) k = 0,1,2, ... λ >0
泊松分佈可做爲二項分佈的極限而獲得。通常的說,若 ,其中n很大,p很小,於是 不太大時,X的分佈接近於泊松分佈 。
λ:單位時間/面積下,隨機事件的平均發生率
E = λ
D = λ
譬如:某一服務設施必定時間內到達的人數、一個月內機器損壞的次數等。
假設某地區,一年中發生槍擊案的平均次數爲2。
# -*- coding: utf-8 -*- from scipy.stats import poisson import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np ## 設置屬性防止中文亂碼 mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = False fig,ax = plt.subplots(1,1) mu = 2 #平均值, 方差, 偏度, 峯度 mean,var,skew,kurt = poisson.stats(mu,moments='mvsk') print (mean,var,skew,kurt) #ppf:累積分佈函數的反函數。q=0.01時,ppf就是p(X<x)=0.01時的x值。 x = np.arange(poisson.ppf(0.01, mu),poisson.ppf(0.99, mu)) ax.plot(x, poisson.pmf(x, mu),'o') plt.title(u'poisson分佈機率質量函數') plt.show()
所以,一年內的槍擊案發生次數的分佈如上所示。
與二項分佈對比:
# -*- coding: utf-8 -*- from scipy.stats import binom from scipy.stats import poisson import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np ## 設置屬性防止中文亂碼 mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = False fig,ax = plt.subplots(1,1) n = 100 p = 0.1 #平均值, 方差, 偏度, 峯度 mean,var,skew,kurt = binom.stats(n,p,moments='mvsk') print (mean,var,skew,kurt) #ppf:累積分佈函數的反函數。q=0.01時,ppf就是p(X<x)=0.01時的x值。 x = np.arange(binom.ppf(0.01, n, p),binom.ppf(0.99, n, p)) p1, = ax.plot(x, binom.pmf(x, n, p),'b*',label = 'binom') mu = n * p # 平均值, 方差, 偏度, 峯度 mean, var, skew, kurt = poisson.stats(mu, moments='mvsk') print (mean,var,skew,kurt) # ppf:累積分佈函數的反函數。q=0.01時,ppf就是p(X<x)=0.01時的x值。 x = np.arange(poisson.ppf(0.01, mu), poisson.ppf(0.99, mu)) p2, = ax.plot(x, poisson.pmf(x, mu), 'ro', label='poisson') plt.legend(handles=[p1, p2]) plt.title(u'對比') plt.show()
五、均勻分佈(X~U(a,b))
對於隨機變量x的機率密度函數:
則稱隨機變量X服從區間[a,b]上的均勻分佈。
E = 0.5(a+b)
D = (b-a)^2 / 12
均勻分佈在天然狀況下極爲罕見,而人工栽培的有必定株行距的植物羣落便是均勻分佈。這代表X落在[a,b]的子區間內的機率只與子區間長度有關,而與子區間位置無關,所以X落在[a,b]的長度相等的子區間內的可能性是相等的,所謂的均勻指的就是這種等可能性。
落在某一點的機率都是相同的
若[x1,x2]是[a,b]的任一子區間,則
P{x1≤x≤x2}=(x2-x1)/(b-a)
這代表X落在[a,b]的子區間內的機率只與子區間長度有關,而與子區間位置無關。
# -*- coding: utf-8 -*- from scipy.stats import uniform import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np ## 設置屬性防止中文亂碼 mpl.rcParams['font.sans-serif'] = [u'SimHei'] mpl.rcParams['axes.unicode_minus'] = False fig, ax = plt.subplots(1, 1) loc = 1 scale = 1 # 平均值, 方差, 偏度, 峯度 mean, var, skew, kurt = uniform.stats(loc, scale, moments='mvsk') print (mean,var,skew,kurt) # ppf:累積分佈函數的反函數。q=0.01時,ppf就是p(X<x)=0.01時的x值。 x = np.linspace(uniform.ppf(0.01, loc, scale), uniform.ppf(0.99, loc, scale), 100) ax.plot(x, uniform.pdf(x, loc, scale), 'b-', label='uniform') plt.title(u'均勻分佈機率密度函數') plt.show()
六、指數分佈X~ E(λ)
E = 1/λ
D = 1/λ^2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
指數分佈一般用來表示隨機事件發生的時間間隔,其中lambda和poisson分佈的是一個概念(我認爲),不知道爲何知乎上:https://www.zhihu.com/question/24796044,他們爲啥說這倆不同呢?我以爲這兩種分佈的指望確定不同啊,一個描述發生次數,一個描述兩次的時間間隔,互爲倒數也是應該的啊。
指數分佈經常使用來表示旅客進機場的時間間隔、電子產品的壽命分佈(須要高穩定的產品,現實中要考慮老化的問題)
指數分佈的特性:無記憶性
好比燈泡的使用壽命服從指數分佈,不管他已經使用多長一段時間,假設爲s,只要尚未損壞,它能再使用一段時間t 的機率與一件新產品使用時間t 的機率同樣。
這個證實過程簡單表示:
P(s+t| s) = P(s+t , s)/P(s) = F(s+t)/F(s)=P(t)
七、正態分佈(X~N(μ,σ^2))
E = μ
D = σ^2
正態分佈是比較常見的,譬如學生考試成績的人數分佈等
fig,ax = plt.subplots(1,1) loc = 1 scale = 2.0 #平均值, 方差, 偏度, 峯度 mean,var,skew,kurt = norm.stats(loc,scale,moments='mvsk') print mean,var,skew,kurt #ppf:累積分佈函數的反函數。q=0.01時,ppf就是p(X<x)=0.01時的x值。 x = np.linspace(norm.ppf(0.01,loc,scale),norm.ppf(0.99,loc,scale),100) ax.plot(x, norm.pdf(x,loc,scale),'b-',label = 'norm') plt.title(u'正太分佈機率密度函數') plt.show()
補充:
大數定理:
隨着樣本的增長,樣本的平均數將接近於整體的平均數,故推斷中,通常會使用樣本平均數估計整體平均數。
大數定律講的是樣本均值收斂到整體均值
中心極限定理:
獨立同分布的事件,具備相同的指望和方差,則事件服從中心極限定理。他表示了對於抽取樣本,n足夠大的時候,樣本分佈符合x~N(μ,σ^2)
中心極限定理告訴咱們,當樣本量足夠大時,樣本均值的分佈慢慢變成正態分佈