python算密度函數(shù) python計(jì)算概率密度

如何用Python實(shí)現(xiàn)“estimate the means and variances”

數(shù)據(jù)要擬合正態(tài)分布,實(shí)際上就是計(jì)算樣本的均值和偽方差,用這兩個(gè)數(shù)據(jù)直接帶入正態(tài)分布的概率密度函數(shù)。

岱山網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,岱山網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為岱山上1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的岱山做網(wǎng)站的公司定做!

所以代碼是很好寫的。

import numpy as np

from scipy.stats import norm

import matplotlib.pyplot as plt

m = np.mean(data)

s = np.std(data)

plt.plot(norm.pdf(data, m, s))

如何用python求出某已知正態(tài)分布的概率密度

算出平均值和標(biāo)準(zhǔn)差μ、σ,代入正態(tài)分布密度函數(shù)表達(dá)式:

f(x) = exp{-(x-μ)2/2σ2}/[√(2π)σ]

給定x值,即可算出f值。

如何根據(jù)概率密度函數(shù)生成隨機(jī)數(shù)

如何根據(jù)概率密度函數(shù)生成隨機(jī)數(shù)

我這里并不是要講“偽隨機(jī)”、“真隨機(jī)”這樣的問題,而是關(guān)于如何生成服從某個(gè)概率分布的隨機(jī)數(shù)(或者說 sample)的問題。比如,你想要從一個(gè)服從正態(tài)分布的隨機(jī)變量得到 100 個(gè)樣本,那么肯定抽到接近其均值的樣本的概率要大許多,從而導(dǎo)致抽到的樣本很多是集中在那附近的。當(dāng)然,要解決這個(gè)問題,我們通常都假設(shè)我們已經(jīng)有了一個(gè) 生成 0 到 1 之間均勻分布的隨機(jī)數(shù)的工具,就好像 random.org 給我們的結(jié)果那樣,事實(shí)上許多時(shí)候我們也并不太關(guān)心它們是真隨機(jī)數(shù)還是偽隨機(jī)數(shù),看起來差不多就行了。 :p

現(xiàn)在再回到我們的問題,看起來似乎是很簡(jiǎn)單的,按照概率分布的話,只要在概率密度大的地方多抽一些樣本不就行了嗎?可是具體要怎么做呢?要真動(dòng)起手 來,似乎有不是那么直觀了。實(shí)際上,這個(gè)問題曾經(jīng)也是困擾了我很久,最近又被人問起,那我們不妨在這里一起來總結(jié)一下。為了避免一下子就陷入抽象的公式推 導(dǎo),那就還是從一個(gè)簡(jiǎn)單的具體例子出發(fā)好了,假設(shè)我們要抽樣的概率分布其概率密度函數(shù)為 p(x) = \frac{1}{9}x^2 ,并且被限制在區(qū)間 [0, 3] 上,如右上圖所示。

好了,假設(shè)現(xiàn)在我們要抽 100 個(gè)服從這個(gè)分布的隨機(jī)數(shù),直觀上來講,抽出來的接近 3 的數(shù)字肯定要比接近 0 的數(shù)字要多。那究竟要怎樣抽才能得到這樣的結(jié)果呢?由于我們實(shí)際上是不能控制最原始的隨機(jī)數(shù)生成過程的,我們只能得到一組均勻分布的隨機(jī)數(shù),而這組隨機(jī)數(shù) 的生成過程對(duì)于我們完全是透明的,所以,我們能做的只有把這組均勻分布的隨機(jī)數(shù)做一些變換讓他符合我們的需求。找到下手的點(diǎn)了,可是究竟要怎樣變換呢?有 一個(gè)變換相信大家都是很熟悉的,假設(shè)我們有一組 [0,1] 之間的均勻分布的隨機(jī)數(shù) X_0 ,那么令 X_1=3X_0 的話,X_1 就是一組在 [0,3] 之間均勻分布的隨機(jī)數(shù)了,不難想象,X_1 等于某個(gè)數(shù) x^* 的概率就是 X_0 等于 x^*/3 的概率(“等于某個(gè)數(shù)的概率”這種說法對(duì)于連續(xù)型隨機(jī)變量來說其實(shí)是不合適的,不過大概可以理解所表達(dá)的意思啦)。似乎有一種可以“逆轉(zhuǎn)回去”的感覺了。

于是讓我們來考慮更一般的變換。首先,我們知道 X_1 的概率密度函數(shù)是 f(x) = 1/3, x\in[0,3] ,假設(shè)現(xiàn)在我們令 Y = \phi (X_1) ,不妨先假定 \phi(\cdot) 是嚴(yán)格單調(diào)遞增的函數(shù),這樣我們可以求其逆函數(shù) \phi^{-1}(\cdot) (也是嚴(yán)格單調(diào)遞增的)?,F(xiàn)在來看變換后的隨機(jī)變量 Y 會(huì)服從一個(gè)什么樣的分布呢?

這里需要小心,因?yàn)檫@里都是連續(xù)型的隨機(jī)變量,并不像離散型隨機(jī)變量那樣可以說成“等于某個(gè)值的概率”,因此我們需要轉(zhuǎn)換為概率分布函數(shù)來處理,也就是求一個(gè)積分啦:

\displaystyle F(x) = P(X \leq x) = \int_{-\infty}^x f(t)dt

那么 X_1 的概率分布函數(shù)為 F(x) = \frac{1}{3}x 。很顯然 Y 小于或等于某個(gè)特定的值 y^* 這件事情是等價(jià)于 X_1=\phi^{-1}(Y)\leq\phi^{-1}(y^*) 這件事情的。換句話說,P(Y\leq y^*) 等于 P(X_1 \leq \phi^{-1}(y^*)) 。于是,Y 的概率分布函數(shù)就可以得到了:

\displaystyle G(y) = P(Y \leq y) = P(X_1 \leq \phi^{-1}(y)) = F(\phi^{-1}(y))

再求導(dǎo)我們就能得到 Y 的概率密度函數(shù):

\displaystyle g(y) = \frac{dG(y)}{dy} = f(\phi^{-1}(y))\frac1u2qqhe{dy}\phi^{-1}(y)

這樣一來,我們就得到了對(duì)于一個(gè)隨機(jī)變量進(jìn)行一個(gè)映射 \phi(\cdot) 之后得到的隨即變量的分布,那么,回到我們剛才的問題,我們想讓這個(gè)結(jié)果分布就是我們所求的,然后再反推得 \phi(\cdot) 即可:

\displaystyle \frac{1}{9}y^2 = g(y) = f(\phi^{-1}(y))\fracagxsldx{dy}\phi^{-1}(y) = \frac{1}{3}\fraceyw6h12{dy}\phi^{-1}(y)

經(jīng)過簡(jiǎn)單的化簡(jiǎn)就可以得到 \phi^{-1}(y) = \frac{1}{9} y^3 ,亦即 \phi(x) = (9x)^{1/3} 。也就是說,把得到的隨機(jī)數(shù) X_1 帶入到到函數(shù) \phi(\cdot) 中所得到的結(jié)果,就是符合我們預(yù)期要求的隨機(jī)數(shù)啦! :D 讓我們來驗(yàn)證一下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

#!/usr/bin/python import numpy as np import matplotlib.pyplot as plot N = 10000 X0 = np.random.rand(N) X1 = 3*X0 Y = np.power(9*X1, 1.0/3) t = np.arange(0.0, 3.0, 0.01) y = t*t/9 plot.plot(t, y, 'r-', linewidth=1) plot.hist(Y, bins=50, normed=1, facecolor='green', alpha=0.75)plot.show()

這就沒錯(cuò)啦,目的達(dá)成啦!讓我們來總結(jié)一下。問題是這樣的,我們有一個(gè)服從均勻分布的隨機(jī)變量 X ,它的概率密度函數(shù)為一個(gè)常數(shù) f(x)=C ,如果是 [0,1] 上的分布,那么常數(shù) C 就直接等于 1 了。現(xiàn)在我們要得到一個(gè)隨機(jī)變量 Y 使其概率密度函數(shù)為 g(y) ,做法就是構(gòu)造出一個(gè)函數(shù) \phi(\cdot) 滿足(在這里加上了絕對(duì)值符號(hào),這是因?yàn)?\phi(\cdot) 如果不是遞增而是遞減的話,推導(dǎo)的過程中有一處就需要反過來)

\displaystyle g(y) = f(\phi^{-1}(y))\left|\fracdf62w51{dy}\phi^{-1}(y)\right| = C\left|\fracffqfgoz{dy}\phi^{-1}(y)\right|

反推過來就是,對(duì)目標(biāo) y 的概率密度函數(shù)求一個(gè)積分(其實(shí)就是得到它的概率分布函數(shù) CDF ,如果一開始就拿到的是 CDF 當(dāng)然更好),然后求其反函數(shù)就可以得到需要的變換 \phi(\cdot) 了。實(shí)際上,這種方法有一個(gè)聽起來稍微專業(yè)一點(diǎn)的名字:Inverse Transform Sampling Method 。不過,雖然看起來很簡(jiǎn)單,但是實(shí)際操作起來卻比較困難,因?yàn)閷?duì)于許多函數(shù)來說,求逆是比較困難的,求積分就更困難了,如果寫不出解析解,不得已只能用數(shù) 值方法來逼近的話,計(jì)算效率就很讓人擔(dān)心了。可事實(shí)上也是如此,就連我們最常見的一維標(biāo)準(zhǔn)正態(tài)分布,也很難用這樣的方法來抽樣,因?yàn)樗母怕拭芏群瘮?shù)

\displaystyle g(y) = \frac{1}{\sqrt{2\pi}}e^{-\frac{1}{2}y^2}

的不定積分沒有一個(gè)解析形式。這可真是一點(diǎn)也不好玩,費(fèi)了這么大勁,結(jié)果好像什么都干不了??磥磉@個(gè)看似簡(jiǎn)單的問題似乎還是比較復(fù)雜的,不過也不要灰心,至少對(duì)于高斯分布來說,我們還有一個(gè)叫做 Box Muller 的方法可以專門來做這個(gè)事情。因?yàn)楦咚狗植急容^奇怪,雖然一維的時(shí)候概率分布函數(shù)無法寫出解析式,但是二維的情況卻可以通過一些技巧得出一個(gè)解析式來。

首先我們來考慮一個(gè)二維的且兩個(gè)維度相互獨(dú)立的高斯分布,它的概率密度函數(shù)為

\displaystyle f(x,y) = \frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}\cdot\frac{1}{\sqrt{2\pi}}e^{-\frac{y^2}{2}} = \frac{1}{2\pi}e^{-\frac{x^2+y^2}{2}}

這個(gè)分布是關(guān)于原點(diǎn)對(duì)稱的,如果考慮使用極坐標(biāo) (\theta,r) (其中 \theta\in[0,2\pi), r\in[0,\infty) )的話,我們有 x = r\cos\theta,y=r\sin\theta 這樣的變換。這樣,概率密度函數(shù)是寫成:

\displaystyle f(\theta,r) = \frac{1}{2\pi}e^{-\frac{r^2}{2}}

注意到在給定 r 的情況下其概率密度是不依賴于 \theta 的,也就是說對(duì)于 \theta 來說是一個(gè)均勻分布,這和我們所了解的標(biāo)準(zhǔn)正態(tài)分布也是符合的:在一個(gè)圓上的點(diǎn)的概率是相等的。確定了 \theta 的分布,讓我們?cè)賮砜?r,用類似于前面的方法:

\displaystyle \begin{aligned} P(rR) = \int_0^{2\pi}\int_0^R\frac{1}{2\pi}e^{\frac{r^2}{2}}rdrd\theta \ = \int_0^Re^{-\frac{r^2}{2}}rdr \ = 1-e^{-\frac{R^2}{2}} \end{aligned}

根據(jù)前面得出的結(jié)論,我現(xiàn)在得到了 r 的概率分布函數(shù),是不是只要求一下逆就可以得到一個(gè) \phi(\cdot) 了?亦即 \phi(t) = \sqrt{-2\log (1-t)} 。

現(xiàn)在只要把這一些線索串起來,假設(shè)我們有兩個(gè)相互獨(dú)立的平均分布在 [0,1] 上的隨機(jī)變量 T_1 和 T_2 ,那么 2\pi T_1 就可以得到 \theta 了,而 \phi(T_2) = \sqrt{-2\log(1-T_2)} 就得到 r 了(實(shí)際上,由于 T_2 和 1-T_2 實(shí)際上是相同的分布,所以通常直接寫為 \sqrt{-2\log T_2})。再把極坐標(biāo)換回笛卡爾坐標(biāo):

\displaystyle \begin{aligned} x = r\cos\theta = \sqrt{-2\log T_2}\cdot \cos(2\pi T_1) \ y = r\sin\theta = \sqrt{-2\log T_2}\cdot \sin(2\pi T_1) \end{aligned}

這樣我們就能得到一個(gè)二維的正態(tài)分布的抽樣了。可以直觀地驗(yàn)證一下,二維不太好畫,就畫成 heatmap 了,看著比較熱的區(qū)域就是概率比較大的,程序如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

#!/usr/bin/python import numpy as np import matplotlib.pyplot as plot N = 50000 T1 = np.random.rand(N) T2 = np.random.rand(N) r = np.sqrt(-2*np.log(T2)) theta = 2*np.pi*T1 X = r*np.cos(theta) Y = r*np.sin(theta) heatmap, xedges, yedges = np.histogram2d(X, Y, bins=80) extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]] plot.imshow(heatmap, extent=extent) plot.show()

畫出來的圖像這個(gè)樣子:

不太好看,但是大概的形狀是可以看出來的。其實(shí)有了二維的高斯分布,再注意到兩個(gè)維度在我們這里是相互獨(dú)立的,那么直接取其中任意一個(gè)維度,就是一個(gè)一維高斯分布了。如下:

如果 X\sim N(0,1) 即服從標(biāo)準(zhǔn)正態(tài)分布的話,則有 \sigma X+\mu \sim N(\mu, \sigma^2) ,也就是說,有了標(biāo)準(zhǔn)正態(tài)分布,其他所有的正態(tài)分布的抽樣也都可以完成了。這下總算有點(diǎn)心滿意足了。不過別急,還有最后一個(gè)問題:多元高斯分布。一般最常 用不就是二元嗎?二元不是我們一開始就推出來了嗎?推出來了確實(shí)沒錯(cuò),不過我們考慮的是最簡(jiǎn)單的情形,當(dāng)然同樣可以通過 \sigma X+\mu 這樣的方式來處理每一個(gè)維度,不過高維的情形還有一個(gè)需要考慮的就是各個(gè)維度之間的相關(guān)性——我們之前處理的都是兩個(gè)維度相互獨(dú)立的情況。對(duì)于一般的多維正態(tài)分布 X\sim N(\mathbf{\mu}, \Sigma) ,如果各個(gè)維度之間是相互獨(dú)立的,就對(duì)應(yīng)于協(xié)方差矩陣 \Sigma 是一個(gè)對(duì)角陣,但是如果 \Sigma 在非對(duì)角線的地方存在非零元素的話,就說明對(duì)應(yīng)的兩個(gè)維度之間存在相關(guān)性。

這個(gè)問題還是比較好解決的,高斯分布有這樣的性質(zhì):類似于一維的情況,對(duì)于多維正態(tài)分布 X\sim N(\mathbf{\mu}, \Sigma),那么新的隨機(jī)變量 X_1=\mathbf{\mu}_1 + LX 將會(huì)滿足

\displaystyle X_1 \sim N(\mathbf{\mu}_1+L\mu, L\Sigma L^T)

所以,對(duì)于一個(gè)給定的高斯分布 N(\mathbf{\mu}, \Sigma) 來說,只要先生成一個(gè)對(duì)應(yīng)維度的標(biāo)準(zhǔn)正態(tài)分布 X\sim N(0, I) ,然后令 X_1 = \mu+LX 即可,其中 L 是對(duì) \Sigma 進(jìn)行 Cholesky Decomposition 的結(jié)果,即 \Sigma = LL^T 。

結(jié)束之前讓我們來看看 matlab 畫個(gè) 3D 圖來改善一下心情:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

N = 50000; T1 = rand(1, N); T2 = rand(1, N); r = sqrt(-2*log(T2)); theta = 2*pi*T1; X =[r.*cos(theta); r.*sin(theta)]; mu = [1; 2]; Sigma = [5 2; 2 1]; L = chol(Sigma); X1 = repmat(mu,1, N) + L*X; nbin = 30; hist3(X1', [nbin nbin]); set(gcf, 'renderer', 'opengl'); set(get(gca,'child'), 'FaceColor', 'interp', 'CDataMode', 'auto'); [z c] = hist3(X1', [nbin nbin]); [x y] =meshgrid(c{1}, c{2}); figure; surfc(x,y,-z);

下面兩幅圖,哪幅好看一些(注意坐標(biāo)比例不一樣,所以看不出形狀和旋轉(zhuǎn)了)?似乎都不太好看,不過感覺還是比前面的 heatmap 要好一點(diǎn)啦!

然后,到這里為止,我們算是把高斯分布弄清楚了,不過這只是給一個(gè)介紹性的東西,里面的數(shù)學(xué)推導(dǎo)也并不嚴(yán)格,而 Box Muller 也并不是最高效的高斯采樣的算法,不過,就算我們不打算再深入討論高斯采樣,采樣這個(gè)問題本身也還有許多不盡人意的地方,我們推導(dǎo)出來的結(jié)論可以說只能用 于一小部分簡(jiǎn)單的分布,連高斯分布都要通過 trick 來解決,另一些本身連概率密度函數(shù)都寫不出來或者有各種奇怪?jǐn)?shù)學(xué)特性的分布就更難處理了。所以本文的標(biāo)題里也說了,這是上篇,如果什么時(shí)候有機(jī)會(huì)抽出時(shí)間 來寫下篇的話,我將會(huì)介紹一些更加通用和強(qiáng)大的方法,諸如 Rejection Sampling 、Gibbs Sampling 以及 Markov Chain Monte Carlo (MCMC) 等方法。如果你比較感興趣,可以先自行 Google 一下解饞! :D

如何在Python中實(shí)現(xiàn)這五類強(qiáng)大的概率分布

概率分布有兩種類型:離散(discrete)概率分布和連續(xù)(continuous)概率分布。

離散概率分布也稱為概率質(zhì)量函數(shù)(probability mass function)。離散概率分布的例子有伯努利分布(Bernoulli distribution)、二項(xiàng)分布(binomial distribution)、泊松分布(Poisson distribution)和幾何分布(geometric distribution)等。

連續(xù)概率分布也稱為概率密度函數(shù)(probability density function),它們是具有連續(xù)取值(例如一條實(shí)線上的值)的函數(shù)。正態(tài)分布(normal distribution)、指數(shù)分布(exponential distribution)和β分布(beta distribution)等都屬于連續(xù)概率分布。

若想了解更多關(guān)于離散和連續(xù)隨機(jī)變量的知識(shí),你可以觀看可汗學(xué)院關(guān)于概率分布的視頻。

統(tǒng)計(jì)學(xué)入門級(jí):常見概率分布+python繪制分布圖

如果隨機(jī)變量X的所有取值都可以逐個(gè)列舉出來,則稱X為離散型隨機(jī)變量。相應(yīng)的概率分布有二項(xiàng)分布,泊松分布。

如果隨機(jī)變量X的所有取值無法逐個(gè)列舉出來,而是取數(shù)軸上某一區(qū)間內(nèi)的任一點(diǎn),則稱X為連續(xù)型隨機(jī)變量。相應(yīng)的概率分布有正態(tài)分布,均勻分布,指數(shù)分布,伽馬分布,偏態(tài)分布,卡方分布,beta分布等。(真多分布,好恐怖~~)

在離散型隨機(jī)變量X的一切可能值中,各可能值與其對(duì)應(yīng)概率的乘積之和稱為該隨機(jī)變量X的期望值,記作E(X) 。比如有隨機(jī)變量,取值依次為:2,2,2,4,5。求其平均值:(2+2+2+4+5)/5 = 3。

期望值也就是該隨機(jī)變量總體的均值。 推導(dǎo)過程如下:

= (2+2+2+4+5)/5

= 1/5 2 3 + 4/5 + 5/5

= 3/5 2 + 1/5 4 + 1/5 5

= 0.6 2 + 0.2 4 + 0.2 5

= 60% 2 + 20% 4 + 20%*5

= 1.2 + 0.8 + 1

= 3

倒數(shù)第三步可以解釋為值為2的數(shù)字出現(xiàn)的概率為60%,4的概率為20%,5的概率為20%。 所以E(X) = 60% 2 + 20% 4 + 20%*5 = μ = 3。

0-1分布(兩點(diǎn)分布),它的隨機(jī)變量的取值為1或0。即離散型隨機(jī)變量X的概率分布為:P{X=0} = 1-p, P{X=1} = p,即:

則稱隨機(jī)變量X服從參數(shù)為p的0-1分布,記作X~B(1,p)。

在生活中有很多例子服從兩點(diǎn)分布,比如投資是否中標(biāo),新生嬰兒是男孩還是女孩,檢查產(chǎn)品是否合格等等。

大家非常熟悉的拋硬幣試驗(yàn)對(duì)應(yīng)的分布就是二項(xiàng)分布。拋硬幣試驗(yàn)要么出現(xiàn)正面,要么就是反面,只包含這兩個(gè)結(jié)果。出現(xiàn)正面的次數(shù)是一個(gè)隨機(jī)變量,這種隨機(jī)變量所服從的概率分布通常稱為 二項(xiàng)分布 。

像拋硬幣這類試驗(yàn)所具有的共同性質(zhì)總結(jié)如下:(以拋硬幣為例)

通常稱具有上述特征的n次重復(fù)獨(dú)立試驗(yàn)為n重伯努利試驗(yàn)。簡(jiǎn)稱伯努利試驗(yàn)或伯努利試驗(yàn)概型。特別地,當(dāng)試驗(yàn)次數(shù)為1時(shí),二項(xiàng)分布服從0-1分布(兩點(diǎn)分布)。

舉個(gè)栗子:拋3次均勻的硬幣,求結(jié)果出現(xiàn)有2個(gè)正面的概率 。

已知p = 0.5 (出現(xiàn)正面的概率) ,n = 3 ,k = 2

所以拋3次均勻的硬幣,求結(jié)果出現(xiàn)有2個(gè)正面的概率為3/8。

二項(xiàng)分布的期望值和方差 分別為:

泊松分布是用來描述在一 指定時(shí)間范圍內(nèi)或在指定的面積或體積之內(nèi)某一事件出現(xiàn)的次數(shù)的分布 。生活中服從泊松分布的例子比如有每天房產(chǎn)中介接待的客戶數(shù),某微博每月出現(xiàn)服務(wù)器癱瘓的次數(shù)等等。 泊松分布的公式為 :

其中 λ 為給定的時(shí)間間隔內(nèi)事件的平均數(shù),λ = np。e為一個(gè)數(shù)學(xué)常數(shù),一個(gè)無限不循環(huán)小數(shù),其值約為2.71828。

泊松分布的期望值和方差 分別為:

使用Python繪制泊松分布的概率分布圖:

因?yàn)檫B續(xù)型隨機(jī)變量可以取某一區(qū)間或整個(gè)實(shí)數(shù)軸上的任意一個(gè)值,所以通常用一個(gè)函數(shù)f(x)來表示連續(xù)型隨機(jī)變量,而f(x)就稱為 概率密度函數(shù) 。

概率密度函數(shù)f(x)具有如下性質(zhì) :

需要注意的是,f(x)不是一個(gè)概率,即f(x) ≠ P(X = x) 。在連續(xù)分布的情況下,隨機(jī)變量X在a與b之間的概率可以寫成:

正態(tài)分布(或高斯分布)是連續(xù)型隨機(jī)變量的最重要也是最常見的分布,比如學(xué)生的考試成績(jī)就呈現(xiàn)出正態(tài)分布的特征,大部分成績(jī)集中在某個(gè)范圍(比如60-80分),很小一部分往兩端傾斜(比如50分以下和90多分以上)。還有人的身高等等。

正態(tài)分布的定義 :

如果隨機(jī)變量X的概率密度為( -∞x+∞):

則稱X服從正態(tài)分布,記作X~N(μ,σ2)。其中-∞μ+∞,σ0, μ為隨機(jī)變量X的均值,σ為隨機(jī)變量X的標(biāo)準(zhǔn)差。 正態(tài)分布的分布函數(shù)

正態(tài)分布的圖形特點(diǎn) :

使用Python繪制正態(tài)分布的概率分布圖:

正態(tài)分布有一個(gè)3σ準(zhǔn)則,即數(shù)值分布在(μ-σ,μ+σ)中的概率為0.6827,分布在(μ-2σ,μ+2σ)中的概率為0.9545,分布在(μ-3σ,μ+3σ)中的概率為0.9973,也就是說大部分?jǐn)?shù)值是分布在(μ-3σ,μ+3σ)區(qū)間內(nèi),超出這個(gè)范圍的可能性很小很小,僅占不到0.3%,屬于極個(gè)別的小概率事件,所以3σ準(zhǔn)則可以用來檢測(cè)異常值。

當(dāng)μ=0,σ=1時(shí),有

此時(shí)的正態(tài)分布N(0,1) 稱為標(biāo)準(zhǔn)正態(tài)分布。因?yàn)棣?,σ都是確定的取值,所以其對(duì)應(yīng)的概率密度曲線是一條 形態(tài)固定 的曲線。

對(duì)標(biāo)準(zhǔn)正態(tài)分布,通常用φ(x)表示概率密度函數(shù),用Φ(x)表示分布函數(shù):

假設(shè)有一次物理考試特別難,滿分100分,全班只有大概20個(gè)人及格。與此同時(shí)語文考試很簡(jiǎn)單,全班絕大部分都考了90分以上。小明的物理和語文分別考了60分和80分,他回家后告訴家長(zhǎng),這時(shí)家長(zhǎng)能僅僅從兩科科目的分值直接判斷出這次小明的語文成績(jī)要比物理好很多嗎?如果不能,應(yīng)該如何判斷呢?此時(shí)Z-score就派上用場(chǎng)了。 Z-Score的計(jì)算定義 :

即 將隨機(jī)變量X先減去總體樣本均值,再除以總體樣本標(biāo)準(zhǔn)差就得到標(biāo)準(zhǔn)分?jǐn)?shù)啦。如果X低于平均值,則Z為負(fù)數(shù),反之為正數(shù) 。通過計(jì)算標(biāo)準(zhǔn)分?jǐn)?shù),可以將任何一個(gè)一般的正態(tài)分布轉(zhuǎn)化為標(biāo)準(zhǔn)正態(tài)分布。

小明家長(zhǎng)從老師那得知物理的全班平均成績(jī)?yōu)?0分,標(biāo)準(zhǔn)差為10,而語文的平均成績(jī)?yōu)?2分,標(biāo)準(zhǔn)差為4。分別計(jì)算兩科成績(jī)的標(biāo)準(zhǔn)分?jǐn)?shù):

物理:標(biāo)準(zhǔn)分?jǐn)?shù) = (60-40)/10 = 2

語文:標(biāo)準(zhǔn)分?jǐn)?shù) = (85-95)/4 = -2.5

從計(jì)算結(jié)果來看,說明這次考試小明的物理成績(jī)?cè)谌客瑢W(xué)中算是考得很不錯(cuò)的,而語文考得很差。

指數(shù)分布可能容易和前面的泊松分布混淆,泊松分布強(qiáng)調(diào)的是某段時(shí)間內(nèi)隨機(jī)事件發(fā)生的次數(shù)的概率分布,而指數(shù)分布說的是 隨機(jī)事件發(fā)生的時(shí)間間隔 的概率分布。比如一班地鐵進(jìn)站的間隔時(shí)間。如果隨機(jī)變量X的概率密度為:

則稱X服從指數(shù)分布,其中的參數(shù)λ0。 對(duì)應(yīng)的分布函數(shù) 為:

均勻分布的期望值和方差 分別為:

使用Python繪制指數(shù)分布的概率分布圖:

均勻分布有兩種,分為 離散型均勻分布和連續(xù)型均勻分布 。其中離散型均勻分布最常見的例子就是拋擲骰子啦。拋擲骰子出現(xiàn)的點(diǎn)數(shù)就是一個(gè)離散型隨機(jī)變量,點(diǎn)數(shù)可能有1,2,3,4,5,6。每個(gè)數(shù)出現(xiàn)的概率都是1/6。

設(shè)連續(xù)型隨機(jī)變量X具有概率密度函數(shù):

則稱X服從區(qū)間(a,b)上的均勻分布。X在等長(zhǎng)度的子區(qū)間內(nèi)取值的概率相同。對(duì)應(yīng)的分布函數(shù)為:

f(x)和F(x)的圖形分別如下圖所示:

均勻分布的期望值和方差 分別為:

如何使用python做統(tǒng)計(jì)分析

Shape Parameters

形態(tài)參數(shù)

While a general continuous random variable can be shifted and scaled

with the loc and scale parameters, some distributions require additional

shape parameters. For instance, the gamma distribution, with density

γ(x,a)=λ(λx)a?1Γ(a)e?λx,

requires the shape parameter a. Observe that setting λ can be obtained by setting the scale keyword to 1/λ.

雖然一個(gè)一般的連續(xù)隨機(jī)變量可以被位移和伸縮通過loc和scale參數(shù),但一些分布還需要額外的形態(tài)參數(shù)。作為例子,看到這個(gè)伽馬分布,這是它的密度函數(shù)

γ(x,a)=λ(λx)a?1Γ(a)e?λx,

要求一個(gè)形態(tài)參數(shù)a。注意到λ的設(shè)置可以通過設(shè)置scale關(guān)鍵字為1/λ進(jìn)行。

Let’s check the number and name of the shape parameters of the gamma

distribution. (We know from the above that this should be 1.)

讓我們檢查伽馬分布的形態(tài)參數(shù)的名字的數(shù)量。(我們知道從上面知道其應(yīng)該為1)

from scipy.stats import gamma

gamma.numargs

1

gamma.shapes

'a'

Now we set the value of the shape variable to 1 to obtain the

exponential distribution, so that we compare easily whether we get the

results we expect.

現(xiàn)在我們?cè)O(shè)置形態(tài)變量的值為1以變成指數(shù)分布。所以我們可以容易的比較是否得到了我們所期望的結(jié)果。

gamma(1, scale=2.).stats(moments="mv")

(array(2.0), array(4.0))

Notice that we can also specify shape parameters as keywords:

注意我們也可以以關(guān)鍵字的方式指定形態(tài)參數(shù):

gamma(a=1, scale=2.).stats(moments="mv")

(array(2.0), array(4.0))

Freezing a Distribution

凍結(jié)分布

Passing the loc and scale keywords time and again can become quite

bothersome. The concept of freezing a RV is used to solve such problems.

不斷地傳遞loc與scale關(guān)鍵字最終會(huì)讓人厭煩。而凍結(jié)RV的概念被用來解決這個(gè)問題。

rv = gamma(1, scale=2.)

By using rv we no longer have to include the scale or the shape

parameters anymore. Thus, distributions can be used in one of two ways,

either by passing all distribution parameters to each method call (such

as we did earlier) or by freezing the parameters for the instance of the

distribution. Let us check this:

通過使用rv我們不用再更多的包含scale與形態(tài)參數(shù)在任何情況下。顯然,分布可以被多種方式使用,我們可以通過傳遞所有分布參數(shù)給對(duì)方法的每次調(diào)用(像我們之前做的那樣)或者可以對(duì)一個(gè)分布對(duì)象凍結(jié)參數(shù)。讓我們看看是怎么回事:

rv.mean(), rv.std()

(2.0, 2.0)

This is indeed what we should get.

這正是我們應(yīng)該得到的。

Broadcasting

廣播

The basic methods pdf and so on satisfy the usual numpy broadcasting

rules. For example, we can calculate the critical values for the upper

tail of the t distribution for different probabilites and degrees of

freedom.

像pdf這樣的簡(jiǎn)單方法滿足numpy的廣播規(guī)則。作為例子,我們可以計(jì)算t分布的右尾分布的臨界值對(duì)于不同的概率值以及自由度。

stats.t.isf([0.1, 0.05, 0.01], [[10], [11]])

array([[ 1.37218364, 1.81246112, 2.76376946],

[ 1.36343032, 1.79588482, 2.71807918]])

Here, the first row are the critical values for 10 degrees of freedom

and the second row for 11 degrees of freedom (d.o.f.). Thus, the

broadcasting rules give the same result of calling isf twice:

這里,第一行是以10自由度的臨界值,而第二行是以11為自由度的臨界值。所以,廣播規(guī)則與下面調(diào)用了兩次isf產(chǎn)生的結(jié)果相同。

stats.t.isf([0.1, 0.05, 0.01], 10)

array([ 1.37218364, 1.81246112, 2.76376946])

stats.t.isf([0.1, 0.05, 0.01], 11)

array([ 1.36343032, 1.79588482, 2.71807918])

If the array with probabilities, i.e, [0.1, 0.05, 0.01] and the array of

degrees of freedom i.e., [10, 11, 12], have the same array shape, then

element wise matching is used. As an example, we can obtain the 10% tail

for 10 d.o.f., the 5% tail for 11 d.o.f. and the 1% tail for 12 d.o.f.

by calling

但是如果概率數(shù)組,如[0.1,0.05,0.01]與自由度數(shù)組,如[10,11,12]具有相同的數(shù)組形態(tài),則元素對(duì)應(yīng)捕捉被作用,我們可以分別得到10%,5%,1%尾的臨界值對(duì)于10,11,12的自由度。

stats.t.isf([0.1, 0.05, 0.01], [10, 11, 12])

array([ 1.37218364, 1.79588482, 2.68099799])

Specific Points for Discrete Distributions

離散分布的特殊之處

Discrete distribution have mostly the same basic methods as the

continuous distributions. However pdf is replaced the probability mass

function pmf, no estimation methods, such as fit, are available, and

scale is not a valid keyword parameter. The location parameter, keyword

loc can still be used to shift the distribution.

離散分布的簡(jiǎn)單方法大多數(shù)與連續(xù)分布很類似。當(dāng)然像pdf被更換為密度函數(shù)pmf,沒有估計(jì)方法,像fit是可用的。而scale不是一個(gè)合法的關(guān)鍵字參數(shù)。Location參數(shù),關(guān)鍵字loc則仍然可以使用用于位移。

The computation of the cdf requires some extra attention. In the case of

continuous distribution the cumulative distribution function is in most

standard cases strictly monotonic increasing in the bounds (a,b) and

has therefore a unique inverse. The cdf of a discrete distribution,

however, is a step function, hence the inverse cdf, i.e., the percent

point function, requires a different definition:

ppf(q) = min{x : cdf(x) = q, x integer}

Cdf的計(jì)算要求一些額外的關(guān)注。在連續(xù)分布的情況下,累積分布函數(shù)在大多數(shù)標(biāo)準(zhǔn)情況下是嚴(yán)格遞增的,所以有唯一的逆。而cdf在離散分布,無論如何,是階躍函數(shù),所以cdf的逆,分位點(diǎn)函數(shù),要求一個(gè)不同的定義:

ppf(q) = min{x : cdf(x) = q, x integer}

For further info, see the docs here.

為了更多信息可以看這里。

We can look at the hypergeometric distribution as an example

from scipy.stats import hypergeom

[M, n, N] = [20, 7, 12]

我們可以看這個(gè)超幾何分布的例子

from scipy.stats import hypergeom

[M, n, N] = [20, 7, 12]

If we use the cdf at some integer points and then evaluate the ppf at

those cdf values, we get the initial integers back, for example

如果我們使用在一些整數(shù)點(diǎn)使用cdf,它們的cdf值再作用ppf會(huì)回到開始的值。

x = np.arange(4)*2

x

array([0, 2, 4, 6])

prb = hypergeom.cdf(x, M, n, N)

prb

array([ 0.0001031991744066, 0.0521155830753351, 0.6083591331269301,

0.9897832817337386])

hypergeom.ppf(prb, M, n, N)

array([ 0., 2., 4., 6.])

If we use values that are not at the kinks of the cdf step function, we get the next higher integer back:

如果我們使用的值不是cdf的函數(shù)值,則我們得到一個(gè)更高的值。

hypergeom.ppf(prb + 1e-8, M, n, N)

array([ 1., 3., 5., 7.])

hypergeom.ppf(prb - 1e-8, M, n, N)

array([ 0., 2., 4., 6.])

新聞名稱:python算密度函數(shù) python計(jì)算概率密度
網(wǎng)站地址:http://www.muchs.cn/article20/doocgco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈網(wǎng)站改版、網(wǎng)站維護(hù)、關(guān)鍵詞優(yōu)化App開發(fā)、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營