Python Counter類
Python中的Counter類是collections模塊的一部分。計數(shù)器提供了一種快速的方法來計算列表中存在的唯一項的數(shù)量。Counter類也可以擴展為表示概率質(zhì)量函數(shù)和貝葉斯假設(shè)組。計數(shù)器是從值到其頻率的映射。如果使用字符串初始化計數(shù)器,則會得到每個字母到它出現(xiàn)的次數(shù)的映射。如果兩個單詞是字謎,它們會產(chǎn)生相等的計數(shù)器,因此您可以使用Counters在線性時間內(nèi)測試字謎。
多集
計數(shù)器是多集的自然表示,多集是元素可以多次出現(xiàn)的集合。您可以使用is_subset之類的集合操作來擴展Counter:您可以is_subset在Scrabble之類的游戲中使用它來查看給定的一組圖塊是否可用于拼寫給定的單詞。
概率質(zhì)量函數(shù)
您還可以擴展“計數(shù)器”以表示概率質(zhì)量函數(shù)(PMF)。normalize計算頻率的總和并進行除法,得到加到1的概率。__add__枚舉所有值對,并返回代表和分布的新Pmf。__hash__并且__id__使保偏光纖哈希的; 這不是最好的方法,因為它們是可變的。因此,此實現(xiàn)帶有警告,如果您使用Pmf作為密鑰,則不應(yīng)對其進行修改。更好的選擇是定義一個凍結(jié)的Pmf。render以準(zhǔn)備繪制的形式返回值和概率:
使用Pmf對象
例如,我們可以制作一個表示6面模具的Pmf對象。
添加運算符
使用加法運算符,我們可以計算兩個骰子之和的分布。
計算分布
使用numpy.sum,我們可以計算三個骰子的和的分布。然后繪制結(jié)果(使用Pmf.render)
貝葉斯統(tǒng)計
套件是表示一組假設(shè)及其概率的Pmf;它提供bayesian_update,可以根據(jù)新數(shù)據(jù)更新假設(shè)的概率。Suite是一個抽象的父類。子類應(yīng)提供一種可能性方法,用于評估給定假設(shè)下數(shù)據(jù)的可能性。bayesian_update遍歷假設(shè),評估每個假設(shè)下數(shù)據(jù)的可能性,并相應(yīng)地更新概率。然后,它重新規(guī)范化PMF。
套件示例
例如,我將使用Suite解決Think Bayes第3章中的“骰子問題” :
“假設(shè)我有一盒骰子,其中包含4面骰子,6面骰子,8面骰子,12面骰子和20面骰子。如果您曾經(jīng)玩過《龍與地下城》,您就會知道我在說什么。假設(shè)我從盒子中隨機選擇一個骰子,將其擲骰并得到6。我擲每個骰子的概率是多少?”
我將首先列出代表骰子的Pmfs:
骰子套件
接下來,我將定義DiceSuite,該繼承bayesian_update自Suite并提供likelihood。data是觀察到的模頭輥,本例中為6。hypo是我可能已經(jīng)猜到的假想死亡;為了獲得數(shù)據(jù)的可能性,我從給定的模具中選擇給定值的概率。
更新發(fā)行版
最后,我使用骰子列表實例化從每個骰子映射到其先驗概率的Suite。默認(rèn)情況下,所有骰子的優(yōu)先級相同。然后,我使用給定值更新分布并打印結(jié)果:
另一個更新
如預(yù)期的那樣,消除了4面模具?,F(xiàn)在它的概率為0。6面模具最有可能,但8面模具仍然很有可能。現(xiàn)在,假設(shè)我再次擲骰子并得到8。我們可以使用新數(shù)據(jù)再次更新套件?,F(xiàn)在6面模具已被淘汰,8面模具很有可能,而我滾動20面模具的機會不到10%。這些示例說明了Counter類的多功能性,Counter類是Python使用不足的數(shù)據(jù)結(jié)構(gòu)之一。
填寫下面表單即可預(yù)約申請免費試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費! 怕學(xué)不會?助教全程陪讀,隨時解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!
?2007-2022/ 5wd995.cn 北京漫動者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc