【十大經典數據挖掘算法】Naïve Bayes


【十大經典數據挖掘算法】系列

  1. C4.5
  2. K-Means
  3. SVM
  4. Apriori
  5. EM
  6. PageRank
  7. AdaBoost
  8. kNN
  9. Naïve Bayes
  10. CART

朴素貝葉斯(Naïve Bayes)屬於監督學習的生成模型,實現簡單,沒有迭代,學習效率高,在大樣本量下會有較好的表現。但因為假設太強——假設特征條件獨立,在輸入向量的特征條件有關聯的場景下並不適用。

1. 朴素貝葉斯算法

朴素貝葉斯分類器的主要思路:通過聯合概率\(P(x,y) = P(x|y) P(y)\)建模,運用貝葉斯定理求解后驗概率\(P(y|x)\);將后驗概率最大者對應的的類別作為預測類別。

分類方法

首先,我們定義訓練集\(T = \lbrace (x_1,y_1),(x_2,y_2), \cdots ,(x_N,y_N)\rbrace\),其類別\(y_i \in \lbrace c_1,c_2, \cdots ,c_K\rbrace\),則訓練集中樣本點數為\(N\),類別數為\(K\)。輸入待預測數據\(x\),則預測類別

\begin{equation}
\arg \mathop{\max}\limits_{c_k}p(y=c_k|x)
\label{eq:obj1}
\end{equation}

由貝葉斯定理可知:

\[p(y=c_k|x)= {p(x|y=c_k)p(y=c_k)\over p(x)} \]

對於類別\(c_k\)而言,\(p(x)\)是恆等的,因此式子\eqref{eq:obj1}等價於
\begin{equation}
\arg \mathop{\max}\limits_{c_k} p(x|y=c_k)p(y=c_k)
\label{eq:obj2}
\end{equation}

從上面式子可以看出:朴素貝葉斯將分類問題轉化成了求條件概率與先驗概率的最大乘積問題。先驗概率\(p(y=c_k)\)可通過計算類別的頻率得到,但如何計算條件概率 \(p(x|y=c_k)\)呢?

朴素貝葉斯對條件概率做了條件獨立性的假設,即特征條件相互獨立。設輸入\(x\)為n維特征向量\((x^{(1)},x^{(2)},\cdots,x^{(j)},\cdots, x^{(n)})\),第\(j\)維特征\(x^{(j)}\)的取值有\(S_j\)個。由概率論的知識可知:

\[p(x|y=c_k)=\prod _{j}p(x^{(j)}|y=c_k) \]

式子\eqref{eq:obj2}等價於
\begin{equation}
\arg \mathop{\max}\limits_{c_k}p(y=c_k)\prod _{j}p(x^{(j)}|y=c_k)
\end{equation}

為什么要選擇后驗概率最大的類別作為預測類別呢?因為后驗概率最大化,可以使得期望風險最小化,具體證明參看[1]。

極大似然估計

在朴素貝葉斯學習中,需要估計先驗概率與條件概率,一般時采用極大似然估計。先驗概率的極大似然估計:

\[\hat {p}(y=c_k) = {\sum _{i} I(y_i=c_k)\over N} \]

其中,\(I\)是指示函數,滿足括號內條件時為1否則為0;可以看作為計數。

設第\(j\)維特征的取值空間為\(\lbrace a_{j1},a_{j2}, \cdots, a_{jS_j} \rbrace\),且輸入變量的第\(j\)\(x^{(j)}=a_{jl}\),則條件概率的極大似然估計:

\[\hat p(x^{(j)}=a_{jl}|y=c_k)={\sum \limits_{i}I(x_i^{(j)}=a_{jl},y=c_k)\over I(y_i=c_k)} \]

貝葉斯估計

在估計先驗概率與條件概率時,有可能出現為0的情況,則計算得到的后驗概率亦為0,從而影響分類的效果。因此,需要在估計時做平滑,這種方法被稱為貝葉斯估計(Bayesian estimation)。先驗概率的貝葉斯估計:

\[\hat {p}(y=c_k) = {\sum _{i} I(y_i=c_k)+\lambda \over N+k\lambda} \]

后驗概率的貝葉斯估計:

\[\hat p(x^{(j)}=a_{jl}|y=c_k)={\sum \limits_{i}I(x_i^{(j)}=a_{jl},y=c_k)+\lambda\over I(y_i=c_k)+S_j\lambda} \]

常取\(\lambda =1\),這時被稱為Laplace平滑(Laplace smoothing)。下面提到的拼寫檢查則用到了Laplace平滑——初始時將所有單詞的計數置為1。

2. 拼寫檢查

當用戶在輸入拼寫錯誤單詞時,如何返回他想輸入的拼寫正確單詞。比如,用戶輸入單詞thew,用戶有到底是想輸入the,還是想輸入thaw?這種拼寫檢查的問題等同於分類問題:在許多可能拼寫正確單詞中,到底哪一個時最有可能的呢?大神Peter Norvig [2]采用朴素貝葉斯解決這個拼寫問題。

朴素貝葉斯分類

設用戶輸入的單詞為\(w\),要返回的拼寫正確單詞為\(c\),拼寫檢查要找出最大可能的\(c\),即

\[\arg \mathop{\max}_{c} p(c|w) \]

\(p(c|w)\)可以理解為在已發生\(w\)的情況下發生\(c\)的概率。根據貝葉斯定理:

\[p(c|w)={p(w|c)p(c)\over p(w)} \]

貝葉斯分類器可表示為:

\[\arg \mathop{\max}_{c} p(w|c)p(c) \]

如何估計\(p(w|c)\)\(p(c)\)呢?估計\(p(c)\)的辦法可以在文本庫中統計單詞\(c\)的頻率。\(p(w|c)\)表示大多數用戶在輸入\(c\)時拼寫錯誤輸入成了\(w\)的概率,可以看作時錯誤模型。這需要對大量的錯誤輸入進行統計,才能對\(p(w|c)\)估計得較為准確。Norvig對此做了簡易化的處理:

  • 統計所有與\(w\)編輯距離為1的拼寫正確單詞,選出在文本庫中頻率最高者;
  • 若未找到與\(w\)編輯距離為1的拼寫正確單詞,則統計所有與\(w\)編輯距離為2的拼寫正確單詞,選出在文本庫中頻率最高者
  • 若與\(w\)編輯距離為2的拼寫正確單詞也未找到,則返回\(w\)(即分類失敗)。

所謂編輯距離為1,指單詞可以通過增加、刪除、修改(一個字母)或交換(相鄰兩個字母)變成另外的單詞。上述處理辦法默認了:編輯距離為1的拼寫正確單詞永遠比編輯距離為2的更有可能。

存在問題

Norvig所介紹的拼寫檢查是非常簡單的一種,他在博文[2]中指出不足。此外,還有一些需要優化的地方:

  • 上下文關聯,比如輸入thew,在不同的上下文中可能返回的拼寫正確單詞不同;
  • 輸入媒介,比如用戶用鍵盤輸入與用手機的九宮格輸入,其拼寫錯誤的方式時不一樣的。

3. 參考資料

[1] 李航,《統計學習方法》.
[2] Peter Norvig, How to Write a Spelling Corrector.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM