雷鋒網按:不少人都在機器學習的過程中聽說過貝葉斯分類器,但它是如何與機器學習建立聯系的?作者zygmunt zając 提供了一些基礎概念,雷鋒網也嘗試對其中的一些概念進行簡化說明,讓小白們也能容易地了解貝葉斯在機器學習中所起的作用。
簡單說來,貝葉斯學派認為,機率是一個人對于一件事的信念強度,機率是主觀的。
但頻率主義學派所持的是不同的觀念:他們認為參數是客觀存在的, 即使是未知的,但都是固定值,不會改變。
雷鋒網參閱了一些資料,嘗試以我們以前課堂上所學的機率論來解釋一下,頻率學派認為進行一定數量的重複實驗後,如果出現某個現象的次數與總次數趨于某個值,那麼這個比值就會傾向于固定。最簡單的例子就是抛硬币了,在理想情況下,我們知道抛硬币正面朝上的機率會趨向于1/2。
非常好了解不是麼?但貝葉斯提出了一種截然不同的觀念,他認為機率不應該這麼簡單地計算,而需要加入先驗機率的考慮。
先驗機率也就是說,我們先設定一個假設(或信念,belief)。然後我們通過一定的實驗來證明/推翻這個假設,這就是後驗。随後,舊的後驗會成為一個新的先驗,如此重複下去。而歸根結底,就得到了這樣一個著名的公式:
p( a | b ) = p( b | a ) * p( a ) / p( b )
(a | b表示a給定b的機率,也就是說,如果b發生,a發生的可能性有多大。反之亦然。)
在貝葉斯機器學習中,我們同樣采用貝葉斯公式從 data(d)中推導模型參數(θ)。
p(θ|d) = p(d|θ) * p(θ) / p(data)
值得說明的是,p(data)在通常情況下無法被計算,但這并不會帶來什麼問題。因為我們在推導及求解的過程中,最重要的還是那些含有θ的表達式,而 p(data)到底是多少,其實并不需要真的求出來。
p(θ) 為先驗機率,也就是我們對樣本空間中各類樣本所占比例的可能性推測。通常我們認為,當訓練集包含重組的獨立同分步樣本時,p(θ) 可通過各類樣本出現的頻率進行判斷。關于先驗的其它知識,可以參考 where priors come from 的介紹。
p(d|θ) 是樣本 d 相對于類标記θ的類條件機率,也就是我們了解的「似然」。人們經常會使用可能性來評估模型,如果對實際資料能做出更高可能性的預測,那麼這個模型自然更為有效。
那麼,等式左邊的 p(θ|d) 就是我們最終想得到的東西,也就是基于先驗機率與資料所獲得的模型參數所呈現的機率分布。
如果能通過資料采樣來估計機率分布參數,最經典的方法就是最大似然估計(maximum-likelihood
estimation,mle),也就是我們所說的極大似然法。而如果将先驗考慮在内,那麼就是最大後驗機率(map)。如果在先驗均勻分布的情況下,這兩者應該相同。
我們先将貝葉斯方法分為兩類:一為統計模組化,另一個為機率機器學習。後者包括了所謂的非參數方法。
模組化通常在資料稀缺且難以獲得時得以應用,比如在社會科學和其它難以進行大規模對照實驗的環境中。想象一下,如果一個資料學家手頭隻擁有少量的資料,那麼他會不遺餘力地對算法進行調整,以期讓每個資料都發揮最大的功用。
此外,對于小資料而言,最重要的是量化不确定性,這也正是貝葉斯方法所擅長的。而貝葉斯方法——尤其是 mcmc——通常計算量巨大,這又與小資料是共存的。
我們現在嘗試把“機率”一詞替換“貝葉斯”。從這個角度而言,它與其它分類方法并沒有差別。如果從分類考慮,大多數分類器都能夠輸出機率預測,比如最經典的svm(支援變量機)。但需要指出的是,這些機率隻是源于分類器的信念陳述,而它們是否符合真實的機率則完全是另一回事了,這也就是所謂的校準(calibration)。
接下來我們要說說貝葉斯非參數模型的一些内容,顧名思義,這個名字代表着模型中的參數數量可以随着資料的增大或減少而自适應模型的變化。這與svm有些相似,它能在訓練點中選擇支援向量,而貝葉斯非參數模型也能根據資料多少來選擇參數确定模型。比較流行的貝葉斯非參數模型包括高斯回歸過程,還有隐含狄裡克雷分布(lda)。
高斯回歸過程有點類似于 svm——采用核心并具有類似的可伸縮性。其最大的特點在于回歸特性,分類做為事後的判斷,而對于 svm 而言,這個過程是相反的。
此外,gp 是從頭開始進行機率判斷,而 svm 不是。大多數的正常方法隻提供資料點估計,而貝葉斯非參數模型則會輸出不确定性估計。
不過,「悲劇」還沒有結束,像 gp 這樣的複雜方法通常在假設均勻的情況下操作,而實際上,噪聲實際上可能出現于輸入空間(異方差)上。
高斯回歸過程的流行主要應用于機器學習算法的超參數優化上。資料非常小,也隻有幾個參數需要調整。
latent dirichlet allocation(lda)是一種非監督機器學習技術,可以用來識别大規模文檔集(document collection)或語料庫(corpus)中潛藏的主題資訊。
對于語料庫中的每篇文檔,lda定義了如下生成過程(generativeprocess):
1.對每一篇文檔,從主題分布中抽取一個主題; 2.從上述被抽到的主題所對應的單詞分布中抽取一個單詞; 3.重複上述過程直至周遊文檔中的每一個單詞。
至于軟體,stan
可以說是貝葉斯最為知名的機率性程式設計語言,它能夠根據你的指定訓練你想要的貝葉斯模型,能用 python、r 或其它語言編寫,不過現在 stan
有了一個叫 nuts(no-u-turn sampler)的現代采樣器,它能夠得到比靜态 hmc 更高的計算效率。
stan 的另一個有趣的地方在于它能自動變分推理。
變分推理是用于近似貝葉斯推理的可縮放技術。推導變分推理算法需要繁瑣的模型特定計算,而自動變分推理(advi)算法能夠為中型資料應用于小型模組化鋪平道路。
而在 python 中,最為有名的是 pymc。它并非是最先進的一個,也沒有經常進行優化或疊代,但它的效果也很不錯。
infer.net 是微軟的機率程式設計庫,它主要由 c# 或 f# 等語言提供,但也能從.net 的 ironpython 中調用。
此外,還有 crosscat 等用于分析高維資料表領域通用的貝葉斯方法。
stan 也有一個通用手冊,另外 pymc 的引導書上也有不少例子。
關于貝葉斯與機器學習的一切,雷鋒網就為大家介紹到這裡,所提供的資源也可能無法完全覆寫現在所有的優秀讀物,如果你有更好的建議,歡迎與雷鋒網交流讨論。
本文作者:奕欣