貝葉斯網絡,看完這篇我終於理解了(附代碼)!

1. 對概率圖模型的理解

概率圖模型是用圖來表示變量概率依賴關係的理論,結合概率論與圖論的知識,利用圖來表示與模型有關的變量的聯合概率分佈。由圖靈獎獲得者Pearl開發出來。

如果用一個詞來形容概率圖模型(Probabilistic Graphical Model)的話,那就是“優雅”。對於一個實際問題,我們希望能夠挖掘隱含在數據中的知識。概率圖模型構建了這樣一幅圖,用觀測結點表示觀測到的數據,用隱含結點表示潛在的知識,用邊來描述知識與數據的相互關係,最後基於這樣的關係圖獲得一個概率分佈,非常“優雅”地解決了問題。

概率圖中的節點分爲隱含節點和觀測節點,邊分爲有向邊和無向邊。從概率論的角度,節點對應於隨機變量,邊對應於隨機變量的依賴或相關關係,其中有向邊表示單向的依賴,無向邊表示相互依賴關係

概率圖模型分爲**貝葉斯網絡(Bayesian Network)和馬爾可夫網絡(Markov Network)**兩大類。貝葉斯網絡可以用一個有向圖結構表示,馬爾可夫網絡可以表 示成一個無向圖的網絡結構。更詳細地說,概率圖模型包括了樸素貝葉斯模型、最大熵模型、隱馬爾可夫模型、條件隨機場、主題模型等,在機器學習的諸多場景中都有着廣泛的應用。

2. 細數貝葉斯網絡

2.1 頻率派觀點

長久以來,人們對一件事情發生或不發生的概率,只有固定的0和1,即要麼發生,要麼不發生,從來不會去考慮某件事情發生的概率有多大,不發生的概率又是多大。而且概率雖然未知,但最起碼是一個確定的值。比如如果問那時的人們一個問題:“有一個袋子,裏面裝着若干個白球和黑球,請問從袋子中取得白球的概率是多少?”他們會想都不用想,會立馬告訴你,取出白球的概率就是1/2,要麼取到白球,要麼取不到白球,即θ只能有一個值,而且不論你取了多少次,取得白球的概率θ始終都是1/2,即不隨觀察結果X 的變化而變化。

這種頻率派的觀點長期統治着人們的觀念,直到後來一個名叫Thomas Bayes的人物出現。

2.2 貝葉斯學派

托馬斯·貝葉斯Thomas Bayes(1702-1763)在世時,並不爲當時的人們所熟知,很少發表論文或出版著作,與當時學術界的人溝通交流也很少,用現在的話來說,貝葉斯就是活生生一民間學術“屌絲”,可這個“屌絲”最終發表了一篇名爲“An essay towards solving a problem in the doctrine of chances”,翻譯過來則是:機遇理論中一個問題的解。你可能覺得我要說:這篇論文的發表隨機產生轟動效應,從而奠定貝葉斯在學術史上的地位。

這篇論文可以用上面的例子來說明,“有一個袋子,裏面裝着若干個白球和黑球,請問從袋子中取得白球的概率θ是多少?”貝葉斯認爲取得白球的概率是個不確定的值,因爲其中含有機遇的成分。比如,一個朋友創業,你明明知道創業的結果就兩種,即要麼成功要麼失敗,但你依然會忍不住去估計他創業成功的機率有多大?你如果對他爲人比較瞭解,而且有方法、思路清晰、有毅力、且能團結周圍的人,你會不由自主的估計他創業成功的機率可能在80%以上。這種不同於最開始的“非黑即白、非0即1”的思考方式,便是貝葉斯式的思考方式。

先簡單總結下頻率派與貝葉斯派各自不同的思考方式:

  • 頻率派把需要推斷的參數θ看做是固定的未知常數,即概率雖然是未知的,但最起碼是確定的一個值,同時,樣本X 是隨機的,所以頻率派重點研究樣本空間,大部分的概率計算都是針對樣本X 的分佈;
  • 而貝葉斯派的觀點則截然相反,他們認爲參數是隨機變量,而樣本X 是固定的,由於樣本是固定的,所以他們重點研究的是參數的分佈。

貝葉斯派既然把看做是一個隨機變量,所以要計算的分佈,便得事先知道的無條件分佈,即在有樣本之前(或觀察到X之前),有着怎樣的分佈呢?

比如往檯球桌上扔一個球,這個球落會落在何處呢?如果是不偏不倚的把球拋出去,那麼此球落在檯球桌上的任一位置都有着相同的機會,即球落在檯球桌上某一位置的概率服從均勻分佈。這種在實驗之前定下的屬於基本前提性質的分佈稱爲先驗分佈,或着無條件分佈

其中,先驗信息一般來源於經驗跟歷史資料。比如林丹跟某選手對決,解說一般會根據林丹歷次比賽的成績對此次比賽的勝負做個大致的判斷。再比如,某工廠每天都要對產品進行質檢,以評估產品的不合格率θ,經過一段時間後便會積累大量的歷史資料,這些歷史資料便是先驗知識,有了這些先驗知識,便在決定對一個產品是否需要每天質檢時便有了依據,如果以往的歷史資料顯示,某產品的不合格率只有0.01%,便可視爲信得過產品或免檢產品,只每月抽檢一兩次,從而省去大量的人力物力。

後驗分佈π(θ|X)一般也認爲是在給定樣本X的情況下的θ條件分佈,而使π(θ|X)達到最大的值θMD稱爲最大後驗估計,類似於經典統計學中的極大似然估計

綜合起來看,則好比是人類剛開始時對大自然只有少得可憐的先驗知識,但隨着不斷觀察、實驗獲得更多的樣本、結果,使得人們對自然界的規律摸得越來越透徹。所以,貝葉斯方法既符合人們日常生活的思考方式,也符合人們認識自然的規律,經過不斷的發展,最終佔據統計學領域的半壁江山,與經典統計學分庭抗禮。

2.3 貝葉斯定理

條件概率(又稱後驗概率)就是事件A在另外一個事件B已經發生條件下的發生概率。條件概率表示爲P(A|B),讀作“在B條件下A的概率”。

比如上圖,在同一個樣本空間Ω中的事件或者子集A與B,如果隨機從Ω中選出的一個元素屬於B,那麼這個隨機選擇的元素還屬於A的概率就定義爲在B的前提下A的條件概率:

P(AB)=P(AB)P(B)P(A|B)=\frac{P(A\cap_{}B)}{P(B)}

聯合概率:P(AB)P(A,B)P(A\cap_{}B)或者P(A,B)

邊緣概率(先驗概率):P(A)或者P(B)

2.4 貝葉斯網絡

貝葉斯網絡(Bayesian network),又稱信念網絡(Belief Network),或有向無環圖模型(directed acyclic graphical model),是一種概率圖模型,於1985年由Judea Pearl首先提出。它是一種模擬人類推理過程中因果關係的不確定性處理模型,其網絡拓樸結構是一個有向無環圖(DAG)。

貝葉斯網絡的有向無環圖中的節點表示隨機變量{X1,X2,...,Xn}\{X_1,X_2,...,X_n\}

它們可以是可觀察到的變量,或隱變量、未知參數等。認爲有因果關係(或非條件獨立)的變量或命題則用箭頭來連接。若兩個節點間以一個單箭頭連接在一起,表示其中一個節點是“因(parents)”,另一個是“果(children)”,兩節點就會產生一個條件概率值。

例如,假設節點E直接影響到節點H,即E→H,則用從E指向H的箭頭建立結點E到結點H的有向弧(E,H),權值(即連接強度)用條件概率P(H|E)來表示,如下圖所示:

簡言之,把某個研究系統中涉及的隨機變量,根據是否條件獨立繪製在一個有向圖中,就形成了貝葉斯網絡。其主要用來描述隨機變量之間的條件依賴,用圈表示隨機變量(random variables),用箭頭表示條件依賴(conditional dependencies)。

此外,對於任意的隨機變量,其聯合概率可由各自的局部條件概率分佈相乘而得出:

P(x1,...,xk)=P(xkx1,...,xk1)...P(x2x1)P(x1)P(x_1,...,x_k)=P(x_k|x_1,...,x_{k-1})...P(x_2|x_1)P(x_1)

2.4.1 貝葉斯網絡的結構形式

1. head-to-head

依上圖,所以有:P(a,b,c) = P(a)*P(b)*P(c|a,b)成立,即在c未知的條件下,a、b被阻斷(blocked),是獨立的,稱之爲head-to-head條件獨立。

2. tail-to-tail

考慮c未知,跟c已知這兩種情況:

  1. 在c未知的時候,有:P(a,b,c)=P©*P(a|c)*P(b|c),此時,沒法得出P(a,b) = P(a)P(b),即c未知時,a、b不獨立。
  2. 在c已知的時候,有:P(a,b|c)=P(a,b,c)/P©,然後將P(a,b,c)=P©*P(a|c)*P(b|c)帶入式子中,得到:P(a,b|c)=P(a,b,c)/P© = P©*P(a|c)*P(b|c) / P© = P(a|c)*P(b|c),即c已知時,a、b獨立。

3. head-to-tail

還是分c未知跟c已知這兩種情況:

  1. c未知時,有:P(a,b,c)=P(a)*P(c|a)*P(b|c),但無法推出P(a,b) = P(a)P(b),即c未知時,a、b不獨立。

  2. c已知時,有:P(a,b|c)=P(a,b,c)/P©,且根據P(a,c) = P(a)*P(c|a) = P©*P(a|c),可化簡得到:

    P(a,bc)P(a,b|c)

    =P(a,b,c)/P(c)P(a,b,c)/P(c)

    =P(a)P(ca)P(bc)/P(c)P(a)*P(c|a)*P(b|c) / P(c)

    =P(a,c)P(bc)/P(c)P(a,c)*P(b|c)/P(c)

    =P(ac)P(bc)P(a|c)*P(b|c)

    所以,在c給定的條件下,a,b被阻斷(blocked),是獨立的,稱之爲head-to-tail條件獨立。

    這個head-to-tail其實就是一個鏈式網絡,如下圖所示:

    根據之前對head-to-tail的講解,我們已經知道,在xi給定的條件下,xi+1的分佈和x1,x2…xi-1條件獨立。意味着啥呢?意味着:xi+1的分佈狀態只和xi有關,和其他變量條件獨立。通俗點說,當前狀態只跟上一狀態有關,跟上上或上上之前的狀態無關。這種順次演變的隨機過程,就叫做馬爾科夫鏈(Markov chain)。對於馬爾科夫鏈我們下一節再細講。

2.4.2 因子圖

wikipedia上是這樣定義因子圖的:將一個具有多變量的全局函數因子分解,得到幾個局部函數的乘積,以此爲基礎得到的一個雙向圖叫做因子圖(Factor Graph)。

通俗來講,所謂因子圖就是對函數進行因子分解得到的一種概率圖。一般內含兩種節點:變量節點和函數節點。我們知道,一個全局函數通過因式分解能夠分解爲多個局部函數的乘積,這些局部函數和對應的變量關係就體現在因子圖上。

舉個例子,現在有一個全局函數,其因式分解方程爲:

g(x1,x2,x3,x4,x5)=fA(x1)fB(x2)fC(x1,x2,x3)fD(x3,x4)fE(x3,x5)g(x_1,x_2,x_3,x_4,x_5)=f_A(x_1)f_B(x_2)f_C(x1,x2,x3)f_D(x_3,x_4)f_E(x_3,x_5)

其中fA,fB,fC,fD,fE爲各函數,表示變量之間的關係,可以是條件概率也可以是其他關係。其對應的因子圖爲:

在概率圖中,求某個變量的邊緣分佈是常見的問題。這問題有很多求解方法,其中之一就是把貝葉斯網絡或馬爾科夫隨機場轉換成因子圖,然後用sum-product算法求解。換言之,基於因子圖可以用sum-product 算法高效的求各個變量的邊緣分佈。

詳細的sum-product算法過程,請查看博文:從貝葉斯方法談到貝葉斯網絡

2.5 樸素貝葉斯

樸素貝葉斯(Naive Bayesian)是經典的機器學習算法之一,也是爲數不多的基於概率論的分類算法。樸素貝葉斯原理簡單,也很容易實現,多用於文本分類,比如垃圾郵件過濾。**樸素貝葉斯可以看做是貝葉斯網絡的特殊情況:即該網絡中無邊,各個節點都是獨立的。 **

樸素貝葉斯樸素在哪裏呢? —— 兩個假設

  • 一個特徵出現的概率與其他特徵(條件)獨立;
  • 每個特徵同等重要。

貝葉斯公式如下:

P(AB)=P(BA)P(A)P(B)=P()=P()P()P()P(A|B)=\frac{P(B|A)P(A)}{P(B)}=P(類別|特徵)=\frac{P(特徵|類別)P(類別)}{P(特徵)}

下面以一個例子來解釋樸素貝葉斯,給定數據如下:

現在給我們的問題是,如果一對男女朋友,男生想女生求婚,男生的四個特點分別是不帥,性格不好,身高矮,不上進,請你判斷一下女生是嫁還是不嫁?

這是一個典型的分類問題,轉爲數學問題就是比較p(嫁|(不帥、性格不好、身高矮、不上進))與p(不嫁|(不帥、性格不好、身高矮、不上進))的概率,誰的概率大,我就能給出嫁或者不嫁的答案!這裏我們聯繫到樸素貝葉斯公式:

P(,,,)=P(,,,)P()P(,,,)P(嫁|不帥,性格不好,矮,不上進)=\frac{P(不帥,性格不好,矮,不上進|嫁)P(嫁)}{P(不帥,性格不好,矮,不上進)}

我們需要求p(嫁|(不帥、性格不好、身高矮、不上進),這是我們不知道的,但是通過樸素貝葉斯公式可以轉化爲好求的三個量,這三個變量都能通過統計的方法求得。

等等,爲什麼這個成立呢?學過概率論的同學可能有感覺了,這個等式成立的條件需要特徵之間相互獨立吧!對的!這也就是爲什麼樸素貝葉斯分類有樸素一詞的來源,樸素貝葉斯算法是假設各個特徵之間相互獨立,那麼這個等式就成立了!

但是爲什麼需要假設特徵之間相互獨立呢?

  1. 我們這麼想,假如沒有這個假設,那麼我們對右邊這些概率的估計其實是不可做的,這麼說,我們這個例子有4個特徵,其中帥包括{帥,不帥},性格包括{不好,好,爆好},身高包括{高,矮,中},上進包括{不上進,上進},那麼四個特徵的聯合概率分佈總共是4維空間,總個數爲233*2=36個。

    36個,計算機掃描統計還可以,但是現實生活中,往往有非常多的特徵,每一個特徵的取值也是非常之多,那麼通過統計來估計後面概率的值,變得幾乎不可做,這也是爲什麼需要假設特徵之間獨立的原因。

  2. 假如我們沒有假設特徵之間相互獨立,那麼我們統計的時候,就需要在整個特徵空間中去找,比如統計p(不帥、性格不好、身高矮、不上進|嫁),我們就需要在嫁的條件下,去找四種特徵全滿足分別是不帥,性格不好,身高矮,不上進的人的個數,這樣的話,由於數據的稀疏性,很容易統計到0的情況。 這樣是不合適的。

根據上面倆個原因,樸素貝葉斯法對條件概率分佈做了條件獨立性的假設,由於這是一個較強的假設,樸素貝葉斯也由此得名!這一假設使得樸素貝葉斯法變得簡單,但有時會犧牲一定的分類準確率。

樸素貝葉斯優點

  • 算法邏輯簡單,易於實現(算法思路很簡單,只要使用貝葉斯公式轉化即可!)
  • 分類過程中時空開銷小(假設特徵相互獨立,只會涉及到二維存儲)

樸素貝葉斯缺點

理論上,樸素貝葉斯模型與其他分類方法相比具有最小的誤差率。但是實際上並非總是如此,這是因爲樸素貝葉斯模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的,在屬性個數比較多或者屬性之間相關性較大時,分類效果不好。

樸素貝葉斯模型(Naive Bayesian Model)的**樸素(Naive)的含義是"很簡單很天真"**地假設樣本特徵彼此獨立. 這個假設現實中基本上不存在, 但特徵相關性很小的實際情況還是很多的, 所以這個模型仍然能夠工作得很好。

3. 基於貝葉斯的一些問題

  1. 解釋樸素貝葉斯算法裏面的先驗概率、似然估計和邊際似然估計?
    • **先驗概率:**就是因變量(二分法)在數據集中的比例。這是在你沒有任何進一步的信息的時候,是對分類能做出的最接近的猜測。
    • **似然估計:**似然估計是在其他一些變量的給定的情況下,一個觀測值被分類爲1的概率。例如,“FREE”這個詞在以前的垃圾郵件使用的概率就是似然估計。
    • **邊際似然估計:**邊際似然估計就是,“FREE”這個詞在任何消息中使用的概率。

4. 生成式模型和判別式模型的區別

  • 判別模型(discriminative model)通過求解條件概率分佈P(y|x)或者直接計算y的值來預測y。

    線性迴歸(Linear Regression),邏輯迴歸(Logistic Regression),支持向量機(SVM), 傳統神經網絡(Traditional Neural Networks),線性判別分析(Linear Discriminative Analysis),條件隨機場(Conditional Random Field)

  • 生成模型(generative model)通過對觀測值和標註數據計算聯合概率分佈P(x,y)來達到判定估算y的目的。

    樸素貝葉斯(Naive Bayes), 隱馬爾科夫模型(HMM),貝葉斯網絡(Bayesian Networks)和隱含狄利克雷分佈(Latent Dirichlet Allocation)、混合高斯模型

5. 代碼實現

新聞分類 GitHub:點擊進入

6. 參考文獻

從貝葉斯方法談到貝葉斯網絡

作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

歡迎大家加入討論!共同完善此項目!羣號:【541954936】NLP面試學習羣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章