日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python 二项分布_二项分布的理论基础、应用及Python实践

發(fā)布時(shí)間:2023/11/30 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 二项分布_二项分布的理论基础、应用及Python实践 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

二項(xiàng)分布是概率統(tǒng)計(jì)中非常基礎(chǔ)、非常實(shí)用的一種分布,可以說它在我們的生活中無所不在。它說明了這樣一種現(xiàn)象:在給定的試驗(yàn)次數(shù)中,某一結(jié)果會(huì)發(fā)生多少次。

比如:

這個(gè)月有多少天會(huì)刮北風(fēng)?

今年有多少天會(huì)下雨?

經(jīng)過一個(gè)路口100次,有多少次會(huì)是綠燈?

一年之中會(huì)有多少次出門就見狗?

伯努利分布

伯努利分布是二項(xiàng)分布的基礎(chǔ),它只有兩種狀態(tài),比如拋硬幣的時(shí)候,結(jié)果只有正面和反面兩種情況,且兩種情況的概率之和為1。也就是說,當(dāng)我們給定正面朝上的概率的時(shí)候,這個(gè)分布的一切就都確定了。

我們以0和1來標(biāo)識(shí)這兩種可能的結(jié)果,那么其概率函數(shù)為:

那么其期望值為:

其方差為:

排列組合

1. 排列

從n個(gè)對(duì)象中有序地挑選出r個(gè)對(duì)象,我們稱之為排列,我們用以下公式統(tǒng)計(jì)其可能產(chǎn)生的排列數(shù):

2. 組合

考慮另一種情況,仍然是從n個(gè)對(duì)象中抽取r個(gè)對(duì)象,但是這次我們不考慮其順序,這種過程我們稱之為組合。我們用以下公式統(tǒng)計(jì)其可能產(chǎn)生的組合數(shù):

可以看出,這是n選r的排列數(shù)除以r的排列數(shù)。上述公式又被稱作二項(xiàng)系數(shù),通常用“n選r”表示。

3. Python計(jì)算

那么接下來我們用Python來寫一個(gè)函數(shù),用來計(jì)算不同參數(shù)下的排列與組合的數(shù)量。在排列組合的計(jì)算中,我們可能會(huì)輸入兩個(gè)參數(shù):總樣本量n、需要抽取的樣本數(shù)k。

那么我們就定義如下函數(shù):

from functools import reducedef PC(n, k): """ 計(jì)算并返回排列組合數(shù) """ # 非法輸入返回空 if n <= 0 or k < 0 or n < k: print('Wrong Input!') return None # k為0時(shí),排列組合的情況恒為1 if k == 0: return 1, 1 # 生成正序及倒序的序列 series_asc = list(range(1, n+1)) series_desc = sorted(series_asc, reverse=True) # 排列 permutation = reduce(lambda x, y: x*y, series_desc[:k]) # 組合 perm2 = reduce(lambda x, y: x*y, series_asc[:k]) combination = int(permutation / perm2) return permutation, combination

隨手測試幾個(gè):

for n in range(1, 5): for k in range(1, 3): print('-'*10) print(n, k) print(PC(n, k))

結(jié)果是正確的:

----------1 1(1, 1)----------1 2Wrong Input!None----------2 1(2, 2)----------2 2(2, 1)----------3 1(3, 3)----------3 2(6, 3)----------4 1(4, 4)----------4 2(12, 6)

二項(xiàng)分布

回顧伯努利分布的情況:一次實(shí)驗(yàn)只有可能有兩種結(jié)果,分別用0和1來表示,其中結(jié)果1發(fā)生的概率為p。那么在n次獨(dú)立實(shí)驗(yàn)中,不考慮順序的情況下,結(jié)果1出現(xiàn)k次的概率是多少?

首先,因?yàn)閚次實(shí)驗(yàn)相互獨(dú)立,所以根據(jù)乘法定律,任何一種結(jié)果1出現(xiàn)k次的場景發(fā)生的概率均為:

然后,我們需要考慮結(jié)果為1的次數(shù)剛好為k的情況有多少種。很明顯,這就是一個(gè)伯努利試驗(yàn)的組合問題,n次實(shí)驗(yàn)中有k次結(jié)果為1的情況共有“n選k”種,兩者相乘就是該事件發(fā)生的概率。

因此:

Python計(jì)算

那么我們來用Python實(shí)現(xiàn)一個(gè)計(jì)算二項(xiàng)分布概率的小工具,在這里,我們的輸入?yún)?shù)包含總試驗(yàn)次數(shù)n、正樣本發(fā)生的次數(shù)k以及正樣本發(fā)生的概率p:

def binominal_prob(n, k, p): """ 計(jì)算并返回二項(xiàng)分布中某結(jié)果發(fā)生的概率 """ # 任一k次成功的序列出現(xiàn)的概率 p_base = p ** k * (1-p) ** (n-k) # n次試驗(yàn)中k次成功的組合數(shù) # 直接用上邊我們編寫的排列組合函數(shù)來求解 combination = PC(n, k)[1] p_result = p_base * combination return p_result

那么接下來,我們利用我們剛剛寫好的小工具,來看一下在10次試驗(yàn)中,不同的概率對(duì)應(yīng)的二項(xiàng)分布是什么樣的。

probs = [binominal_prob(10, i, 0.5) for i in range(11)]

我們將結(jié)果畫出來看看:

%matplotlib inlineimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snssns.set()probs = [round(i/10,1) for i in range(1, 10)]n = 20plt.figure(figsize=(16, 6))for p in probs: dist_probs = [binominal_prob(n, i, p) for i in range(n+1)] plt.plot(range(n+1), dist_probs, label='p={0}'.format(p))plt.legend()plt.title('Binominal Distributions of Different P value')plt.savefig('binominal.jpg')plt.show()

或者我們使用交互式的繪圖庫plotly來嘗試同樣的事情:

import plotly.graph_objects as goprobs = [round(i/10,1) for i in range(1, 10)]n = 20fig = go.Figure()for p in probs: dist_probs = [binominal_prob(n, i, p) for i in range(n+1)] fig.add_trace(go.Scatter( x=list(range(n+1)), y=dist_probs, name='p={0}'.format(p) ))fig.show()

可以看到,plotly實(shí)現(xiàn)的效果更加靚麗,且額外支持了動(dòng)態(tài)交互,在這里我就選擇把p=0.8這條線隱藏了起來。

一個(gè)利用極大似然估計(jì)求二項(xiàng)分布概率參數(shù)的例子

我們現(xiàn)在想象一種情況,有一枚分布不太均勻的硬幣,每次拋向空中后,落地為正面的概率為p,任意兩次實(shí)驗(yàn)之間相互獨(dú)立。現(xiàn)在我們做了4次實(shí)驗(yàn),其中有三次正面朝上,那么請(qǐng)問p的值為多少?

我們之前曾經(jīng)提到過極大似然估計(jì),在這里我們用同樣的思路去估計(jì)p的取值。極大似然估計(jì)的思想就是尋找一個(gè)參數(shù),使得當(dāng)前結(jié)果發(fā)生的概率最大,那么我們先定義出來當(dāng)前結(jié)果發(fā)生的概率公式:

對(duì)其求導(dǎo)并使導(dǎo)數(shù)為0,有:

可得,當(dāng)p=0.75時(shí),P(X=3)=0.422達(dá)到最大(另一個(gè)解p=0顯然不可能,因?yàn)橛矌懦弦呀?jīng)發(fā)生了,并不是“不可能事件”;另外考慮不同區(qū)間導(dǎo)數(shù)的取值也可以得到答案)。

- END -

文源網(wǎng)絡(luò),僅供學(xué)習(xí)之用,如有侵權(quán),聯(lián)系刪除。

往期精彩

◆ ?50款開源工具你都用過嗎?

◆ ?python+C、C++混合編程的應(yīng)用

◆ ?python網(wǎng)絡(luò)爬蟲的基本原理詳解

◆ ?Python自動(dòng)操控excel,一小時(shí)解決你一天的工作

◆ ?如何用Python增強(qiáng)Excel,減少處理復(fù)雜數(shù)據(jù)的痛苦?

總結(jié)

以上是生活随笔為你收集整理的python 二项分布_二项分布的理论基础、应用及Python实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。