樸素貝葉斯( Naive Bayes)

在GDA中 x時連續隨機變數,這篇文章聊聊x是離散隨機變數的情形。 回想垃圾郵件分類中我們把 郵件分為 垃圾郵件和非垃圾郵件,這是典型的文本分類問題。

如何表示一封郵件的內容呢?

此處我們採用特徵向量的方式, 存在一個按照字母排序的字符集(也叫字典),如果郵件中 出現過某一個單詞,就把特徵向量中對應的元素設為1. 例如 郵件中的內容只有 「a boy"時對應的特徵向量。

顯然x向量的維度等於字典長度。

接下來我們要對  p(x|y) 建模:

  • 方案1 :原樣刻畫問題, 把x看作多項分布 ,假設字典包含5000個詞,那麼  x in {0,1 }^{50000} , x就有  2^{50000}  種可能取值。 需要 (2^{50000}-1)個參數 (一個  2^{50000}-1 維度的參數向量 )。 顯然 P(x^{(i)} | y) 參數過多,不可行。

  • 方案2: 做一個比較強的假設再刻畫問題,大大簡化模型。 假設每個 x_{i} 相對於y 條件獨立 ( Naive Bayes (NB) assumption)。例如: p(x_{2000}|y) = p(x_{2000}|y,x_{3000}).x_{2000} 對應 單詞 」buy「 , x_{3000} 對應單詞 」price" ,它的意思是 在已知郵件分類的情況下, 「buy"是否在郵件中出現 與 」price"是否在郵件中出現過沒有關聯。

 phi_{y},phi_{i}|y=0 , phi_{i}|y=1 對於每一封郵件x^{(i)} = left( x_{1}, x_{2} cdots  x_{m} right)^T 它對應的分布為 P(x^{(i)} | y) 為:

利用貝葉斯公式得到模型: p( y^{(i)} | x^{(i)} ) =n frac{ p(x^{(i)}, y^{(i)}) }{p(x^{(i)})}  =  nfrac {p(x^{(i)} | y^{(i)}) p(y^{(i)}) }{ sum p(x^{(i)} | y^{(i)}) p(y^{(i)}) } ,其中 p(x^{(i)} | y^{(i)})  =  prod_{j=1}^{n} p(x_{j} | y^{(i)})

可見模型參數包括  phi_{i}|y=1 = p(xi = 1|y = 1) n  phi_{i}|y=0 = p(xi = 1|y = 0)n  phi_{y} = p(y = 1) , 通過極大似然估計可以求解參數。 具體如下:

給定訓練集 {(x(i),y(i));i =1,...,m}n , 可以得到聯合似然函數 :

其中 p(x^{(i)} , y^{(i)}) = p(x^{(i)} | y^{(i)}) p(y^{(i)})  = { prod_{j=1}^{n} p(x_{j} | y^{(i)}) } cdot p(y^{(i)})

求解 max ; l( phi_{y} , phi_{i} |y=0 ,   phi_{i} |y=1) 得到:

這個結果有著明顯的意義:

  • phi_{j} | y=1 是 包含辭彙j的垃圾郵件 與 垃圾郵件 之比

  • phi_{j} | y=0 是 包含辭彙j的非垃圾郵件 與 非垃圾郵件之比

  • phi_{y} 是垃圾郵件所佔比例

已知參數就可以求得任意 郵件 x= left( x_{1}, x_{2} cdots  x_{m} right)^T屬於垃圾郵件的概率:

總結一下

【樸素貝葉斯 推廣】

上面第二步驟中 假設 每個辭彙 x_{i} 只能取兩種值,它 服從 Bernoulli 分布。 如果它可以取 k個可能值  {1,2,...,k_{i} } 就是 多項分布 :  p(x^i|y) sim M(n; phi_{1}, phi_{2} cdots phi_{n}   ), 這就把樸素貝葉斯做了進一步推廣,適用範圍更廣。

一般情況下可以把連續值轉換為離散的多項分布然後用樸素貝葉斯來求解,例如 x代表房屋面積, 通過分段就可以離散化

x為890 平方 對應 x=3

如果 原始數據通過 假設為多元高斯分布, 適用 GDA 演算法沒有得到理想效果。

可以試著把它 離散化(多項分布) 然後使用樸素貝葉斯演算法 或許是不錯的選擇。

[Laplace smoothing]

假設 「nips」 是最新一份郵件中的 第35000個詞, 其它郵件中從未出現過該詞,那麼

當我們想要預測 一份含有「nips」的郵件是否為 垃圾郵件時:

因為 prod_{i=1}^{n}  p(xi|y) 包含  p(x_{35000}|y) = 0 因為訓練樣本有限就預測概率為零時非常不合理的。

如何改進呢? Laplace smoothing。

以 多項分布的隨機變數 z in {1 cdots k } 為例 ,其參數為  phi_{j} = p(z = i) 在給定m個獨立的訓練集  {z^{(1)},...,z^{(m)} } 的估計為

如同前面所講 其中的 phi_{j} 可能為 0. 為了避免這個問題 我們使用 Laplace smoothin:

分子加1,分母加 k (k個  phi_{j} ) 而且仍然滿足概率要求:

這樣就有效避免了為0的情況。

同理,對於樸素貝葉斯:

【文本分類的事件模型】

在文本分類問題中 樸素貝葉斯使用了多元 Bernoulli事件模型 (multi-variate Bernoulli event model): 假設一封郵件(文本)是按照如下步驟生成的:

  1. 首先按照概率 P(y) 決定下一封郵件是否發送垃圾郵件或正常郵件

  2. 發送者掃描真箇字典 按照概率 p(x_{i} = 1|y) = phi_{i}|y決定是否包含辭彙 i , 所以一份郵件的概率為

但是還可以有另一中方式:

多項事件模型 ( multinomial event model)

  1. 首先按照概率 P(y) 決定下一封郵件是否發送垃圾郵件或正常郵件

  2. 開始寫郵件, 郵件的每一個詞都可能是 字典中辭彙任意一個,即 p(x_{1}|y) 服從 多項分布 , 並且 每個詞之間獨立 (IID)。 按照 第一個詞,第二個詞, 一次寫下去 知道 寫完為止。所以 一封郵件的概率為:

圖示如下:

新模型的參數 為 phi_{y} = p(y) n phi_{i}|y=1 = p(x_j = i|y = 1) n phi_{i}|y=0 = p(x_j = i|y = 0)

給定訓練數據:  {(x^{(i)},y^{(i)}) ; i = 1,...,m }   n x^{(i)} = (x^{(i)}_1 ,x^{(i)}_2 ,...,x^{(i)}_{ni} ) 得到似然函數:

最大似然估計得到參數:

加上 Laplace smoothing :

推薦閱讀:

怎麼形象生動通俗易懂的解釋留數,級數還有傅里葉變換拉普拉斯變換?
關於傅立葉變換和拉普拉斯變換的轉化問題?

TAG:机器学习 | 贝叶斯理论 | 拉普拉斯 |