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

1. 對機率圖模型的理解

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

若是用一個詞來形容機率圖模型(Probabilistic Graphical Model)的話,那就是「優雅」。對於一個實際問題,咱們但願可以挖掘隱含在數據中的知識。機率圖模型構建了這樣一幅圖,用觀測結點表示觀測到的數據,用隱含結點表示潛在的知識,用邊來描述知識與數據的相互關係,最後基於這樣的關係圖得到一個機率分佈,很是「優雅」地解決了問題。github

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

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

2. 細數貝葉斯網絡

2.1 頻率派觀點

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

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

2.2 貝葉斯學派

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

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

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

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

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

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

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

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

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

2.3 貝葉斯定理

條件機率(又稱後驗機率)就是事件A在另一個事件B已經發生條件下的發生機率。條件機率表示爲P(A|B),讀做「在B條件下A的機率」。

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

P(A|B)=\frac{P(A\cap_{}B)}{P(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)。

貝葉斯網絡的有向無環圖中的節點表示隨機變量\{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(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(c)*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(c),而後將P(a,b,c)=P(c)*P(a|c)*P(b|c)帶入式子中,獲得:P(a,b|c)=P(a,b,c)/P(c) = P(c)*P(a|c)*P(b|c) / P(c) = 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(c),且根據P(a,c) = P(a)*P(c|a) = P(c)*P(a|c),可化簡獲得:

    P(a,b|c)

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

    =$$P(a)*P(c|a)*P(b|c) / P(c)$$

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

    =$$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(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(A|B)=\frac{P(B|A)P(A)}{P(B)}=P(類別|特徵)=\frac{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:github.com/NLP-LOVE/ML…

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

相關文章
相關標籤/搜索