R編程語言已經成為統計分析中的事實標準。但在這篇文章中,我將告訴你在Python中實現統計學概念會是如此容易。我要使用Python實現一些離散和連續的概率分布。雖然我不會討論這些分布的數學細節,但我會以鏈接的方式給你一些學習這些統計學概念的好資料。在討論這些概率分布之前,我想簡單說說什么是隨機變量(random variable)。隨機變量是對一次試驗結果的量化。
成都創新互聯專注于拱墅企業網站建設,成都響應式網站建設公司,商城網站建設。拱墅網站建設公司,為拱墅等地區提供建站服務。全流程定制網站開發,專業設計,全程項目跟蹤,成都創新互聯專業和態度為您提供的服務
舉個例子,一個表示拋硬幣結果的隨機變量可以表示成
Python
1
2
X = {1 如果正面朝上,
2 如果反面朝上}
隨機變量是一個變量,它取值于一組可能的值(離散或連續的),并服從某種隨機性。隨機變量的每個可能取值的都與一個概率相關聯。隨機變量的所有可能取值和與之相關聯的概率就被稱為概率分布(probability distributrion)。
我鼓勵大家仔細研究一下scipy.stats模塊。
概率分布有兩種類型:離散(discrete)概率分布和連續(continuous)概率分布。
離散概率分布也稱為概率質量函數(probability mass function)。離散概率分布的例子有伯努利分布(Bernoulli distribution)、二項分布(binomial distribution)、泊松分布(Poisson distribution)和幾何分布(geometric distribution)等。
連續概率分布也稱為概率密度函數(probability density function),它們是具有連續取值(例如一條實線上的值)的函數。正態分布(normal distribution)、指數分布(exponential distribution)和β分布(beta distribution)等都屬于連續概率分布。
若想了解更多關于離散和連續隨機變量的知識,你可以觀看可汗學院關于概率分布的視頻。
二項分布(Binomial Distribution)
服從二項分布的隨機變量X表示在n個獨立的是/非試驗中成功的次數,其中每次試驗的成功概率為p。
E(X) = np, Var(X) = np(1?p)
如果你想知道每個函數的原理,你可以在IPython筆記本中使用help file命令。 E(X)表示分布的期望或平均值。
鍵入stats.binom?了解二項分布函數binom的更多信息。
二項分布的例子:拋擲10次硬幣,恰好兩次正面朝上的概率是多少?
假設在該試驗中正面朝上的概率為0.3,這意味著平均來說,我們可以期待有3次是硬幣正面朝上的。我定義擲硬幣的所有可能結果為k = np.arange(0,11):你可能觀測到0次正面朝上、1次正面朝上,一直到10次正面朝上。我使用stats.binom.pmf計算每次觀測的概率質量函數。它返回一個含有11個元素的列表(list),這些元素表示與每個觀測相關聯的概率值。
您可以使用.rvs函數模擬一個二項隨機變量,其中參數size指定你要進行模擬的次數。我讓Python返回10000個參數為n和p的二項式隨機變量。我將輸出這些隨機變量的平均值和標準差,然后畫出所有的隨機變量的直方圖。
泊松分布(Poisson Distribution)
一個服從泊松分布的隨機變量X,表示在具有比率參數(rate parameter)λ的一段固定時間間隔內,事件發生的次數。參數λ告訴你該事件發生的比率。隨機變量X的平均值和方差都是λ。
E(X) = λ, Var(X) = λ
泊松分布的例子:已知某路口發生事故的比率是每天2次,那么在此處一天內發生4次事故的概率是多少?
讓我們考慮這個平均每天發生2起事故的例子。泊松分布的實現和二項分布有些類似,在泊松分布中我們需要指定比率參數。泊松分布的輸出是一個數列,包含了發生0次、1次、2次,直到10次事故的概率。我用結果生成了以下圖片。
你可以看到,事故次數的峰值在均值附近。平均來說,你可以預計事件發生的次數為λ。嘗試不同的λ和n的值,然后看看分布的形狀是怎么變化的。
現在我來模擬1000個服從泊松分布的隨機變量。
正態分布(Normal Distribution)
正態分布是一種連續分布,其函數可以在實線上的任何地方取值。正態分布由兩個參數描述:分布的平均值μ和方差σ2 。
E(X) = μ, Var(X) = σ2
正態分布的取值可以從負無窮到正無窮。你可以注意到,我用stats.norm.pdf得到正態分布的概率密度函數。
β分布(Beta Distribution)
β分布是一個取值在 [0, 1] 之間的連續分布,它由兩個形態參數α和β的取值所刻畫。
β分布的形狀取決于α和β的值。貝葉斯分析中大量使用了β分布。
當你將參數α和β都設置為1時,該分布又被稱為均勻分布(uniform distribution)。嘗試不同的α和β取值,看看分布的形狀是如何變化的。
指數分布(Exponential Distribution)
指數分布是一種連續概率分布,用于表示獨立隨機事件發生的時間間隔。比如旅客進入機場的時間間隔、打進客服中心電話的時間間隔、中文維基百科新條目出現的時間間隔等等。
我將參數λ設置為0.5,并將x的取值范圍設置為 $[0, 15]$ 。
接著,我在指數分布下模擬1000個隨機變量。scale參數表示λ的倒數。函數np.std中,參數ddof等于標準偏差除以 $n-1$ 的值。
結語(Conclusion)
概率分布就像蓋房子的藍圖,而隨機變量是對試驗事件的總結。我建議你去看看哈佛大學數據科學課程的講座,Joe Blitzstein教授給了一份摘要,包含了你所需要了解的關于統計模型和分布的全部。
樸素:特征條件獨立 貝葉斯:基于貝葉斯定理 根據貝葉斯定理,對一個分類問題,給定樣本特征x,樣本屬于類別y的概率是 p(y|x)=p(x|y)p(y)p(x) 在這里,x是一個特征向量,將設x維度為M。
Bayesian-belief-networks允許你用純Python創建貝葉斯信念網絡和其他圖模型,目前支持四種不同的推理方法。
支持的圖模型
離散變量的貝葉斯信念網絡
有著高斯分布的連續變量的高斯貝葉斯網絡
推理引擎
消息傳遞和聯合樹算法(Junction Tree Algorithm)
和積算法(The Sum Product Algorithm)
MCMC采樣的近似推理
高斯貝葉斯網絡中得Exact Propagation
1、背景
《機器學習實戰》當中,用python根據貝葉斯公式實現了基本的分類算法。現在來看看用sklearn,如何實現。還拿之前的例子,對帖子的分類。數據如下:
補充:題目的值左邊是幾個人的評論,右邊是評論屬于侮辱類(1)、正常類(0),需要進行文本分類,且再有新的文本過來時能自動劃分至0或1。
2、分類
(1)算法的準備
通過查看sklearn的訓練模型函數,fit(X, Y),發現只需要準備兩個參數。一個是數據的矩陣,另一個是數據的分類數組。首先就是將以上的文本轉化成矩陣。
在前一章其實已經講解過如何將文本轉化成矩陣。這里將示意的再補充下。
a.首先選取所有的單詞,形成列,也可理解為屬性。例如:
b.其次將遍歷每個文本,填滿上述列的值。文本出現過列的次,填一。沒有出現過填0。比如第一句就是:my dog has flea problems help please,可表示為:
同理所有的文本都可如此表示,所以就形成了一個數字的矩陣。
(2)beyes模型的選擇
在完成數據的準備以后,就可以直接調用sklearn的模型和函數完成模型的訓練啦。但在beyes模型的選擇的時候發現,beyes下有多個模型可選擇,所以這個會讓人糾結。接下來共同了解下這些模型:
a.高斯模型(GaussianNB)
高斯模型是對于每個屬性的值是連續的,且服從高斯分布時可使用:
比如人的身高,比如花的高度等等。當然你也可將這些數據離散化,比如按等距劃分、等頻劃分成離散的值,但可能效果都沒有直接用高斯模型來計算的好。
用法:class sklearn.naive_bayes.GaussianNB
參數:無
b.多項式模型(MultinominalNB)
如果大部分是多元離散值,則采用多項式模型要好些。多項式模型,通常就是構造參數向量,然后通過極大似然估計來尋求參數的最有值。
這里只簡單的略列一些公式,具體可查詢更多資料。從這個計算過程中可得出,這里引入啦一個平滑先驗值alpha,這個值在模型訓練的時候也會用到。通常alpha0,可引入不在訓練集的特征,尤其當alpha=1,成為拉普拉絲平滑。具體alpha取值對模型的影響可附件的圖。
用法:class sklearn.naive_bayes.MultinomialNB(alpha=1.0,fit_prior=True,class_prior=None)?
參數:
alpha:浮點數,就是上述說的引入平滑的值;
fit_prior:bool值,如果為Ture,則不用去學習P(y=ck),以均勻分布替代,否則則去學習P(y=ck)(不懂)
class_prior:一個數組。它指定了每個分類的先驗概率P(y=c1),P(y=c2)…..,若指定了該參數?
則每個分類的先驗概率無需學習 (不懂)
c.伯努利模型(BernoulliNB)
如果特征值為二元離散值或是稀疏的多元離散值,則可采用伯努利模型。
公式:class sklearn.naive_bayes.BernoulliNB(alpha=1.0,binarize=0.0,fit_prior=Ture,?
class_prior=None)?
參數:
binarize:一個浮點數或者None,如果為浮點數則以該數值為界,特征值大于它的取1,小于的為0 。如果為None,假定原始數據已經二值化?
其它參數同上。
通過以上的模型對比和分析,由于文本分析轉化后是很多二項取值的稀疏矩陣,因此選取伯努利模型效果會更佳。
補充:alpha、binarize值對模型效果的影響
標題名稱:關于貝葉斯python函數的信息
本文來源:http://vcdvsql.cn/article24/hiocje.html
成都網站建設公司_創新互聯,為您提供網站設計公司、網站建設、用戶體驗、品牌網站制作、企業建站、面包屑導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯