回覆列表
  • 1 # 論智

    首先回顧下貝葉斯定理:

    pPost a b = ((p b) / (p a)) * (pPost b a)

    上式中,pPost表示後驗機率posterior probability,傳統寫法為`p(b|a)`,我們將`b`置於`a`之後,我們覺得這樣比較自然。如果你更習慣傳統寫法的話可以參考下式

    在分類問題中,上式中的`a`表示特徵,`b`表示類別。為了凸顯這一點,我們可以把`a`換成`f`(特徵 feature), `b`換成`C`(類別 class):

    pPost f C = ((p C) / (p f)) * (pPost C f)

    將其推廣到多個特徵:(實際問題往往需要統計多個特徵,而不是單一特徵)

    pPost [f1, f2 .. fn] C =

    (p C) * (pPost C [f1, f2 .. fn]) / (p [f1, f2 .. fn])

    其中,`p C`和`p [f1, f2 .. fn]`都很容易統計,而`pPost C [f1, f2 .. fn]`的計算複雜度很高,特別是,`C`中同時具有`[f1, f2 .. fn]`的樣本可能很少(稀疏),那訓練的效果就很差了。

    那怎麼辦呢?

    我們可以假設`[f1, f2 .. fn]`的每一項都是獨立事件。這樣,`pPost C [f1, f2 .. fn]`就可以化簡為

    (pPost C f1) * (pPost C f2) * .. * (pPost C fn)

    這樣我們就只需要獨立計算分類為`C`的情況下具有某一個特徵的機率了,避免了樣本稀疏的問題,同時,每一項都可以分散式地跑。

    別忘了,前面我們為了簡化運算量,假設`[f1, f2 .. fn]`的每一項都是獨立事件,這個假設可不一定成立。因此這個演算法叫做幼稚貝葉斯分類器或者樸素貝葉斯分類器(Naive Bayes Classifier)。這個名稱就是強調獨立事件的假設不一定成立。

    儘管獨立事件的假設常常是不準確的,但樸素貝葉斯在實際工程中出乎意料地好用。因為很多應用並不在乎精確的類機率,只關心最後的分類結果。比如垃圾郵件過濾,只需要判斷是否是垃圾郵件,並不需要在使用者介面顯示“本郵件有 87.53% 的機率是垃圾郵件”之類的資訊。

  • 2 # IT老友

    一、理解貝葉斯:根據資料集D的內容變化更新假設機率H

    P(H|D) = P(H) P(D|H) / P(D)

    更多更詳細請看<神奇貝葉斯的兩種理解方式>

    二、樸素貝葉斯的特別之處就是假設條件獨立。

    以過濾垃圾郵件為例,用D代表一封郵件,用h+表示垃圾郵件。

    那麼問題就是求:

    先驗機率P(h+):很容易求,從一個郵件庫裡統計垃圾郵件的比例即可;

    似然度P(D|h+):在垃圾郵件當中出現跟這封郵件的機率,咋求?

    注意到D是由N個單片語成的,用d1...dn表示,那麼

    怎麼求P(d1,d2...dn | h+)呢?用完全聯合機率公式!

    做極端假設,假設各個詞出現與否完全無關,

    那麼上式變成:

    繼續分解,得到

    同樣的極端假設,標準化常量P(D) :

    再利用貝葉斯公式,計算出來P(h+|d)如果大於某閾值,即可斷為垃圾郵件。

    假設條件完全獨立,這就是之所以被稱為樸素(Naive)的原因。

  • 中秋節和大豐收的關聯?
  • 是否紅酒在喝之前都需要醒酒?