全棧必備 貝葉斯方法
數(shù)據(jù)的重要性毋庸置疑,但是如何讓數(shù)據(jù)產(chǎn)生價(jià)值呢?
對(duì)一個(gè)全棧老碼農(nóng)而言,經(jīng)常在開發(fā)或者研發(fā)管理的時(shí)候遇到各種預(yù)測(cè)、決策、推斷、分類、檢測(cè)、排序等諸多問題。面對(duì)“你的代碼還有bug么?”這樣的挑戰(zhàn),一種理智的回答是,我們已經(jīng)執(zhí)行了若干測(cè)試用例,當(dāng)前代碼中存在bug的可能性是百分之零點(diǎn)幾。也就是說,我們對(duì)當(dāng)前程序中沒有bug的信心是百分之九十九點(diǎn)幾。這實(shí)際上就是一直貝葉斯思維,或者說使用了貝葉斯方法。不論我們看到,還是沒有看到,貝葉斯方法都在那里,熠熠生輝。
如何預(yù)測(cè)當(dāng)前軟件有沒有bug呢?還是要從貝葉斯定理看起。
貝葉斯定理的淺解
對(duì)老碼農(nóng)來說,貝葉斯定理的概率表達(dá)相對(duì)清晰,理解起來會(huì)相對(duì)容易?;貞浺幌挛覀儗W(xué)過的概率論,聯(lián)合概率是滿足交換律的,即:
- P(A and B) = P (B and A)
對(duì)聯(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_)
從而有:
其中B_ 是與B相反的事件。就測(cè)試與bug 之間的估算而言,《貝葉斯推斷的思想》(http://www.jianshu.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)象”,那么貝葉斯公式看成:
陳老師在《這的理解貝葉斯公式嗎》和《又一個(gè)生活中的貝葉斯應(yīng)用》給出了幾個(gè)通俗易懂的例子,這里不再贅述。
回歸到碼農(nóng)生活,我們?cè)诟纳葡到y(tǒng)功能的時(shí)候,通常的一個(gè)手段是AB測(cè)試。AB測(cè)試是用來檢測(cè)兩種不同處理方式的差異化程度的一種統(tǒng)計(jì)設(shè)計(jì)模式,例如兩個(gè)網(wǎng)站誰會(huì)帶來更高的轉(zhuǎn)化率,這里的轉(zhuǎn)化可以是用戶的購買、注冊(cè)、或其他的行為。AB測(cè)試的關(guān)鍵點(diǎn)在于組別之間只能容許一個(gè)不同點(diǎn)。實(shí)驗(yàn)后的分析一般都是用假設(shè)檢驗(yàn)完成的,例如均值差異檢驗(yàn)或者比例差異檢驗(yàn),往往涉及Z分?jǐn)?shù)或令人困惑的p值,而用貝葉斯方法則會(huì)自然的多。
對(duì)A,B兩個(gè)網(wǎng)站的轉(zhuǎn)化概率進(jìn)行建模。轉(zhuǎn)化率在0~1之間,可采用Beta分布。如果先驗(yàn)是Beta(a1,b1),且 觀測(cè)到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)
- // 對(duì)后驗(yàn)概率進(jìn)行采樣,用rvs方法生成樣本
- samples = 20000
- samples_posterior_A = posterior_A.rvs(samples)
- samples_posterior_B = posterior_B.rvs(samples)
- // 對(duì)后驗(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ù)對(duì)應(yīng)早期行為,或后期行為,定義各種變化點(diǎn) 4)定義參數(shù)的概率分布 5)參數(shù)概率分布的變量選擇,直到一個(gè)可以假設(shè)的均勻分布
對(duì)先驗(yàn)及后驗(yàn)概率的選擇,針對(duì)應(yīng)用場(chǎng)景而定。就先驗(yàn)分布而言,除了常見的分布外,還有: * Gamma分布,指數(shù)隨機(jī)變量的推廣 * 威沙特分布 ,是所有半正定矩陣的分布,是一個(gè)協(xié)方差矩陣的適當(dāng)?shù)南闰?yàn)。 * Beta分布,隨機(jī)變量定義在0到1之間,使其成為概率和比例的熱門選擇。 * 冪律分布,滿足公司規(guī)模和公司數(shù)量之間的關(guān)系
在AB測(cè)試中使用了Beta分布, 應(yīng)用了一個(gè)Beta先驗(yàn)分布連同二項(xiàng)式生成的觀測(cè)數(shù)據(jù)形成一個(gè)Beta后驗(yàn)分布這一原理。
當(dāng)面對(duì)多種對(duì)象之間的因果關(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í),即對(duì)DAG進(jìn)行遍歷,計(jì)算各節(jié)點(diǎn)的概率表
- 網(wǎng)絡(luò)推理,對(duì)因果關(guān)系得到置信概率
- 推理結(jié)果
例如, 社交網(wǎng)絡(luò)中不真實(shí)賬戶的檢測(cè)問題。首先確定網(wǎng)絡(luò)中的隨機(jī)變量: * 賬戶的真實(shí)性 A * 頭像的真實(shí)性 H * 發(fā)帖即日志的密度 L * 好友的密度 F
使用觀測(cè)值示例化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ò)》一文中對(duì)這一例子給出了相對(duì)詳細(xì)的說明。
可以說,貝葉斯方法席卷了整個(gè)概率論,并將應(yīng)用延伸到各個(gè)問題領(lǐng)域,所有需要作出概率預(yù)測(cè)的地方都可以見到貝葉斯方法的影子,特別地,貝葉斯方法對(duì)機(jī)器學(xué)習(xí)能夠有什么幫助呢?
貝葉斯與機(jī)器學(xué)習(xí)
機(jī)器學(xué)習(xí)在業(yè)界炙手可熱,但我們?cè)跈C(jī)器學(xué)習(xí)里同樣會(huì)遇到預(yù)測(cè)、決策、分類、檢測(cè)等問題,貝葉斯方法同樣大有用武之地。
機(jī)器學(xué)習(xí)中有大量的模型,如線性模型、非線性模型,可以采用貝葉斯方法來做模型的預(yù)測(cè)。也就是說,某一場(chǎng)景可能采用的模型是***多的,可以用概率分布去描述它。對(duì)于假設(shè)的先驗(yàn),對(duì)新來的樣本做預(yù)測(cè)如計(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)分布。對(duì)機(jī)器學(xué)習(xí)中的模型本身,也可以通過貝葉斯方法嘗試改進(jìn),例如貝葉斯SVM, 高斯過程的貝葉斯等等。
另外,貝葉斯方法對(duì)深度學(xué)習(xí)而言,至少在調(diào)參的這一環(huán)節(jié)還是很有用的。在神經(jīng)網(wǎng)絡(luò)中,每一層參數(shù)如卷積核的大小和數(shù)量等,都不會(huì)在深度學(xué)習(xí)中被模型自動(dòng)優(yōu)化的,需要手工指定,這或許就是貝葉斯優(yōu)化。
【本文來自51CTO專欄作者“老曹”的原創(chuàng)文章,作者微信公眾號(hào):喔家ArchiSelf,id:wrieless-com】