數(shù)據(jù)的重要性毋庸置疑悟泵,但是如何讓數(shù)據(jù)產(chǎn)生價(jià)值呢杈笔?
對一個(gè)全棧老碼農(nóng)而言,經(jīng)常在開發(fā)或者研發(fā)管理的時(shí)候遇到各種預(yù)測糕非、決策蒙具、推斷、分類朽肥、檢測禁筏、排序等諸多問題。面對“你的代碼還有bug么衡招?”這樣的挑戰(zhàn)篱昔,一種理智的回答是,我們已經(jīng)執(zhí)行了若干測試用例始腾,代碼中存在bug的可能性是百分之零點(diǎn)幾州刽。也就是說,我們對當(dāng)前程序中沒有bug的信心是百分之九十九點(diǎn)幾浪箭。這實(shí)際上就是一直貝葉斯思維穗椅,或者說使用了貝葉斯方法。不論我們看到奶栖,還是沒有看到匹表,它都在那里门坷,熠熠生輝。
如果預(yù)測當(dāng)前軟件有沒有bug呢袍镀?還是要從貝葉斯定理看起默蚌。
貝葉斯定理的淺解
對老碼農(nóng)來說,貝葉斯定理的概率表達(dá)相對清晰苇羡,理解起來會(huì)相對容易绸吸。回憶一下我們學(xué)過的概率論宣虾,聯(lián)合概率是滿足交換律的惯裕,即:
P(A and B) = P (B and A)
對聯(lián)合概率以條件概率展開:
P(A and B ) = P(A) P(B|A)
P(B and A ) = P(B) P(A|B)
從而得到:
P(A) P(B|A) = P(B) P(A|B)
簡單的變換一下,得到:
P(B|A)= P(A|B) P(B)/P(A)
大功告成绣硝,這就是神奇的貝葉斯定理蜻势。其中:
- P(B) 為先驗(yàn)概率,即在得到新數(shù)據(jù)前某一假設(shè)的概率鹉胖;
- P(B|A) 為后驗(yàn)概率握玛,即在觀察到新數(shù)據(jù)后計(jì)算該假設(shè)的概率;
- P(A|B)為似然度甫菠,即在該假設(shè)下得到這一數(shù)據(jù)的概率挠铲;
- P(A)為標(biāo)準(zhǔn)化常量,即在任何假設(shè)下得到這一數(shù)據(jù)的概率寂诱。
還可以加點(diǎn)料拂苹,在計(jì)算P(A)的時(shí)候,可以用加法定理表示:
P(A) = P(A and B) + P(A and B_) = P(A|B)P(B)+ P(A|B_) P(B_)
從而有:
P(B|A) =P(A|B)P(B)/{P(A|B)P(B)+P(A|B_)P(B_)}
其中B_ 是與B相反的事件痰洒。就測試與bug 之間的估算而言瓢棒,《貝葉斯推斷的思想》(http://www.reibang.com/p/0a038974d48c)一文給出了貝葉斯推斷的結(jié)果,其中就使用了這樣的方法丘喻。
貝葉斯方法
貝葉斯方法是一個(gè)非常通用的推理框架脯宿,用客觀的新信息更新我們最初關(guān)于某個(gè)事物的信念后,就會(huì)得到一個(gè)新的改進(jìn)了的信念泉粉。通過引入先驗(yàn)的不確定性连霉,允許了初始推斷的錯(cuò)誤,獲得了更新的證據(jù)后嗡靡,也沒有放棄初始的推斷跺撼,而是調(diào)整為更符合目前的證據(jù)。
但是讨彼,P(A|B) 和 P(B|A) 之類的經(jīng)常讓人混淆财边,@待字閨中的陳老師給出了理解的一個(gè)關(guān)鍵點(diǎn),區(qū)分出規(guī)律和現(xiàn)象点骑,就是將A看成“規(guī)律”酣难,B看成“現(xiàn)象”,那么貝葉斯公式看成:
P(規(guī)律|現(xiàn)象)= P(現(xiàn)象|規(guī)律)P(規(guī)律)/P(現(xiàn)象)
陳老師在《這的理解貝葉斯公式嗎》和《又一個(gè)生活中的貝葉斯應(yīng)用》給出了幾個(gè)通俗易懂的例子黑滴,這里不再贅述憨募。
回歸到碼農(nóng)生活,我們在改善系統(tǒng)功能的時(shí)候袁辈,通常的一個(gè)手段是AB測試菜谣。AB測試是用來檢測兩種不同處理方式的差異化程度的一種統(tǒng)計(jì)設(shè)計(jì)模式,例如兩個(gè)網(wǎng)站誰會(huì)帶來更高的轉(zhuǎn)化率晚缩,這里的轉(zhuǎn)化可以是用戶的購買、注冊、或其他的行為憨攒。AB測試的關(guān)鍵點(diǎn)在于組別之間只能容許一個(gè)不同點(diǎn)昂羡。實(shí)驗(yàn)后的分析一般都是用假設(shè)檢驗(yàn)完成的,例如均值差異檢驗(yàn)或者比例差異檢驗(yàn)鸣皂,往往涉及Z分?jǐn)?shù)或令人困惑的p值抓谴,而用貝葉斯方法則會(huì)自然的多。
對A寞缝,B兩個(gè)網(wǎng)站的轉(zhuǎn)化概率進(jìn)行建模癌压。轉(zhuǎn)化率在0~1之間,可采用Beta分布荆陆。如果先驗(yàn)是Beta(a1滩届,b1),且 觀測到N次訪問里有X次轉(zhuǎn)化被啼,那么此時(shí)的后驗(yàn)分布是Beta(a1+X,b1+N-X). 假設(shè)先驗(yàn)是Beta(1帜消,1),等價(jià)于【0趟据,1】上的均勻分布券犁,則示例代碼如下:
from spicy.stats import beta
a1_prior = 1
b1_prior =1
visitors_A = 12345 // 網(wǎng)站A的訪問人數(shù)
visitors_B = 1616 // 網(wǎng)站B的訪問人數(shù)
conversions_from_A = 1200 // 網(wǎng)站A的轉(zhuǎn)化人數(shù)
conversions_from_B = 15 0 // 網(wǎng)站B的轉(zhuǎn)化人數(shù)
posterior_A = beta(a1_prior+ conversions_from_A,b1_prior + visitors_A -conversions_from_A)
posterior_B = Beta(a1_prior+converiosns_from_B,b1_prior + visitors_B-conversions_from_B)
// 對后驗(yàn)概率進(jìn)行采樣,用rvs方法生成樣本
samples = 20000
samples_posterior_A = posterior_A.rvs(samples)
samples_posterior_B = posterior_B.rvs(samples)
// 對后驗(yàn)概率進(jìn)行比較
print (samples_posterior_A > samples_posterior_B).mean()
使用貝葉斯方法汹碱,是從思考數(shù)據(jù)是如何產(chǎn)生的開始粘衬。
1)什么隨機(jī)變量能過描述這些統(tǒng)計(jì)數(shù)據(jù)
2)確實(shí)概率分布的所需參數(shù)
3)參數(shù)對應(yīng)早期行為,或后期行為咳促,定義各種變化點(diǎn)
4)定義參數(shù)的概率分布
5)參數(shù)概率分布的變量選擇稚新,直到一個(gè)可以假設(shè)的均勻分布
對先驗(yàn)及后驗(yàn)概率的選擇,針對應(yīng)用場景而定跪腹。就先驗(yàn)分布而言褂删,除了常見的分布外,還有:
- Gamma分布冲茸,指數(shù)隨機(jī)變量的推廣
- 威沙特分布 屯阀,是所有半正定矩陣的分布缅帘,是一個(gè)協(xié)方差矩陣的適當(dāng)?shù)南闰?yàn)。
- Beta分布难衰,隨機(jī)變量定義在0到1之間钦无,使其成為概率和比例的熱門選擇。
- 冪律分布盖袭,滿足公司規(guī)模和公司數(shù)量之間的關(guān)系
在AB測試中使用了Beta分布失暂, 應(yīng)用了一個(gè)Beta先驗(yàn)分布連同二項(xiàng)式生成的觀測數(shù)據(jù)形成一個(gè)Beta后驗(yàn)分布這一原理。
當(dāng)面對多種對象之間的因果關(guān)系的時(shí)候鳄虱,貝葉斯方法演變成為了貝葉斯網(wǎng)絡(luò)弟塞。
貝葉斯網(wǎng)絡(luò)
貝葉斯網(wǎng)絡(luò)是為了解決不定性和不完整性問題而提出的,在多個(gè)領(lǐng)域中獲得了廣泛應(yīng)用拙已。貝葉斯網(wǎng)絡(luò)是基于概率推理的圖形化網(wǎng)絡(luò)决记,而貝葉斯公式則是這個(gè)概率網(wǎng)絡(luò)的基礎(chǔ)。貝葉斯網(wǎng)絡(luò)中的每個(gè)點(diǎn)代表一個(gè)隨機(jī)變量悠栓,都是具有實(shí)際含義霉涨、需要人為設(shè)計(jì)的,點(diǎn)和點(diǎn)之間的邊代表不確定的因果關(guān)系惭适,例如 節(jié)點(diǎn)E直接影響到節(jié)點(diǎn)H笙瑟,即E→H,則用從E指向H的箭頭建立結(jié)點(diǎn)E到結(jié)點(diǎn)H的有向弧(E,H)癞志,權(quán)值(即連接強(qiáng)度)用條件概率P(H|E)來表示往枷。
實(shí)際上,如果事物之間的關(guān)系能夠用一條鏈串起來凄杯,形成了貝葉斯網(wǎng)絡(luò)的一個(gè)特例——馬爾可夫鏈错洁,換個(gè)角度看, 貝葉斯網(wǎng)絡(luò)是馬爾可夫鏈的非線性擴(kuò)展戒突。貝葉斯網(wǎng)絡(luò)中當(dāng)某點(diǎn)的一個(gè)證據(jù)出現(xiàn)后屯碴,整個(gè)網(wǎng)絡(luò)中事件的概率都會(huì)變化。
簡單地膊存,由于多個(gè)變量間存在著可能的依賴性导而,貝葉斯網(wǎng)絡(luò)說明了其中的聯(lián)合條件概率分布,允許在變量的子集間定義條件獨(dú)立性隔崎。使用貝葉斯網(wǎng)絡(luò)的過程與使用貝葉斯方法的過程是類似的:
- 通過多個(gè)離散變量建立網(wǎng)絡(luò)今艺,是一個(gè)有向無環(huán)圖
- 參數(shù)的設(shè)置或?qū)W習(xí),即對DAG進(jìn)行遍歷爵卒,計(jì)算各節(jié)點(diǎn)的概率表
- 網(wǎng)絡(luò)推理虚缎,對因果關(guān)系得到置信概率
- 推理結(jié)果
例如, 社交網(wǎng)絡(luò)中不真實(shí)賬戶的檢測問題钓株。首先確定網(wǎng)絡(luò)中的隨機(jī)變量:
- 賬戶的真實(shí)性 A
- 頭像的真實(shí)性 H
- 發(fā)帖即日志的密度 L
- 好友的密度 F
使用觀測值示例化H实牡,L陌僵,F(xiàn),把隨機(jī)值賦給A铲掐,得到
P(A|H,L,F) = P(H|A)P(L|A)P(F|A,H)
然后就可以在社交網(wǎng)絡(luò)中嘗試使用該推理結(jié)果了拾弃。在《算法雜貨鋪——分類算法之貝葉斯網(wǎng)絡(luò)》一文中對這一例子給出了相對詳細(xì)的說明。
可以說摆霉,貝葉斯方法席卷了整個(gè)概率論,并將應(yīng)用延伸到各個(gè)問題領(lǐng)域奔坟,所有需要作出概率預(yù)測的地方都可以見到貝葉斯方法的影子携栋,特別地,貝葉斯方法對機(jī)器學(xué)習(xí)能夠有什么幫助呢咳秉?
貝葉斯與機(jī)器學(xué)習(xí)
機(jī)器學(xué)習(xí)在業(yè)界炙手可熱婉支,但我們在機(jī)器學(xué)習(xí)里同樣會(huì)遇到預(yù)測、決策澜建、分類向挖、檢測等問題,貝葉斯方法同樣大有用武之地炕舵。
機(jī)器學(xué)習(xí)中有大量的模型何之,如線性模型、非線性模型咽筋,可以采用貝葉斯方法來做模型的預(yù)測溶推。也就是說,某一場景可能采用的模型是無限多的奸攻,可以用概率分布去描述它蒜危。對于假設(shè)的先驗(yàn),對新來的樣本做預(yù)測如計(jì)算它的似然睹耐,然后用前面推出來的后驗(yàn)分布做積分辐赞,這個(gè)給定模型下樣本的似然,就是所有可能模型的分布硝训。
機(jī)器學(xué)習(xí)中模型的選擇和比較也是一個(gè)常見的問題响委。例如,在分類問題時(shí)捎迫,我們使用線性模型還是深度學(xué)習(xí)的非線性模型呢晃酒?貝葉斯方法是這樣考慮的: 用A 表示一個(gè)模型類別,可能是線性模型窄绒,B 表示另一個(gè)模型類別贝次,可能是非線性模型。在同樣的數(shù)據(jù)集X下彰导,計(jì)算在A蛔翅,B 情況下觀察到訓(xùn)練集的似然Ma敲茄,Mb,然后比較Ma和Mb山析,這是貝葉斯方法做模型選擇的一個(gè)基本規(guī)則堰燎。
實(shí)際上, 貝葉斯定理是信息處理的一種準(zhǔn)則笋轨, 輸入是一個(gè)先驗(yàn)分布和一個(gè)似然函數(shù)秆剪,輸出是一個(gè)后驗(yàn)分布。對機(jī)器學(xué)習(xí)中的模型本身爵政,也可以通過貝葉斯方法嘗試改進(jìn)仅讽,例如貝葉斯SVM, 高斯過程的貝葉斯等等。
另外钾挟,貝葉斯方法對深度學(xué)習(xí)而言洁灵,至少在調(diào)參的這一環(huán)節(jié)還是很有用的。在神經(jīng)網(wǎng)絡(luò)中掺出,每一層參數(shù)如卷積核的大小和數(shù)量等徽千,都不會(huì)在深度學(xué)習(xí)中被模型自動(dòng)優(yōu)化的,需要手工指定汤锨,這或許就是貝葉斯優(yōu)化双抽。
其他參考資料:
《貝葉斯方法-概率編程與貝葉斯推斷》
《貝葉斯思維:統(tǒng)計(jì)建模的python學(xué)習(xí)法》
《數(shù)學(xué)之美番外篇:平凡而又神奇的貝葉斯方法》
《Bayesian Method for Machine Learning》:www.cs.toronto.edu/~radford/ftp/bayes-tut.pdf