日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

寫作說明

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

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

曲奇餅案例

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

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

思路

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

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

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

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

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

貝葉斯定理

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

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

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

因為步驟1等式,有如下等式成立P(B)P(A|B)=P(A)P(B|A)

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

這就是貝葉斯定理,推導過程比中學時要簡單很多。先來計算下曲奇餅問題

本題數學的計算過程

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

P(碗A)=1/2

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

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

所以最后經過計算

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

先驗概率、后驗概率、似然度、標準化常量

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

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

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

在考慮H和D的情況下,每項意義如下:

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

P(H|D)稱為后驗概率,即看到新數據后,我們要計算的該假設的概率。

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

P(D)是任何假設下得到這一數據的概率,稱為標準化常量。

本題目Python的實現分析

了解了前面的鋪墊,現在好辦了。希望大家沒有看暈,都能堅持到現在。

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

Set方法是給容器添加先驗假設及先驗概率

Mult方法:根據key查找到先驗概率,并更新概率。

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

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解下曲奇餅題

#實例化Bayes類

bayes=Bayes()

#先驗概率

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

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

#后驗概率

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))

運行結果

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

更多內容

文本分析

數據分析

神奇的python

爬蟲

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。