歸根到底,概率論不過是把常識(shí)化作計(jì)算而已。——皮埃爾—西蒙·拉普拉斯 本文我們將學(xué)習(xí)貝葉斯統(tǒng)計(jì)中的核心概念以及一些用于貝葉斯分析的基本工具。大部分內(nèi)容都是一些理論介紹,其中會(huì)涉及一些Python代碼,盡管本文內(nèi)容有點(diǎn)偏理論,可能會(huì)讓習(xí)慣代碼的你感到有點(diǎn)不安,不過這會(huì)讓你在后面應(yīng)用貝葉斯統(tǒng)計(jì)方法解決問題時(shí)容易一些。 本文包含以下主題:
1.1 以建模為中心的統(tǒng)計(jì)學(xué)統(tǒng)計(jì)學(xué)主要是收集、組織、分析并解釋數(shù)據(jù),因此,統(tǒng)計(jì)學(xué)的基礎(chǔ)知識(shí)對(duì)數(shù)據(jù)分析來說至關(guān)重要。分析數(shù)據(jù)時(shí)一個(gè)非常有用的技巧是知道如何運(yùn)用某種編程語言(如Python)編寫代碼。真實(shí)世界里充斥著復(fù)雜而雜亂的數(shù)據(jù),因此對(duì)數(shù)據(jù)做一些預(yù)處理操作必不可少。即便你的數(shù)據(jù)已經(jīng)是整理好的了,掌握一定的編程技巧仍然會(huì)給你帶來很大幫助,因?yàn)槿缃竦呢惾~斯統(tǒng)計(jì)絕大多數(shù)都是計(jì)算統(tǒng)計(jì)學(xué)。 1.1.1 探索式數(shù)據(jù)分析數(shù)據(jù)是統(tǒng)計(jì)學(xué)最基本的組成部分。數(shù)據(jù)的來源多,比如實(shí)驗(yàn)、計(jì)算機(jī)模擬、調(diào)查以及觀測(cè)等。假如我們是數(shù)據(jù)生成或收集人員,首先要考慮的是要解決什么樣的問題以及打算采用什么方法,然后再去著手準(zhǔn)備數(shù)據(jù)。事實(shí)上,統(tǒng)計(jì)學(xué)有一個(gè)叫做實(shí)驗(yàn)設(shè)計(jì)的分支專門研究如何獲取數(shù)據(jù)。在這個(gè)數(shù)據(jù)泛濫的年代,我們有時(shí)候會(huì)忘了獲取數(shù)據(jù)并非總是很便宜。例如,盡管大型強(qiáng)子碰撞加速裝置一天能產(chǎn)生上百TB的數(shù)據(jù),但其建造卻要花費(fèi)數(shù)年的人力和智力。本文已經(jīng)獲取了數(shù)據(jù)并且數(shù)據(jù)是整理好的(這在現(xiàn)實(shí)中通常很少見),以便關(guān)注到本文的主題上來。 假設(shè)我們已經(jīng)有了數(shù)據(jù)集,通常的做法是先對(duì)其探索并可視化,這樣我們就能對(duì)手頭的數(shù)據(jù)有個(gè)直觀的認(rèn)識(shí)??梢酝ㄟ^如下兩步完成所謂的探索式數(shù)據(jù)分析過程:
其中,描述性統(tǒng)計(jì)是指如何用一些指標(biāo)或統(tǒng)計(jì)值來定量地總結(jié)或刻畫數(shù)據(jù),例如你已經(jīng)知道了如何用均值、眾數(shù)、標(biāo)準(zhǔn)差、四分位差等指標(biāo)來描述數(shù)據(jù)。數(shù) 據(jù)可視化是指用生動(dòng)形象的方式表述數(shù)據(jù),你大概對(duì)直方圖、散點(diǎn)圖等表現(xiàn)形式比較熟悉。乍看起來,探索式數(shù)據(jù)分析似乎是在復(fù)雜分析之前的一些準(zhǔn)備工作,或者是作為一些復(fù)雜分析方法的替代品,不過探索式數(shù)據(jù)分析在理解、解釋、檢查、總結(jié)及交流貝葉斯分析結(jié)果等過程中依然有用。 1.1.2 統(tǒng)計(jì)推斷有時(shí)候,畫畫圖、對(duì)數(shù)據(jù)做些簡(jiǎn)單的計(jì)算(比如求均值)就夠了。另外一些時(shí)候,我們希望從數(shù)據(jù)中挖掘出一些更一般性的結(jié)論。我們可能希望了解數(shù)據(jù)是怎么生成的,也可能是想對(duì)未來還未觀測(cè)到的數(shù)據(jù)做出預(yù)測(cè),又或者是希望從多個(gè)對(duì)觀測(cè)值的解釋中找出最合理的一個(gè),這些正是統(tǒng)計(jì)推斷所做的事情。模型分為許多種,統(tǒng)計(jì)推斷依賴的是概率模型,許多科學(xué)研究(以及我們對(duì)真實(shí)世界的認(rèn)識(shí))也都是基于模型的, 大腦不過是對(duì)現(xiàn)實(shí)進(jìn)行建模的一臺(tái)機(jī)器,可以觀看相關(guān)的TED演講了解大腦是如何對(duì)現(xiàn)實(shí)進(jìn)行建模的,網(wǎng)址為http://www./videos/m%C3%A1quina-construye-realidad。 什么是模型?模型是對(duì)給定系統(tǒng)或過程的一種簡(jiǎn)化描述。這些描述只關(guān)注系統(tǒng)中某些重要的部分,因此,大多數(shù)模型的目的并不是解釋整個(gè)系統(tǒng)。此外,假如我們有兩個(gè)模型能用來解釋同一份數(shù)據(jù)并且效果差不多,其中一個(gè)簡(jiǎn)單點(diǎn),另一個(gè)復(fù)雜一些,通常我們傾向于更簡(jiǎn)單的模型,這稱作奧卡姆剃刀,我們會(huì)在第6章模型比較部分討論貝葉斯分析與其之間的聯(lián)系。 不管你打算構(gòu)建哪種模型,模型構(gòu)建都遵循一些相似的基本準(zhǔn)則,我們把貝葉斯模型的構(gòu)建過程總結(jié)為如下3步。 (1)給定一些數(shù)據(jù)以及這些數(shù)據(jù)是如何生成的假設(shè),然后構(gòu)建模型。通常,這里的模型都是一些很粗略的近似,不過大多時(shí)候也夠用了。 (2)利用貝葉斯理論將數(shù)據(jù)和模型結(jié)合起來,根據(jù)數(shù)據(jù)和假設(shè)推導(dǎo)出邏輯結(jié)論,我們稱之為經(jīng)數(shù)據(jù)擬合后的模型。 (3)根據(jù)多種標(biāo)準(zhǔn),包括真實(shí)數(shù)據(jù)和對(duì)研究問題的先驗(yàn)知識(shí),判斷模型擬合得是否合理。 通常,我們會(huì)發(fā)現(xiàn)實(shí)際的建模過程并非嚴(yán)格按照該順序進(jìn)行的,有時(shí)候我們有可能跳到其中任何一步,原因可能是編寫的程序出錯(cuò)了,也可能是找到了某種改進(jìn)模型的方式,又或者是我們需要增加更多的數(shù)據(jù)。 貝葉斯模型是基于概率構(gòu)建的,因此也稱作概率模型。為什么基于概率呢?因?yàn)楦怕蔬@個(gè)數(shù)學(xué)工具能夠很好地描述數(shù)據(jù)中的不確定性,接下來我們將對(duì)其進(jìn)行深入了解。 1.2 概率與不確定性盡管概率論是數(shù)學(xué)中一個(gè)相當(dāng)成熟和完善的分支,但關(guān)于概率的詮釋仍然有不止一種。對(duì)于貝葉斯派而言,概率是對(duì)某一命題不確定性的衡量。假設(shè)我們對(duì)硬幣一無所知,同時(shí)沒有與拋硬幣相關(guān)的任何數(shù)據(jù),那么可以認(rèn)為正面朝上的概率介于0到1之間,也就是說,在缺少信息的情況下,所有情況都是有可能發(fā)生的,此時(shí)不確定性也最大。假設(shè)現(xiàn)在我們知道硬幣是公平的,那么我們可以認(rèn)為正面朝上的概率是0.5或者是0.5附近的某個(gè)值(假如硬幣不是絕對(duì)公平的話),如果此時(shí)收集數(shù)據(jù),我們可以根據(jù)觀測(cè)值進(jìn)一步更新前面的先驗(yàn)假設(shè),從而降低對(duì)該硬幣偏差的不確定性。按照這種定義,提出以下問題都是自然而且合理的:火星上有多大可能存在生命?電子的質(zhì)量是9.1×10?31kg的概率是多大?1816年7月9號(hào)是晴天的概率是多少?值得注意的是,類似火星上是否有生命這種問題的答案是二值化的,但我們關(guān)心的是,基于現(xiàn)有數(shù)據(jù)以及我們對(duì)火星物理?xiàng)l件和生物條件的了解,火星上存在生命的概率有多大。該命題取決于我們當(dāng)前所掌握的信息而非客觀的自然屬性。我們使用概率是因?yàn)槲覀儗?duì)事件不確定,而不代表事件本身是不確定的。由于這種概率的定義取決于我們的認(rèn)知水平,有時(shí)也被稱為概率的主觀定義,這也就解釋了為什么貝葉斯派總被稱作主觀統(tǒng)計(jì)。然而,這種定義并不是說所有命題都是同等有意義的,僅是承認(rèn)我們對(duì)世界的理解是基于現(xiàn)有的數(shù)據(jù)和模型,是不完備的。不基于模型或理論去理解世界是不可能的。即使我們能脫離社會(huì)預(yù)設(shè),最終也會(huì)受到生物上的限制:受進(jìn)化過程影響,我們的大腦已經(jīng)與世界上的模型建立了聯(lián)系。我們注定要以人類的方式去思考,永遠(yuǎn)不可能像蝙蝠或其他動(dòng)物那樣思考。而且,宇宙是不確定的,總的來說我們能做的就是對(duì)其進(jìn)行概率性描述。需要注意的是,不管世界的本原是確定的還是隨機(jī)的,我們都將概率作為衡量不確定性的工具。 邏輯是指如何有效地推論,在亞里士多德學(xué)派或者經(jīng)典的邏輯學(xué)中,一個(gè)命題只能是對(duì)或者錯(cuò),而在貝葉斯學(xué)派定義的概率中,確定性只是概率上的一種特殊情況:一個(gè)正確命題的概率值為1,而一個(gè)錯(cuò)誤命題的概率值為0。只有在我們擁有充分的數(shù)據(jù)表明火星上存在生物生長(zhǎng)和繁殖時(shí),我們才認(rèn)為“火星上存在生命”這一命題為真的概率值為1。不過,需要注意的是,認(rèn)定一個(gè)命題的概率值為0通常是比較困難的,這是因?yàn)榛鹦巧峡赡艽嬖谀承┑胤竭€沒被探測(cè)到,或者是我們的實(shí)驗(yàn)有問題,又或者是某些其他原因?qū)е挛覀冨e(cuò)誤地認(rèn)為火星上沒有生命而實(shí)際上有。與此相關(guān)的是克倫威爾準(zhǔn)則(Cromwell’s Rule),其含義是指在對(duì)邏輯上正確或錯(cuò)誤的命題賦予概率值時(shí),應(yīng)當(dāng)避免使用0或者1。有意思的是,考克斯(Cox)在數(shù)學(xué)上證明了如果想在邏輯推理中加入不確定性,我們就必須使用概率論的知識(shí),由此來說,貝葉斯定理可以視為概率論邏輯上的結(jié)果。因此,從另一個(gè)角度來看,貝葉斯統(tǒng)計(jì)是對(duì)邏輯學(xué)處理不確定性問題的一種擴(kuò)充,當(dāng)然這里毫無對(duì)主觀推理的輕蔑?,F(xiàn)在我們已經(jīng)熟悉了貝葉斯學(xué)派對(duì)概率的理解,接下來就了解下概率相關(guān)的數(shù)學(xué)特性吧。如果你想深入學(xué)習(xí)概率論,可以參考閱讀Joseph K Blitzstein和Jessica Hwang寫的《概率導(dǎo)論》(Introduction to Probability)。 概率值介于[0,1]之間(包括0和1),其計(jì)算遵循一些法則,其中之一是乘法法則: 上式中,A和B同時(shí)發(fā)生的概率值等于B發(fā)生的概率值乘以在B發(fā)生的條件下A也發(fā)生的概率值,其中,表示A和B的聯(lián)合概率, 表示條件概率,二者的現(xiàn)實(shí)意義是不同的,例如,路面是濕的概率跟下雨時(shí)候路面是濕的概率是不同的。條件概率可能比原來的概率高,也可能低。如果B并不能提供任何關(guān)于A的信息,那么, ,也就是說,A和B是相互獨(dú)立的。相反,如果事件B能夠給出關(guān)于事件A的一些信息,那么根據(jù)事件B提供的信息不同,事件A可能發(fā)生的概率會(huì)變得更高或是更低。 條件概率是統(tǒng)計(jì)學(xué)中的一個(gè)核心概念,接下來我們將看到,理解條件概率對(duì)于理解貝葉斯理論至關(guān)重要。這里我們換個(gè)角度來看條件概率,假如我們把前面的公式調(diào)整下順序,就可以得到下面的公式: 需要注意的是,我們不對(duì)0概率事件計(jì)算條件概率,因此,分母的取值范圍是(0,1),從而可以看出條件概率大于或等于聯(lián)合概率。為什么要除以p(B)呢?因?yàn)樵谝呀?jīng)知道事件B發(fā)生的條件下,我們考慮的可能性空間就縮小到了事件B發(fā)生的范圍內(nèi),然后將該范圍內(nèi)A發(fā)生的可能性除以B發(fā)生的可能性便得到了條件概率 。需要強(qiáng)調(diào)的是,所有的概率本質(zhì)上都是條件概率,世間并沒有絕對(duì)的概率。不管我們是否留意,在談到概率時(shí)總是存在這樣或那樣的模型、假設(shè)或條件。比如,當(dāng)我們討論明天下雨的概率時(shí),在地球上、火星上甚至宇宙中其他地方明天下雨的概率是不同的。同樣,硬幣正面朝上的概率取決于我們對(duì)硬幣有偏性的假設(shè)。在理解概率的含義之后,接下來我們討論另一個(gè)話題:概率分布。 1.2.1 概率分布概率分布是數(shù)學(xué)中的一個(gè)概念,用來描述不同事件發(fā)生的可能性,通常這些事件限定在一個(gè)集合內(nèi),代表了所有可能發(fā)生的事件。在統(tǒng)計(jì)學(xué)里可以這么理解:數(shù)據(jù)是從某種參數(shù)未知的概率分布中生成的。由于并不知道具體的參數(shù),我們只能借用貝葉斯定理從僅有的數(shù)據(jù)中反推參數(shù)。概率分布是構(gòu)建貝葉斯模型的基礎(chǔ),不同分布組合在一起之后可以得到一些很有用的復(fù)雜模型。 本文會(huì)介紹一些概率分布,在第一次介紹某個(gè)概率分布時(shí),我們會(huì)先花點(diǎn)時(shí)間理解它。最常見的一種概率分布是高斯分布,又叫正態(tài)分布,其數(shù)學(xué)公式描述如下: 上式中,μ和σ是高斯分布的兩個(gè)參數(shù)。第1個(gè)參數(shù)μ是該分布的均值(同時(shí)也是中位數(shù)和眾數(shù)),其取值范圍是任意實(shí)數(shù),即 ;第2個(gè)參數(shù)σ是標(biāo)準(zhǔn)差,用來衡量分布的離散程度,其取值只能為正。由于μ和σ的取值范圍無窮大,因此高斯分布的實(shí)例也有無窮多。雖然數(shù)學(xué)公式這一表達(dá)形式簡(jiǎn)潔明了,也有人稱之有美感,不過得承認(rèn)公式還是有些不夠直觀,我們可以嘗試用Python代碼將公式的含義重新表示出來。首先看看高斯分布都長(zhǎng)什么樣: import matplotlib.pyplot as plt 上面代碼的輸出結(jié)果如下: 由概率分布生成的變量(例如x)稱作隨機(jī)變量,當(dāng)然這并不是說該變量可以取任意值,相反,我們觀測(cè)到該變量的數(shù)值受到概率分布的約束,而其隨機(jī)性源于我們只知道變量的分布卻無法準(zhǔn)確預(yù)測(cè)該變量的值。通常,如果一個(gè)隨機(jī)變量服從在參數(shù)μ和σ下的高斯分布,我們可以這樣表示該變量: 其中,符號(hào)~讀作服從于某種分布。 隨機(jī)變量分為兩種:連續(xù)變量和離散變量。連續(xù)隨機(jī)變量可以從某個(gè)區(qū)間內(nèi)取任意值(我們可以用Python中的浮點(diǎn)型數(shù)據(jù)來表示),而離散隨機(jī)變量只能取某些特定的值(我們可以用Python中的整型數(shù)據(jù)來表示)。 許多模型都假設(shè),如果對(duì)服從于同一個(gè)分布的多個(gè)隨機(jī)變量進(jìn)行連續(xù)采樣,那么各個(gè)變量的采樣值之間相互獨(dú)立,我們稱這些隨機(jī)變量是獨(dú)立同分布的。用數(shù)學(xué)語言描述就是,如果兩個(gè)隨機(jī)變量x和y對(duì)于所有可能的取值都滿足 ,那么稱這兩個(gè)變量相互獨(dú)立。 時(shí)間序列是不滿足獨(dú)立同分布的一個(gè)典型例子。在時(shí)間序列中,需要對(duì)時(shí)間維度的變量多加留心。下面的例子是從http://cdiac.esd.中獲取的數(shù)據(jù)。這份數(shù)據(jù)記錄了從1959年到1997年大氣中二氧化碳的含量。我們用以下代碼將它寫出來: data = np.genfromtxt('mauna_loa_CO2.csv', delimiter=',') 圖中每個(gè)點(diǎn)表示每個(gè)月空氣中二氧化碳含量的測(cè)量值,可以看到測(cè)量值是與時(shí)間相關(guān)的。我們可以觀察到兩個(gè)趨勢(shì):一個(gè)是季節(jié)性的波動(dòng)趨勢(shì)(這與植物周期性生長(zhǎng)和衰敗有關(guān));另一個(gè)是二氧化碳含量整體性的上升趨勢(shì)。 1.2.2 貝葉斯定理與統(tǒng)計(jì)推斷到目前為止,我們已經(jīng)學(xué)習(xí)了一些統(tǒng)計(jì)學(xué)中的基本概念和詞匯,接下來讓我們首先看看神奇的貝葉斯定理: 看起來稀松平常,似乎跟小學(xué)課本里的公式差不多,不過這就是關(guān)于貝葉斯統(tǒng)計(jì)你所需要掌握的全部。首先看看貝葉斯定理是怎么來的,這對(duì)我們理解它會(huì)很有幫助。事實(shí)上,我們已經(jīng)掌握了如何推導(dǎo)它所需要的全部概率論知識(shí)。
現(xiàn)在,讓我們看看這個(gè)式子的含義及其重要性。首先,上式表明和并不一定相等,這一點(diǎn)非常重要,日常分析中即使系統(tǒng)學(xué)習(xí)過統(tǒng)計(jì)學(xué)和概率論的人也很容易忽略這點(diǎn)。我們舉個(gè)簡(jiǎn)單例子來說明為什么二者不一定相等:有兩條腿的動(dòng)物就是人的概率和人有兩條腿的概率顯然是不同的。幾乎所有人都有兩條腿(除了某些人因?yàn)橄忍煨栽蚧蛘咭馔鈱?dǎo)致沒有兩條腿),但是有兩條腿的動(dòng)物中很多都不是人類,比如鳥類。 在前面的式子中,如果我們將H理解為假設(shè),D理解為數(shù)據(jù),那么貝葉斯定理告訴我們的就是,在給定數(shù)據(jù)的條件下如何計(jì)算假設(shè)成立的概率。不過,如何把假設(shè)融入貝葉斯定理中去呢?答案是概率分布。換句話說,H是一種狹義上的假設(shè),我們所做的實(shí)際上是尋找模型的參數(shù)(更準(zhǔn)確地說是參數(shù)的分布)。因此,與其稱H為假設(shè),不如稱之為模型,這樣能避免歧義。 貝葉斯定理非常重要,后面會(huì)反復(fù)用到,這里我們先熟悉下其各個(gè)部分的名稱:
先驗(yàn)分布反映的是在觀測(cè)到數(shù)據(jù)之前我們對(duì)參數(shù)的了解,如果我們對(duì)參數(shù)一無所知(就跟《權(quán)力的游戲》中的雪諾一樣),那么可以用一個(gè)不包含太多信息的均勻分布來表示。由于引入了先驗(yàn),有些人會(huì)認(rèn)為貝葉斯統(tǒng)計(jì)是偏主觀的,然而,這些先驗(yàn)不過是構(gòu)建模型時(shí)的一些假設(shè)罷了,其主觀性跟似然差不多。 似然是指如何在實(shí)驗(yàn)分析中引入觀測(cè)數(shù)據(jù),反映的是在給定參數(shù)下得到某組觀測(cè)數(shù)據(jù)的可信度。 后驗(yàn)分布是貝葉斯分析的結(jié)果,反映的是在給定數(shù)據(jù)和模型的條件下我們對(duì)問題的全部認(rèn)知。需要注意,后驗(yàn)指的是我們模型中參數(shù)的概率分布而不是某個(gè)值,該分布正比于先驗(yàn)乘以似然。有這么個(gè)笑話:貝葉斯學(xué)派就像是這樣一類人,心里隱約期待著一匹馬,偶然間瞥見了一頭驢,結(jié)果堅(jiān)信他看到的是一頭騾子。當(dāng)然了,如果要刻意糾正這個(gè)笑話的話,在先驗(yàn)和似然都比較含糊的情況下,我們會(huì)得到一個(gè)(模糊的)“騾子”后驗(yàn)。不過,這個(gè)笑話也講出了這樣一個(gè)道理,后驗(yàn)其實(shí)是對(duì)先驗(yàn)和似然的某種折中。從概念上講,后驗(yàn)可以看做是在觀測(cè)到數(shù)據(jù)之后對(duì)先驗(yàn)的更新。事實(shí)上,一次分析中的后驗(yàn),在收集到新的數(shù)據(jù)之后,也可以看做是下一次分析中的先驗(yàn)。這使得貝葉斯分析特別適合于序列化的數(shù)據(jù)分析,比如通過實(shí)時(shí)處理來自氣象站和衛(wèi)星的數(shù)據(jù)從而提前預(yù)警災(zāi)害,更詳細(xì)的內(nèi)容可以閱讀在線機(jī)器學(xué)習(xí)方面的算法。 最后一個(gè)概念是證據(jù),也稱作邊緣似然。正式地講,證據(jù)是在模型的參數(shù)取遍所有可能值的條件下得到指定觀測(cè)值的概率的平均。不過,本文的大部分內(nèi)容并不關(guān)心這個(gè)概念,我們可以簡(jiǎn)單地把它當(dāng)作歸一化系數(shù)。我們只關(guān)心參數(shù)的相對(duì)值而非絕對(duì)值。把證據(jù)這一項(xiàng)忽略掉之后,貝葉斯定理可以表示成如下正比例形式: 1.3 單參數(shù)推斷前面,我們學(xué)習(xí)了幾個(gè)重要概念,其中有兩個(gè)是貝葉斯統(tǒng)計(jì)的核心概念,這里我們用一句話再重新強(qiáng)調(diào)下:概率是用來衡量參數(shù)不確定性的,貝葉斯定理就是用來在觀測(cè)到新的數(shù)據(jù)時(shí)正確更新這些概率以期降低我們的不確定性。 現(xiàn)在我們已經(jīng)知道什么是貝葉斯統(tǒng)計(jì)了,接下來就從一個(gè)簡(jiǎn)單的例子入手,通過推斷單個(gè)未知參數(shù)來學(xué)習(xí)如何進(jìn)行貝葉斯統(tǒng)計(jì)。 1.3.1 拋硬幣問題拋硬幣是統(tǒng)計(jì)學(xué)中的一個(gè)經(jīng)典問題,其描述如下:我們隨機(jī)拋一枚硬幣,重復(fù)一定次數(shù),記錄正面朝上和反面朝上的次數(shù),根據(jù)這些數(shù)據(jù),我們需要回答諸如這枚硬幣是否公平,以及更進(jìn)一步這枚硬幣有多不公平等問題。拋硬幣是一個(gè)學(xué)習(xí)貝葉斯統(tǒng)計(jì)非常好的例子,一方面是因?yàn)閹缀跞巳硕际煜佊矌胚@一過程,另一方面是因?yàn)檫@個(gè)模型很簡(jiǎn)單,我們可以很容易計(jì)算并解決這個(gè)問題。此外,許多真實(shí)問題都包含兩個(gè)互斥的結(jié)果,例如0或者1、正或者負(fù)、奇數(shù)或者偶數(shù)、垃圾郵件或者正常郵件、安全或者不安全、健康或者不健康等。因此,即便我們討論的是硬幣,該模型也同樣適用于前面這些問題。 為了估計(jì)硬幣的偏差,或者更廣泛地說,想要用貝葉斯學(xué)派理論解決問題,我們需要數(shù)據(jù)和一個(gè)概率模型。對(duì)于拋硬幣這個(gè)問題,假設(shè)我們已試驗(yàn)了一定次數(shù)并且記錄了正面朝上的次數(shù),也就是說數(shù)據(jù)部分已經(jīng)準(zhǔn)備好了,剩下的就是模型部分了??紤]到這是第一個(gè)模型,我們會(huì)列出所有必要的數(shù)學(xué)公式,并且一步一步推導(dǎo)。 通用模型首先,我們要抽象出偏差的概念。我們稱,如果一枚硬幣總是正面朝上,那么它的偏差就是1,反之,如果總是反面朝上,那么它的偏差就是0,如果正面朝上和反面朝上的次數(shù)各占一半,那么它的偏差就是0.5。這里用參數(shù)θ來表示偏差,用y表示N次拋硬幣實(shí)驗(yàn)中正面朝上的次數(shù)。根據(jù)貝葉斯定理,我們有如下公式: 這里需要指定我們將要使用的先驗(yàn)和似然分別是什么。讓我們首先從似然開始。 選擇似然假設(shè)多次拋硬幣的結(jié)果相互之間沒有影響,也就是說每次拋硬幣都是相互獨(dú)立的,同時(shí)還假設(shè)結(jié)果只有兩種可能:正面朝上或者反面朝上。但愿你能認(rèn)同我們對(duì)這個(gè)問題做出的合理假設(shè)?;谶@些假設(shè),一個(gè)不錯(cuò)的似然候選是二項(xiàng)分布: 這是一個(gè)離散分布,表示N次拋硬幣實(shí)驗(yàn)中y次正面朝上的概率(或者更通俗地描述是,N次實(shí)驗(yàn)中,y次成功的概率)。下面的代碼生成了9個(gè)二項(xiàng)分布,每個(gè)子圖中的標(biāo)簽顯示了對(duì)應(yīng)的參數(shù): n_params = [1, 2, 4] 二項(xiàng)分布是似然的一個(gè)合理選擇,直觀上講,θ可以看作拋一次硬幣時(shí)正面朝上的可能性,并且該過程發(fā)生了y次。類似地,我們可以把“1?θ”看作拋一次硬幣時(shí)反面朝上的概率,并且該過程發(fā)生了“N?y”次。 假如我們知道了θ,那么就可以從二項(xiàng)分布得出硬幣正面朝上的分布。如果我們不知道θ,也別灰心,在貝葉斯統(tǒng)計(jì)中,當(dāng)我們不知道某個(gè)參數(shù)的時(shí)候,就對(duì)其賦予一個(gè)先驗(yàn)。接下來繼續(xù)選擇先驗(yàn)。 選擇先驗(yàn)這里我們選用貝葉斯統(tǒng)計(jì)中最常見的beta分布,作為先驗(yàn),其數(shù)學(xué)形式如下: 仔細(xì)觀察上面的式子可以看出,除了Γ部分之外,beta分布和二項(xiàng)分布看起來很像。Γ是希臘字母中大寫的伽馬,用來表示伽馬函數(shù)。現(xiàn)在我們只需要知道,用分?jǐn)?shù)表示的第一項(xiàng)是一個(gè)正則化常量,用來保證該分布的積分為1,此外,和兩個(gè)參數(shù)用來控制具體的分布形態(tài)。beta分布是我們到目前為止見到的第3個(gè)分布,利用下面的代碼,我們可以深入了解其形態(tài): params = [0.5, 1, 2, 3] 為什么要在模型中使用beta分布呢?在拋硬幣以及一些其他問題中使用beta分布的原因之一是:beta分布的范圍限制在0到1之間,這跟我們的參數(shù)一樣;另一個(gè)原因是其通用性,從前面的圖可以看出,該分布可以有多種形狀,包括均勻分布、類高斯分布、U型分布等。第3個(gè)原因是:beta分布是二項(xiàng)分布(前面我們使用了該分布描述似然)的共軛先驗(yàn)。似然的共軛先驗(yàn)是指,將該先驗(yàn)分布與似然組合在一起之后,得到的后驗(yàn)分布與先驗(yàn)分布的表達(dá)式形式仍然是一樣的。簡(jiǎn)單說,就是每次用beta分布作為先驗(yàn)、二項(xiàng)分布作為似然時(shí),我們會(huì)得到一個(gè)beta分布的后驗(yàn)。除beta分布之外還有許多其他共軛先驗(yàn),例如高斯分布,其共軛先驗(yàn)就是自己。關(guān)于共軛先驗(yàn)更詳細(xì)的內(nèi)容可以查看https://en./wiki/Conjugate_prior。許多年來,貝葉斯分析都限制在共軛先驗(yàn)范圍內(nèi),這主要是因?yàn)楣曹椖茏尯篁?yàn)在數(shù)學(xué)上變得更容易處理,要知道貝葉斯統(tǒng)計(jì)中一個(gè)常見問題的后驗(yàn)都很難從分析的角度去解決。在建立合適的計(jì)算方法來解決任意后驗(yàn)之前,這只是個(gè)折中的辦法。 計(jì)算后驗(yàn)首先回憶一下貝葉斯定理:后驗(yàn)正比于似然乘以先驗(yàn)。 對(duì)于我們的問題而言,需要將二項(xiàng)分布乘以beta分布: 現(xiàn)在,對(duì)上式進(jìn)行簡(jiǎn)化。針對(duì)我們的實(shí)際問題,可以先把與θ不相關(guān)的項(xiàng)去掉而不影響結(jié)果,于是得到下式: 重新整理之后得到: 可以看出,上式和beta分布的形式很像(除了歸一化部分),其對(duì)應(yīng)的參數(shù)分別為 、。也就是說,在拋硬幣這個(gè)問題中,后驗(yàn)分布是如下beta分布: 計(jì)算后驗(yàn)并畫圖 theta_real = 0.35 在上圖的第一行中,實(shí)驗(yàn)的次數(shù)為0,因此第一個(gè)圖中的曲線描繪的是先驗(yàn)分布,其中有3條曲線,每條曲線分別表示一種先驗(yàn)。
剩余的子圖描繪了后續(xù)實(shí)驗(yàn)的后驗(yàn)分布,回想一下,后驗(yàn)可以看做是在給定數(shù)據(jù)之后更新了的先驗(yàn)。實(shí)驗(yàn)(拋硬幣)的次數(shù)和正面朝上的次數(shù)分別標(biāo)注在每個(gè)子圖中。此外每個(gè)子圖中在橫軸0.35附近還有一個(gè)黑色的豎線,表示的是真實(shí)的θ,顯然,在真實(shí)情況下,我們并不知道該值,在這里標(biāo)識(shí)出來只是為了方便理解。從這幅圖中可以學(xué)到很多貝葉斯分析方面的知識(shí)。
先驗(yàn)的影響以及如何選擇合適的先驗(yàn)從前面的例子可以看出,先驗(yàn)對(duì)分析的結(jié)果會(huì)有影響。一些貝葉斯分析的新手(以及一些詆毀該方法的人)會(huì)對(duì)如何選擇先驗(yàn)感到茫然,因?yàn)樗麄儾幌M闰?yàn)起到?jīng)Q定性作用,而是更希望數(shù)據(jù)本身替自己說話!有這樣的想法很正常,不過我們得牢記,數(shù)據(jù)并不會(huì)真的“說話”,只有在模型中才會(huì)有意義,包括數(shù)學(xué)上的和腦海中的模型。面對(duì)同一主題下的同一份數(shù)據(jù),不同人會(huì)有不同的看法,這類例子在科學(xué)史上有許多,查看以下鏈接可以了解《紐約時(shí)報(bào)》最近一次實(shí)驗(yàn)的例子:http://www./interactive/2016/09/20/upshot/the-error-the-polling-world-rarely-talks-about.html?_r=0。 有些人青睞于使用沒有信息量的先驗(yàn)(也稱作均勻的、含糊的或者發(fā)散的先驗(yàn)),這類先驗(yàn)對(duì)分析過程的影響最小。本文將遵循Gelman、McElreath和Kruschke 3人的建議[1],更傾向于使用帶有較弱信息量的先驗(yàn)。在許多問題中,我們對(duì)參數(shù)可以取的值一般都會(huì)有些了解,比如,參數(shù)只能是正數(shù),或者知道參數(shù)近似的取值范圍,又或者是希望該值接近0或大于/小于某值。這種情況下,我們可以給模型加入一些微弱的先驗(yàn)信息而不必?fù)?dān)心該先驗(yàn)會(huì)掩蓋數(shù)據(jù)本身的信息。由于這類先驗(yàn)會(huì)讓后驗(yàn)近似位于某一合理的邊界內(nèi),因此也被稱作正則化先驗(yàn)。 當(dāng)然,使用帶有較多信息量的強(qiáng)先驗(yàn)也是可行的。視具體的問題不同,有可能很容易或者很難找到這類先驗(yàn),例如在我工作的領(lǐng)域(結(jié)構(gòu)生物信息學(xué)),人們會(huì)盡可能地利用先驗(yàn)信息,通過貝葉斯或者非貝葉斯的方式來了解和預(yù)測(cè)蛋白質(zhì)的結(jié)構(gòu)。這樣做是合理的,原因是我們?cè)跀?shù)十年間已經(jīng)從上千次精心設(shè)計(jì)的實(shí)驗(yàn)中收集了數(shù)據(jù),因而有大量可信的先驗(yàn)信息可供使用。如果你有可信的先驗(yàn)信息,完全沒有理由不去使用。試想一下,如果一個(gè)汽車工程師每次設(shè)計(jì)新車的時(shí)候,他都要重新發(fā)明內(nèi)燃機(jī)、輪子乃至整個(gè)汽車,這顯然不是正確的方式。 現(xiàn)在我們知道了先驗(yàn)有許多種,不過這并不能緩解我們選擇先驗(yàn)時(shí)的焦慮?;蛟S,最好是沒有先驗(yàn),這樣事情就簡(jiǎn)單了。不過,不論是否基于貝葉斯,模型都在某種程度上擁有先驗(yàn),即使這里的先驗(yàn)并沒有明確表示出來。事實(shí)上,許多頻率統(tǒng)計(jì)學(xué)方面的結(jié)果可以看做是貝葉斯模型在一定條件下的特例,比如均勻先驗(yàn)。讓我們?cè)僮屑?xì)看看前面那幅圖,可以看到藍(lán)色后驗(yàn)分布的峰值與頻率學(xué)分析中θ的期望值是一致的: 注意,這里是點(diǎn)估計(jì)而不是后驗(yàn)分布(或者其他類型的分布)。由此看出,你沒辦法完全避免先驗(yàn),不過如果你在分析中引入先驗(yàn),得到的會(huì)是概率分布分布而不只是最可能的一個(gè)值。明確引入先驗(yàn)的另一個(gè)好處是,我們會(huì)得到更透明的模型,這意味著更容易評(píng)判、(廣義上的)調(diào)試以及優(yōu)化。構(gòu)建模型是一個(gè)循序漸進(jìn)的過程,有時(shí)候可能只需要幾分鐘,有時(shí)候則可能需要數(shù)年;有時(shí)候整個(gè)過程可能只有你自己,有時(shí)候則可能包含你不認(rèn)識(shí)的人。而且,模型復(fù)現(xiàn)很重要,而模型中透明的假設(shè)能有助于復(fù)現(xiàn)。 在特定分析任務(wù)中,如果我們對(duì)某個(gè)先驗(yàn)或者似然不確定,可以自由使用多個(gè)先驗(yàn)或者似然進(jìn)行嘗試。模型構(gòu)建過程中的一個(gè)環(huán)節(jié)就是質(zhì)疑假設(shè),而先驗(yàn)就是質(zhì)疑的對(duì)象之一。不同的假設(shè)會(huì)得到不同的模型,根據(jù)數(shù)據(jù)和與問題相關(guān)的領(lǐng)域知識(shí),我們可以對(duì)這些模型進(jìn)行比較。 由于先驗(yàn)是貝葉斯統(tǒng)計(jì)中的一個(gè)核心內(nèi)容,在接下來遇到新的問題時(shí)我們還會(huì)反復(fù)討論它,因此,如果你對(duì)前面的討論內(nèi)容感到有些疑惑,別太擔(dān)心,要知道人們?cè)谶@個(gè)問題上已經(jīng)困惑了數(shù)十年并且相關(guān)的討論一直在繼續(xù)。 1.3.2 報(bào)告貝葉斯分析結(jié)果現(xiàn)在我們已經(jīng)有了后驗(yàn),相關(guān)的分析也就結(jié)束了。下面我們可能還需要對(duì)分析結(jié)果進(jìn)行總結(jié),將分析結(jié)果與別人分享,或者記錄下來以備日后使用。 1.3.3 模型注釋和可視化根據(jù)受眾不同,你可能在交流分析結(jié)果的同時(shí)還需要交流模型。以下是一種簡(jiǎn)單表示概率模型的常見方式: 這是我們拋硬幣例子中用到的模型。符號(hào)~表示左邊隨機(jī)變量的分布服從右邊的分布形式,也就是說,這里θ服從于參數(shù)為α和β的Beta分布,而y服從于參數(shù)為n = 1和p = θ的二項(xiàng)分布。該模型還可以用類似Kruschke文中的圖表示成如下形式: 在第一層,根據(jù)先驗(yàn)生成了θ,然后通過似然生成最下面的數(shù)據(jù)。圖中的箭頭表示變量之間的依賴關(guān)系,符號(hào)~表示變量的隨機(jī)性。 本書中用到的類似Kruschke中的圖都是由Rasmus B??th(http://www./blog/2013/10/diy-kruschke-style-diagrams/)提供的模板生成的。 1.3.4 總結(jié)后驗(yàn)貝葉斯分析的結(jié)果是后驗(yàn)分布,該分布包含了有關(guān)參數(shù)在給定數(shù)據(jù)和模型下的所有信息。如果可能的話,我們只需要將后驗(yàn)分布展示給觀眾即可。通常,一個(gè)不錯(cuò)的做法是:同時(shí)給出后驗(yàn)分布的均值(或者眾數(shù)、中位數(shù)),這樣能讓我們了解該分布的中心,此外還可以給出一些描述該分布的衡量指標(biāo),如標(biāo)準(zhǔn)差,這樣人們能對(duì)我們估計(jì)的離散程度和不確定性有一個(gè)大致的了解。拿標(biāo)準(zhǔn)差衡量類似正態(tài)分布的后驗(yàn)分布很合適,不過對(duì)于一些其他類型的分布(如偏態(tài)分布)卻可能得出誤導(dǎo)性結(jié)論,因此,我們還可以采用下面的方式衡量。 最大后驗(yàn)密度一個(gè)經(jīng)常用來描述后驗(yàn)分布分散程度的概念是最大后驗(yàn)密度( Highest Posterior Density,HPD)區(qū)間。一個(gè)HPD區(qū)間是指包含一定比例概率密度的最小區(qū)間,最常見的比例是95%HPD或98%HPD,通常還伴隨著一個(gè)50%HPD。如果我們說某個(gè)分析的HPD區(qū)間是[2, 5],其含義是指:根據(jù)我們的模型和數(shù)據(jù),參數(shù)位于2~5的概率是0.95。這是一個(gè)非常直觀的解釋,以至于人們經(jīng)常會(huì)將頻率學(xué)中的置信區(qū)間與貝葉斯方法中的可信區(qū)間弄混淆。如果你對(duì)頻率學(xué)的范式比較熟悉,請(qǐng)注意這兩種區(qū)間的區(qū)別。貝葉斯學(xué)派的分析告訴我們的是參數(shù)取值的概率,這在頻率學(xué)的框架中是不可能的,因?yàn)轭l率學(xué)中的參數(shù)是固定值,頻率學(xué)中的置信區(qū)間只能包含或不包含參數(shù)的真實(shí)值。在繼續(xù)深入之前,有一點(diǎn)需要注意:選擇95%還是50%或者其他什么值作為HPD區(qū)間的概率密度比例并沒有什么特殊的地方,這些不過是經(jīng)常使用的值罷了。比如,我們完全可以選用比例為91.37%的HPD區(qū)間。如果你選的是95%,這完全沒問題,只是要記住這只是個(gè)默認(rèn)值,究竟選擇多大比例仍然需要具體問題具體分析。 對(duì)單峰分布計(jì)算95%HPD很簡(jiǎn)單,只需要計(jì)算出2.5%和97.5%處的值即可: def naive_hpd(post): 對(duì)于多峰分布而言,計(jì)算HPD要稍微復(fù)雜些。如果把對(duì)HPD的原始定義應(yīng)用到混合高斯分布上,我們可以得到: np.random.seed(1) 從上圖可以看出,通過原始HPD定義計(jì)算出的可信區(qū)間包含了一部分概率較低的區(qū)間,位于[0,2]。為了正確計(jì)算出HPD,這里我們使用了 from plot_post import plot_post 從上圖可以看出,95%HPD包含兩個(gè)區(qū)間,同時(shí) 1.4 后驗(yàn)預(yù)測(cè)檢查貝葉斯方法的一個(gè)優(yōu)勢(shì)是:一旦得到了后驗(yàn)分布,我們可以根據(jù)該后驗(yàn)生成未來的數(shù)據(jù)y,即用來做預(yù)測(cè)。后驗(yàn)預(yù)測(cè)檢查主要是對(duì)觀測(cè)數(shù)據(jù)和預(yù)測(cè)數(shù)據(jù)進(jìn)行比較從而發(fā)現(xiàn)這兩個(gè)集合的不同之處,其目的是進(jìn)行一致性檢查。生成的數(shù)據(jù)和觀測(cè)的數(shù)據(jù)應(yīng)該看起來差不多,否則有可能是建模出現(xiàn)了問題或者輸入數(shù)據(jù)到模型時(shí)出了問題,不過就算我們沒有出錯(cuò),兩個(gè)集合仍然有可能出現(xiàn)不同。嘗試去理解其中的偏差有助于我們改進(jìn)模型,或者至少能知道我們模型的極限。即使我們并不知道如何去改進(jìn)模型,但是理解模型捕捉到了問題或數(shù)據(jù)的哪些方面以及沒能捕捉到哪些方面也是非常有用的信息。也許模型能夠很好地捕捉到數(shù)據(jù)中的均值但卻沒法預(yù)測(cè)出罕見值,這可能是個(gè)問題,不過如果我們只關(guān)心均值,這個(gè)模型對(duì)我們而言也還是可用的。通常我們的目的不是去聲稱一個(gè)模型是錯(cuò)誤的,我們更愿意遵循George Box的建議,即所有模型都是錯(cuò)的,但某些是有用的。我們只想知道模型的哪個(gè)部分是值得信任的,并測(cè)試該模型是否在特定方面符合我們的預(yù)期。不同學(xué)科對(duì)模型的信任程度顯然是不同的,物理學(xué)中研究的系統(tǒng)是在高可控條件下依據(jù)高深理論運(yùn)行的,因而模型可以看做是對(duì)現(xiàn)實(shí)的不錯(cuò)描述,而在一些其他學(xué)科如社會(huì)學(xué)和生物學(xué)中,研究的是錯(cuò)綜復(fù)雜的孤立系統(tǒng),因而模型對(duì)系統(tǒng)的認(rèn)知較弱。盡管如此,不論你研究的是哪一門學(xué)科,都需要對(duì)模型進(jìn)行檢查,利用后驗(yàn)預(yù)測(cè)和本文學(xué)到的探索式數(shù)據(jù)分析中的方法去檢查模型。 1.5 安裝必要的Python庫本書用到的代碼是用Python 3.5寫的,建議使用Python 3的最新版本運(yùn)行,盡管大多數(shù)代碼也能在更老的Python版本(包括Python 2.7)上運(yùn)行,不過可能會(huì)需要做些微調(diào)。 本書建議使用Anaconda安裝Python及相關(guān)庫,Anaconda是一個(gè)用于科學(xué)計(jì)算的軟件分發(fā),你可以從以下鏈接下載并了解更多:https://www./downloads。在系統(tǒng)上裝好Anaconda之后,就可以通過以下方式安裝Python庫了: conda install NamePackage 我們會(huì)用到以下Python庫:
在命令行中執(zhí)行以下命令即可安裝最新穩(wěn)定版的PyMC3: pip install pymc3 1.6 總結(jié)我們的貝葉斯之旅首先圍繞統(tǒng)計(jì)建模、概率論和貝葉斯定理做了一些簡(jiǎn)短討論,然后用拋硬幣的例子介紹了貝葉斯建模和數(shù)據(jù)分析,借用這個(gè)經(jīng)典例子傳達(dá)了貝葉斯統(tǒng)計(jì)中的一些最重要的思想,比如用概率分布構(gòu)建模型并用概率分布來表示不確定性。此外我們嘗試揭示了如何選擇先驗(yàn),并將其與數(shù)據(jù)分析中的一些其他問題置于同等地位(怎么選擇似然,為什么要解決該問題等)。本文的最后討論了如何解釋和報(bào)告貝葉斯分析的結(jié)果。本文我們對(duì)貝葉斯分析的一些主要方面做了簡(jiǎn)要總結(jié),后面還會(huì)重新回顧這些內(nèi)容,從而充分理解和吸收,并為后面理解更高級(jí)的內(nèi)容打下基礎(chǔ)。下面我們會(huì)重點(diǎn)關(guān)注一些構(gòu)建和分析更復(fù)雜模型的技巧,此外,還會(huì)介紹PyMC3并將其用于實(shí)現(xiàn)和分析貝葉斯模型。 1.7 練習(xí)我們尚不清楚大腦是如何運(yùn)作的,是按照貝葉斯方式?還是類似貝葉斯的某種方式?又或許是進(jìn)化過程中形成的某種啟發(fā)式的方式?不管如何,我們至少知道自己是通過數(shù)據(jù)、例子和練習(xí)來學(xué)習(xí)的,盡管你可能對(duì)此有不同的意見,不過我仍然強(qiáng)烈建議你完成以下練習(xí)。 (1)修改生成本文的第3個(gè)圖的代碼,在圖中增加一條豎線用來表示觀測(cè)到的正面朝上的比例(正面朝上的次數(shù)/拋硬幣的次數(shù)),將該豎線的位置與每個(gè)子圖中后驗(yàn)的眾數(shù)進(jìn)行比較。 (2)嘗試用不同的先驗(yàn)參數(shù)(beta值)和不同的實(shí)驗(yàn)數(shù)據(jù)(正面朝上的次數(shù)和實(shí)驗(yàn)次數(shù))重新繪制本文的第3個(gè)圖。 (3)閱讀維基百科上有關(guān)Cromwell準(zhǔn)則的內(nèi)容:https://en./wiki/Cromwell%27s_rule。 (4)探索不同參數(shù)下高斯分布、二項(xiàng)分布和beta分布的圖像,你可以為每個(gè)分布單獨(dú)畫一個(gè)圖而不是全都畫在一個(gè)網(wǎng)格中。 PyMOL社區(qū)活躍者傾情奉獻(xiàn)! 發(fā)現(xiàn)Python貝葉斯分析的力量! 本書介紹了貝葉斯統(tǒng)計(jì)中的主要概念,以及將其應(yīng)用于數(shù)據(jù)分析的方法。本書采用編程計(jì)算的實(shí)用方法介紹了貝葉斯建模的基礎(chǔ),使用一些手工構(gòu)造的數(shù)據(jù)和一部分簡(jiǎn)單的真實(shí)數(shù)據(jù)來解釋和探索貝葉斯框架中的核心概念,然后在本書涉及的模型中,抽象出了線性模型用于解決回歸和分類問題,此外還詳細(xì)解釋了混合模型和分層模型,并單獨(dú)用一章討論了如何做模型選擇,最后還簡(jiǎn)單介紹了非參模型和高斯過程。 |
|