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

歡迎訪問 生活随笔!

生活随笔

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

python

python计算条件概率_用Python实现贝叶斯定理(附代码)

發(fā)布時(shí)間:2023/12/19 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python计算条件概率_用Python实现贝叶斯定理(附代码) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

寫作說明

上一期我們講了貝葉斯分類器,其中有很多的概率基礎(chǔ)知識和貝葉斯定理。但是講解的很沒有重點(diǎn),前半部分講的是貝葉斯基礎(chǔ)知識,最后很突兀的插進(jìn)來一個(gè)文本分析-貝葉斯分類器。很多童鞋看到很累。其實(shí)上一期和本期都想附上《貝葉斯思維:統(tǒng)計(jì)建模的Python學(xué)習(xí)法》書中的代碼,但我看了下源碼,發(fā)現(xiàn)代碼太長了信息量太大,不是我一篇文章就能展示的明白的。

今天我就早起翻看這本書,根據(jù)書上的講解和自己的理解,用Python實(shí)現(xiàn)的一個(gè)簡單的貝葉斯的腳本。本文只是用來驗(yàn)證自己貝葉斯定理是否理解,是否能自己動(dòng)手實(shí)現(xiàn),本身這腳本并沒有什么高大上的功能,如果有的話,唯一的功能就是能用來做貝葉斯數(shù)學(xué)題O(∩_∩)O哈哈~。

曲奇餅案例

假設(shè)有兩碗曲奇餅,碗A包含30個(gè)香草曲奇餅和10個(gè)巧克力曲奇餅,碗B這兩種曲奇餅各20個(gè)。 現(xiàn)在假設(shè)你在不看的情況下隨機(jī)地挑一個(gè)碗拿一塊餅,得到了一塊香草曲奇餅。

問題:從碗A渠道香草曲奇餅的概率是多少

思路

這是一個(gè)條件概率問題,我們希望得到P(碗A|香草餅),

現(xiàn)在我們很容易知道P(香草餅|碗A)=3/4,

如果將兩者聯(lián)系起來,那么P(碗A|香草餅)就很容易算得。

但可惜P(碗A|香草餅)與P(香草餅|碗A)是不同的。

不過貝葉斯定理卻可以通過一個(gè)概率得到另一個(gè)概率。

貝葉斯定理

聯(lián)合概率可交換,即P(AandB)=P(BandA)

對于任意事件A、B都獨(dú)立,因此聯(lián)合概率P(AandB)=P(B)P(A|B)

兩步驟執(zhí)行交換,即P(BandA)=P(A)P(B|A)

因?yàn)椴襟E1等式,有如下等式成立P(B)P(A|B)=P(A)P(B|A)

最后等式兩端除以P(B),得到P(A|B)=P(A)P(B|A)/P(B)

這就是貝葉斯定理,推導(dǎo)過程比中學(xué)時(shí)要簡單很多。先來計(jì)算下曲奇餅問題

本題數(shù)學(xué)的計(jì)算過程

P(碗A|香草餅)=P(碗A)*P(香草餅|碗A)/P(香草餅)

P(碗A)=1/2

P(香草餅|碗A)=3/4

P(香草餅)=50/(50+30)=5/8

所以最后經(jīng)過計(jì)算

P(碗A|香草餅)=3/5=0.6

先驗(yàn)概率、后驗(yàn)概率、似然度、標(biāo)準(zhǔn)化常量

我覺得在python實(shí)現(xiàn)代碼前最好大家能夠記住先驗(yàn)概率、后驗(yàn)概率這些概念(如果能理解更好)。 對上述貝葉斯定理的理解,還有一種解釋思路,叫做“歷時(shí)詮釋”。“歷時(shí)”意味著某些事情隨著時(shí)間而發(fā)生,即假設(shè)的概率隨著看到新數(shù)據(jù)而發(fā)生變化。

在考慮H(Hypothsis)和D(Data)情況下,貝葉斯定理的表達(dá)式可以寫成:

P(H|D)=P(H)P(D|H)/P(D)

在考慮H和D的情況下,每項(xiàng)意義如下:

P(H)稱為先驗(yàn)概率,即在得到新數(shù)據(jù)前某一假設(shè)的概率。如沒有得到擲硬幣結(jié)果前,我們先假設(shè)正反面概率各位50%。

P(H|D)稱為后驗(yàn)概率,即看到新數(shù)據(jù)后,我們要計(jì)算的該假設(shè)的概率。

P(D|H)是該假設(shè)下得到這一數(shù)據(jù)的概率,稱為似然度。

P(D)是任何假設(shè)下得到這一數(shù)據(jù)的概率,稱為標(biāo)準(zhǔn)化常量。

本題目Python的實(shí)現(xiàn)分析

了解了前面的鋪墊,現(xiàn)在好辦了。希望大家沒有看暈,都能堅(jiān)持到現(xiàn)在。

首先定義Bayes類,初始化創(chuàng)建一個(gè)dict類型的容器container。該容器是為了儲存貝葉斯各項(xiàng)信息。key鍵存儲假設(shè),value值存儲概率

Set方法是給容器添加先驗(yàn)假設(shè)及先驗(yàn)概率

Mult方法:根據(jù)key查找到先驗(yàn)概率,并更新概率。

Normalize方法:歸一化(建議大家等會(huì)運(yùn)行代碼時(shí)候看下有無Normalize的區(qū)別,就能理解歸一化這一含義)

Prob方法:返回某一事件的概率

好了,有了前面的鋪墊,可以附上我的代碼

classBayes(object):

def__init__(self):

self._container=dict()

defSet(self,hypothis,prob):

self._container[hypothis]=prob

defMult(self,hypothis,prob):

old_prob=self._container[hypothis]

self._container[hypothis]=old_prob*prob

defNormalize(self):

count=0

forhypothisinself._container.values():

count=count+hypothis

forhypothis,probinself._container.items():

self._container[hypothis]=self._container[hypothis]/count

defProb(self,hypothis):

Prob=self._container[hypothis]

returnProb

用python解下曲奇餅題

#實(shí)例化Bayes類

bayes=Bayes()

#先驗(yàn)概率

bayes.Set('Bow_A',0.5)#P(碗A)=1/2

bayes.Set('Bow_B',0.5)#P(碗B)=1/2

#后驗(yàn)概率

bayes.Mult('Bow_A',0.75)#P(香草餅|碗A)=3/4

bayes.Mult('Bow_B',0.5)#P(香草餅|碗B)=1/2

bayes.Normalize()

prob=bayes.Prob('Bow_A')#P(碗A|香草餅)

print('從碗A渠道香草曲奇餅的概率:{}'.format(prob))

運(yùn)行結(jié)果

從碗A渠道香草曲奇餅的概率:0.6

更多內(nèi)容

文本分析

數(shù)據(jù)分析

神奇的python

爬蟲

總結(jié)

以上是生活随笔為你收集整理的python计算条件概率_用Python实现贝叶斯定理(附代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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