【機(jī)器學(xué)習(xí)實(shí)驗(yàn)】概率編程及貝葉斯方法

引言

貝葉斯方法是天生用來做推斷的方法钓账,然而它常隱藏在課本的數(shù)學(xué)分析的背后。
隨著近年來貝葉斯方法在機(jī)器學(xué)習(xí)競(jìng)賽中成功應(yīng)用,其重要性又引起了學(xué)習(xí)者的興趣疏魏,但是其難點(diǎn)在于貝葉斯數(shù)學(xué)和概率編程之間的銜接。《Probabilistic Programming and Bayesian Methods for Hackers》一書試圖彌補(bǔ)以上的遺憾晤愧。
有關(guān)概率編程和貝葉斯方法的實(shí)驗(yàn)大莫,我將以該在線書籍作為學(xué)習(xí)資料,希望從中能將理論知識(shí)和編程實(shí)踐想結(jié)合官份,以加深對(duì)理論的理解只厘,以提高解決具體問題和數(shù)學(xué)建模的能力。

我們期望使用貝葉斯推斷來進(jìn)行統(tǒng)計(jì)分析舅巷,利用計(jì)算機(jī)的計(jì)算能力通過概率編程來解決問題羔味。該方法去除了原本數(shù)學(xué)分析的干預(yù)。PyMC是一個(gè)馬爾可夫鏈蒙特卡羅采樣(Markov chain Monte Carlo Sampling)Python工具包钠右,它實(shí)現(xiàn)了Metropolis-Hastings算法赋元,包含了畫圖、擬合優(yōu)度(goodness-of-fit)和聚合診斷(convergence diagnostics)的方法。

貝葉斯思想

比如測(cè)試一個(gè)算法的正確性搁凸,我們通過一個(gè)個(gè)測(cè)試用例來驗(yàn)證算法的正確性媚值,每次測(cè)試都讓我們對(duì)算法的準(zhǔn)確性更加有信心,但是我們無法保證算法是沒有bug的护糖,除非測(cè)試了所有可能的問題杂腰,但這常常是不實(shí)際的。
貝葉斯推斷是同樣的一個(gè)道理椅文,通過成功的結(jié)果來更新信任度喂很,在沒有驗(yàn)證所有可能的結(jié)果之前,我們無法絕對(duì)肯定皆刺。

現(xiàn)在少辣,我們來對(duì)比一下貝葉斯和頻率派對(duì)于概率的解釋。
從貝葉斯的世界觀中羡蛾,概率是一個(gè)事件發(fā)生的可信度(believability)的度量漓帅,也就是說,我們對(duì)一件事情發(fā)生是多么有信心痴怨。
而頻率派的觀點(diǎn)忙干,他們?cè)O(shè)定概率是事件的長(zhǎng)期頻率。比如飛機(jī)發(fā)生事故的概率浪藻,頻率派解釋為飛機(jī)事故的長(zhǎng)期頻率捐迫。這在很多事件的概率問題上看上去確實(shí)有邏輯合理性,但當(dāng)一個(gè)事件不會(huì)經(jīng)常出現(xiàn)爱葵,無法統(tǒng)計(jì)長(zhǎng)期的發(fā)生頻率的話施戴,就很難解釋通了。比如總統(tǒng)選舉的概率萌丈,因?yàn)樵撨x舉只發(fā)生一次赞哗。
貝葉斯觀點(diǎn)認(rèn)為,概率是事件發(fā)生的可信度或者信心的測(cè)度辆雾。對(duì)于一個(gè)事件的發(fā)生肪笋,如果將這種可信度設(shè)為0,那么說明我們對(duì)該事件發(fā)生沒有信心度迂;相反藤乙,如果將這種可信度設(shè)為1,那么說明我們十分肯定該事件一定會(huì)發(fā)生英岭。0到1之間的可信度是對(duì)結(jié)果發(fā)生的權(quán)重的考慮湾盒。這樣的定義與飛機(jī)發(fā)生事故的概率的解釋是一致的:通過觀測(cè)了飛機(jī)事故的發(fā)生頻率,在沒有附加信息的情況下诅妹,飛機(jī)事故的可信度應(yīng)該等于該頻率。

我們?cè)O(shè)定可信度的測(cè)量是針對(duì)一個(gè)個(gè)體的,而不是對(duì)于自然而言的吭狡。這是因?yàn)榧庋辏煌膫€(gè)體具有不同的信息,所以其對(duì)于事件發(fā)生的信任程度也不同划煮。
將可信度認(rèn)為是一種概率的哲學(xué)觀點(diǎn)對(duì)人類是很自然的送丰,我們持續(xù)不斷地與世界萬物互動(dòng)接觸,總是看到一部分真相弛秋,卻收集了一些證據(jù)來構(gòu)成這種可信度器躏。
貝葉斯派通過觀察到更多的證據(jù)和現(xiàn)象來更正自己的信任度,尤其是當(dāng)證據(jù)與初始認(rèn)為的一致時(shí)蟹略,該證據(jù)就更不能被忽視了登失。我們將更新的可信度設(shè)為P(A|X),解釋為在給定證據(jù)X時(shí)挖炬,事件A發(fā)生的概率揽浙。這被稱作后驗(yàn)概率。

  1. 先驗(yàn)概率P(A):硬幣有50%的機(jī)會(huì)向上意敛;后驗(yàn)概率P(A|X):你看到了硬幣落到地上時(shí)正面朝上馅巷,這就是信息X,于是我們就將硬幣朝上的概率設(shè)為1.0草姻,硬幣朝下的概率設(shè)為0.0钓猬。
  2. 先驗(yàn)概率P(A):大型復(fù)雜的程序代碼可能bug;后驗(yàn)概率P(A|X):如果代碼通過了所有的測(cè)試用例X撩独,盡管仍然有bug存在的可能性逗噩,但是該可能性已經(jīng)減小了。

貝葉斯推斷實(shí)戰(zhàn)

如果是頻率派和貝葉斯派編寫一個(gè)函數(shù)跌榔,輸入一個(gè)統(tǒng)計(jì)問題异雁,而返回的結(jié)果是不同的。頻率派的推斷方程會(huì)返回一個(gè)數(shù)來表示一個(gè)估計(jì)僧须,而貝葉斯派的方程將返回一個(gè)概率纲刀。
以之前代碼調(diào)試問題為例,當(dāng)詢問“代碼通過了所有測(cè)試担平,那么該代碼是不是沒有bug了”示绊,頻率派的方程會(huì)返回“是”;而貝葉斯派的方程將返回“是”和“否”的概率暂论。

令N為我們手上數(shù)據(jù)證據(jù)的數(shù)量面褐,當(dāng)我們收集了無限多個(gè)證據(jù),即N→∞取胎,貝葉斯的結(jié)果和頻率派的結(jié)果是一致的展哭。所以湃窍,對(duì)于很大的N,統(tǒng)計(jì)推斷或多或少有一定客觀性匪傍;而對(duì)于較小的N您市,該推斷就不太穩(wěn)定了:頻率派估計(jì)就有較大的方差和較大的置信區(qū)間(confidence intervals)。這卻是貝葉斯分析擅長(zhǎng)的役衡,貝葉斯派引入了先驗(yàn)概率茵休,返回一個(gè)概率,這樣就保有了對(duì)于小數(shù)據(jù)集情況下統(tǒng)計(jì)推斷所反映出來的不確定性(uncertainty)手蝎。

有人會(huì)認(rèn)為榕莺,當(dāng)N很大的時(shí)候,人們會(huì)不太在意這兩種技術(shù)的區(qū)別棵介,因?yàn)榇藭r(shí)它們提供了類似的推斷钉鸯,甚至更傾向于計(jì)算簡(jiǎn)單的頻率派方法。
而有專家[Andrew Gelman (2005)]認(rèn)為鞍时,樣本數(shù)量永遠(yuǎn)不會(huì)很大亏拉。如果N很小,為了得到一個(gè)足夠精確的推論逆巍,你需要獲得更多的數(shù)據(jù)及塘。但是一旦N足夠大,你便開始細(xì)分?jǐn)?shù)據(jù)以學(xué)習(xí)更多(比如锐极,在一個(gè)公開的民意投票中笙僚,一旦你對(duì)于全國(guó)的情況有一個(gè)很好的估計(jì),你便會(huì)劃分不同的人群來進(jìn)行更多的估計(jì)灵再,比如按照性別肋层,不同的年齡,不同的地域等)翎迁。N不會(huì)很充足栋猖,因?yàn)橐坏┠阏J(rèn)為有充足的數(shù)據(jù),你便轉(zhuǎn)向更加細(xì)致的問題汪榔,這樣你便需要更多的數(shù)據(jù)蒲拉。

頻率派方法是錯(cuò)誤的嗎?

頻率派方法依然很有用痴腌,并且在很多領(lǐng)域都是先進(jìn)水平(state-of-the-art)雌团。像最小二乘線性回歸、LASSO回歸士聪、期望最大算法都很有用锦援、很快速。貝葉斯方法補(bǔ)充了這些技術(shù)的不足剥悟,或者用彈性建模(flexible modeling)來闡述潛在的系統(tǒng)灵寺。

關(guān)于大數(shù)據(jù)

反常的是曼库,大數(shù)據(jù)的預(yù)測(cè)分析問題常常使用相對(duì)簡(jiǎn)單的算法,因此替久,我們辯解大數(shù)據(jù)預(yù)測(cè)的困難點(diǎn)不在于算法的使用凉泄,而是存儲(chǔ)和使用大數(shù)據(jù)的難度躏尉。
更多的難以分析的問題包含中數(shù)據(jù)(medium data)以至于小數(shù)據(jù)(small data)蚯根。

貝葉斯框架

入門實(shí)驗(yàn)

拋硬幣實(shí)驗(yàn)

假設(shè)你不知道拋硬幣正面朝上的的概率,你定義該真實(shí)比率為p胀糜,但是并沒有關(guān)于p的任何先驗(yàn)知識(shí)颅拦。 于是,我們嘗試拋硬幣并記錄其觀測(cè)結(jié)果教藻。有趣的問題來了距帅,隨著我們觀察到越來越多的數(shù)據(jù),我們的推斷是如何發(fā)生變化的括堤?

%matplotlib inline
from IPython.core.pylabtools import figsize
import numpy as np
from matplotlib import pyplot as plt
figsize(11, 9)

import scipy.stats as stats


dist = stats.beta
#多次試驗(yàn)
n_trials = [0, 1, 2, 3, 4, 5, 8, 15, 50, 500]
#構(gòu)造500個(gè)符合伯努利分布的隨機(jī)抽樣
data = stats.bernoulli.rvs(0.5, size=n_trials[-1])
x = np.linspace(0, 1, 100)


#使用伯努利分布的共軛先驗(yàn)——Beta分布
for k, N in enumerate(n_trials):
    sx = plt.subplot(len(n_trials) / 2, 2, k + 1)
    plt.xlabel("$p$, probability of heads") \
        if k in [0, len(n_trials) - 1] else None
    plt.setp(sx.get_yticklabels(), visible=False)#不顯示y軸刻度
    heads = data[:N].sum()#統(tǒng)計(jì)1的個(gè)數(shù)
    y = dist.pdf(x, 1 + heads, 1 + N - heads)#構(gòu)造Beta分布
    plt.plot(x, y, label="observe %d tosses,\n %d heads" % (N, heads))
    plt.fill_between(x, 0, y, color="#FF99CC", alpha=0.4)#填充色彩到曲線下區(qū)域
    plt.vlines(0.5, 0, 4, color="k", linestyles="--", lw=1)#在0.5處畫虛線

    leg = plt.legend()
    leg.get_frame().set_alpha(0.4)
    plt.autoscale(tight=True)
    
plt.suptitle("Bayesian updating of posterior probabilities",
             y=1.02,
             fontsize=14)

plt.tight_layout()


上圖碌秸,我們隨著觀測(cè)拋硬幣的數(shù)據(jù)的增多,繪制了一系列后驗(yàn)概率的更新情況悄窃。
該后驗(yàn)概率由這個(gè)曲線來表征讥电,其不確定程度正比于曲線的寬度。我們開始觀察數(shù)據(jù)的過程中轧抗,后驗(yàn)概率開始平移恩敌,不斷變化。最終横媚,該概率變得緊縮且越來越接近其真實(shí)值p=0.5纠炮。
但注意到,最終圖像的峰值不一定在0.5處灯蝴,這是很正常的恢口。回顧之前穷躁,我們假設(shè)我們對(duì)p的值沒有一個(gè)先驗(yàn)知識(shí)耕肩。實(shí)際上,如果我們觀測(cè)了8次的結(jié)果折砸,其中只有1次硬幣朝上看疗,那么得到的分布情況與峰值在0.5周圍的情況相比偏倚很大。隨著更多數(shù)據(jù)的積累睦授,我們會(huì)發(fā)現(xiàn)該概率逐漸被分配在p=0.5處两芳。

二項(xiàng)分布與Beta分布

二項(xiàng)分布
在概率論和統(tǒng)計(jì)學(xué)中,二項(xiàng)分布是n個(gè)獨(dú)立的[是/非]試驗(yàn)中成功的次數(shù)的離散概率分布去枷,其中每次試驗(yàn)的成功概率為p怖辆。
比如:

  • 拋一次硬幣出現(xiàn)正面的概率是0.5是复,拋10次硬幣,出現(xiàn)k次正面的概率竖螃。
  • 擲一次骰子出現(xiàn)六點(diǎn)的概率是1/6淑廊,擲 6次骰子,出現(xiàn)k次六點(diǎn)的概率特咆。
    每次拋硬幣或者擲骰子都和上次的結(jié)果無關(guān)季惩,所以每次實(shí)驗(yàn)都是獨(dú)立的。二項(xiàng)分布是一個(gè)離散分布腻格,k的取值范圍為從0到n画拾,只有n+1種可能的結(jié)果。

scipy.stats.binom為二項(xiàng)分布菜职,下面用它計(jì)算拋十次硬幣青抛,出現(xiàn)k次正面的概率分布。

n = 10
k = np.arange(n+1)
pcoin = stats.binom.pmf(k, n, 0.5)#k -> quantiles, n and p -> shape parameters
plt.stem(k, pcoin)#繪制火柴棍圖
plt.margins(0.1,0.05)#設(shè)置自動(dòng)縮放的邊緣

下面是投擲6次骰子酬核,出現(xiàn)6點(diǎn)的概率分布蜜另。

n = 6
k = np.arange(n+1)
pdice = stats.binom.pmf(k, n, 1.0/6)
plt.stem(k, pdice)
plt.margins(0.1)

Beta分布
貝塔分布是一個(gè)作為伯努利分布和二項(xiàng)式分布的共軛先驗(yàn)分布的密度函數(shù),在機(jī)器學(xué)習(xí)和數(shù)理統(tǒng)計(jì)學(xué)中有重要應(yīng)用嫡意。貝塔分布中的參數(shù)可以理解為偽計(jì)數(shù)举瑰,伯努利分布的似然函數(shù)可以表示為,表示一次事件發(fā)生的概率鹅很,它為貝塔有相同的形式嘶居,因此可以用貝塔分布作為其先驗(yàn)分布。

對(duì)于硬幣或者骰子這樣的簡(jiǎn)單實(shí)驗(yàn)促煮,我們事先能很準(zhǔn)確地掌握系統(tǒng)成功的概率邮屁。然而通常情況下,系統(tǒng)成功的概率是未知的菠齿。為了測(cè)試系統(tǒng)的成功概率p佑吝,我們做n次試驗(yàn),統(tǒng)計(jì)成功的次數(shù)k绳匀,于是很直觀地就可以計(jì)算出p = k/n芋忿。然而由于系統(tǒng)成功的概率是未知的,這個(gè)公式計(jì)算出的p只是系統(tǒng)成功概率的最佳估計(jì)疾棵。也就是說實(shí)際上p也可能為其它的值戈钢,只是為其它的值的概率較小。
例如有某種特殊的硬幣是尔,我們事先完全無法確定它出現(xiàn)正面的概率殉了。然后拋10次硬幣,出現(xiàn)5次正面拟枚,于是我們認(rèn)為硬幣出現(xiàn)正面的概率最可能是0.5薪铜。但是即使硬幣出現(xiàn)正面的概率為0.4众弓,也會(huì)出現(xiàn)拋10次出現(xiàn)5次正面的情況。因此我們并不能完全確定硬幣出現(xiàn)正面的概率就是0.5隔箍,所以p也是一個(gè)隨機(jī)變量谓娃,它符合Beta分布。

Beta分布是一個(gè)連續(xù)分布蜒滩,由于它描述概率$p$的分布滨达,因此其取值范圍為0到1。 Beta分布有alpha和beta兩個(gè)參數(shù)帮掉,其中alpha為成功次數(shù)加1弦悉,beta為失敗次數(shù)加1窒典。

連續(xù)分布用概率密度函數(shù)描述蟆炊,下面繪制實(shí)驗(yàn)10次,成功4次和5次時(shí)瀑志,系統(tǒng)成功概率p的分布情況涩搓。可以看出k=5時(shí)劈猪,曲線的峰值在p=0.5處昧甘,而k=4時(shí),曲線的峰值在p=0.4處战得。
當(dāng)n=30充边,k=12時(shí),曲線的峰值還在p=0.4處常侦,但是因?yàn)殡S著實(shí)驗(yàn)次數(shù)的增多浇冰,p取其他值的可能就會(huì)變小,對(duì)p的估計(jì)就更有信心聋亡,因此山峰就更陡峭了肘习。

n = 10
k = 5
p = np.linspace(0, 1, 100)
pbeta = stats.beta.pdf(p, k+1, n-k+1)
plt.plot(p, pbeta, label="k=5", lw=2)
k = 4
pbeta = stats.beta.pdf(p, k+1, n-k+1)
plt.plot(p, pbeta, label="k=4", lw=2)
n = 30
k = 12
pbeta = stats.beta.pdf(p, k+1, n-k+1)
plt.plot(p, pbeta, label="k=3", lw=2)

plt.xlabel("$p$")
plt.legend(loc="best")

小結(jié)

這一小節(jié),我們先對(duì)貝葉斯概念有個(gè)初步的了解坡倔,在下一小節(jié)中漂佩,我將進(jìn)一步地介紹不同的數(shù)學(xué)分布,并引入pymc庫的使用罪塔。

轉(zhuǎn)載請(qǐng)注明作者Jason Ding及其出處
Github博客主頁(http://jasonding1354.github.io/)
CSDN博客(http://blog.csdn.net/jasonding1354)
簡(jiǎn)書主頁(http://www.reibang.com/users/2bd9b48f6ea8/latest_articles)
百度搜索jasonding1354進(jìn)入我的博客主頁

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末投蝉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子征堪,更是在濱河造成了極大的恐慌瘩缆,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件请契,死亡現(xiàn)場(chǎng)離奇詭異咳榜,居然都是意外死亡夏醉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門涌韩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畔柔,“玉大人,你說我怎么就攤上這事臣樱“胁粒” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵雇毫,是天一觀的道長(zhǎng)玄捕。 經(jīng)常有香客問我,道長(zhǎng)棚放,這世上最難降的妖魔是什么枚粘? 我笑而不...
    開封第一講書人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮飘蚯,結(jié)果婚禮上馍迄,老公的妹妹穿的比我還像新娘。我一直安慰自己局骤,他們只是感情好攀圈,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著峦甩,像睡著了一般赘来。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凯傲,一...
    開封第一講書人閱讀 49,046評(píng)論 1 285
  • 那天犬辰,我揣著相機(jī)與錄音,去河邊找鬼泣洞。 笑死忧风,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的球凰。 我是一名探鬼主播狮腿,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼呕诉!你這毒婦竟也來了缘厢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤甩挫,失蹤者是張志新(化名)和其女友劉穎贴硫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡英遭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年间护,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片挖诸。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡汁尺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出多律,到底是詐尸還是另有隱情痴突,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布狼荞,位于F島的核電站辽装,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏相味。R本人自食惡果不足惜拾积,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望攻走。 院中可真熱鬧殷勘,春花似錦、人聲如沸昔搂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摘符。三九已至,卻和暖如春策吠,著一層夾襖步出監(jiān)牢的瞬間逛裤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工猴抹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留带族,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓蟀给,卻偏偏與公主長(zhǎng)得像蝙砌,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子跋理,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容