樸素貝葉斯模型是文本分析領域最爲經常使用的模型之一,也是最爲經典的模型。文本主要從教學的角度來說解樸素貝葉斯模型以及數學原理。爲了讓文檔具有完備性,必要的前置知識也包含在文章裏。 在這裏,咱們假設樸素貝葉斯的輸入向量是每一個單詞出現的次數。若是向量的表示爲tf-idf等實數型的,咱們則須要使用高斯樸素貝葉斯模型(不是本文重點)。機器學習
本文章來源於《天然語言處理訓練營》,主要以教學爲目的,讓學員瞭解最大似然以及如何使用簡單的優化技巧來求樸素貝葉斯的最大似然。It is a self-contained draft that everything is included.
做者:李文哲
預備數學知識:函數
人工智能中最核心的數學環節是求出一個目標函數(object function)的最小值/最大值。求出一個函數最小是/最大值的方法不少,在這裏咱們介紹一個最經典的方法之一:直接求出極值點。這些極值點的共同特色是在這些點上的梯度爲0, 以下圖所示。這個圖裏面,有8個極值點,並且這些極值點中必然會存在最小值或者最大值(除去函數的左右最端點)。因此在這種方式下,咱們一般x先求出函數的導數,而後設置成爲0。以後從找出的極值點中選擇使得結果爲最小值/最大值的極值點。學習
A. 無約束條件的優化優化
例1:求 的最小值人工智能
對於這樣的一個問題,其實咱們都知道這個問題的答案是 ,基本上不須要計算就能看出來。接下來咱們經過求導的方式來求一下最小值。首先對
求導並把導數設置成0。3d
從而獲得 , 求出來的是惟一的極值點,因此最後得出來的函數的最小值是
cdn
的最小值事件
求導以後 ip
便可以獲得 。 把這三個值分別帶入到
便可以獲得
。因此,
兩個點均可以做爲函數的最小值點,這時候函數值爲
。文檔
*請注意:並不必定全部函數的極值均可以經過設置導數爲0的方式求出。也就是說,有些問題中當咱們設定導數爲0時,未必能直接計算出知足導數爲0的點(好比邏輯迴歸模型),這時候就須要利用數值計算相關的技術(最典型爲梯度降低法,牛頓法..)
B. 帶約束條件的優化 - 拉格朗日乘法項(Lagrangian Multiplier)
對於某些求極值問題,函數一般帶有一些條件。以下面的例子:
例3:求 的最大值,但有個條件是
。那這時候怎麼求出最大值呢?
拉格朗日乘法項就是用來解決這類問題。咱們能夠把限制條件經過簡單的轉變加到目標函數中,這時候問題就變成了
剩下的過程就跟上面的相似了。設定導數爲0,便可以獲得如下三個方程:
解完以後便可以獲得 。 針對於每個$\lambda$咱們獲得的解爲
。把兩個解帶入到原來函數裏並作比較便可以肯定最優解。
2. 最大似然估計(Maximum Likelihood Estimation)
最大似然估計是機器學習領域最爲常見的用來構建目標函數的方法。它的核心思想是根據觀測到的結果來預測其中的未知參數。咱們舉一個投擲硬幣的例子。
假設有一枚硬幣,它是不均勻的,也就是說出現正面的反面的機率是不一樣的。假設咱們設定這枚硬幣出現正面的機率爲 , 這裏
指的是正面(head), 相似的還會有反面(tail)。假設咱們投擲6次以後獲得瞭如下的結果,並且咱們假定每次投擲都是相互獨立的事件:
其中D表示所觀測到的全部樣本。從這個結果其實誰均可以很容易說出 ,也就是出現正面的機率爲4/6,其實咱們在無心識中使用了最大似然估計法。接下來,咱們從更嚴謹的角度來定義最大似然下的目標函數。
基於最大似然估計法,咱們須要最大化觀測到樣本的機率,即p(D)。進一步能夠寫成:
咱們的目標是最大化機率值 。那這部分的優化便可以採用上面所提到的方法。
把這個式子整理完以後便可以獲得 , 結果跟一開始咱們算出來的是一致的。
假設給定了一批訓練數據 ,其中
指的是第
個樣本(文章),並且這個樣本(文章)包含了
個單詞,因此能夠
表示成
. 假設$x^i$的全文內容爲"今天 很 高興 來 參加 天然語言處理 訓練營", 那這時候
"今天",
="很",
="高興",
="來"
="參加",
="天然語言處理",
="訓練營"。因此這裏
。另外,
表明的是$x^i$的標籤。好比在垃圾郵件應用上,它表明"垃圾郵件",」正常郵件「。咱們利用K來表明分類的個數。好比在垃圾郵件應用上K=2。但在這裏,咱們考慮廣泛的狀況,頗有可能K>2,也稱之爲是多分類問題。最後,咱們再定義V爲詞典庫的大小。
樸素貝葉斯是生成模型,它的目標是要最大化機率p(D),也就是p(x,y)。咱們把前幾步的推導先寫一下:
這裏簡單說明一下:樣本 由不少個單詞來構成,這裏每個
看做是一個單詞。最後一個是利用了樸素貝葉斯的假設,也就是每一個詞都是相互獨立的。好比給定一個句子"咱們 今天 運動",在給定一個標籤y的狀況下,機率能夠寫成
。
咱們看到式子裏面都是乘法項,並且多個乘法項很容易引發數據的overflow或則underflow(在這裏是underflow)。因此咱們通常不直接最大化p(D),而是最大化 , 其實這兩個是等同的。由於
函數是嚴格遞增的函數。加上
,咱們對上面式子作一些變化:
在這裏咱們用了一些技巧。舉例子,假設一個文章的內容爲 ,按照以前的邏輯這句話的機率爲
。但另外一方面,咱們也能夠利用詞典庫的全部的詞來表明這個機率。
.
這二者是等同的,只不過咱們從詞典庫的維度把全部的單詞都考慮了進來,並數一下每個單詞在文檔i裏出現了多少次,若是沒有出現,至關於0次。因此從這個角度咱們能夠把 寫成
,其中
表明單詞j出如今文檔$i$的次數。這裏
表明詞典庫裏的第j個單詞。
另外,咱們也用到了 的性質。好比
。還有一點是,一開始的時候咱們是從文檔1到N的順序來循環,但如今咱們先取出類別爲1的文檔,而後再取出類別爲2的文檔,以此類推。因此前面的
被拆分紅兩個sum, 即
。這裏
表明屬於類別k的全部文檔。另外,咱們引入了兩組變量。也就是咱們直接設置
爲
,意思就是當文章分類爲k的時候出現單詞
的機率(
)。
另外,咱們設定 爲
,也就是文檔屬於第k類的機率,這個也是樸素貝葉斯模型的先驗(prior)。 好比在垃圾識別應用中,假設總共有100個垃圾郵件和1000個正常郵件,這時候一個郵件爲垃圾郵件的機率爲
, 正常郵件的機率爲10/11,這就是貝葉斯模型的先驗,並且全部之和等於1。最後咱們引入了一個新的變量叫作
,也就是屬類別k的文件個數(訓練數據總統計便可,是已知的)。也就是
。
另外,有兩個約束條件須要知足,分別是:
第一個條件表示的是全部類別的機率加在一塊兒等於1. 好比 。第二個條件表示的是對於任意一個分類k, 出現全部詞典裏的單詞的總機率合爲1. 因此,這個問題是有約束條件的優化問題。把約束條件和目標函數寫在一塊兒便可以獲得:
利用拉格朗日乘法項,咱們能夠把目標函數寫成:
A: 找出最優解
咱們須要設置導數爲0,進而找出最優解。如今求解的是 ,因此只要跟
無關的項咱們均可以不用考慮,由於它們導數爲0.
對
的導數爲:
解爲 。這裏有個參數
,但同時咱們有一個約束條件是
, 咱們把剛纔的解帶入到這裏,能夠獲得:
則 的值爲
。把$\lambda$再次帶入到
裏面,咱們能夠獲得:
這裏面 爲k類文檔出現的個數,分母爲全部文檔的個數。
B. 找出最優解
相似的,咱們須要求L對 的導數爲:
解爲 。這裏有個參數是
,但同時咱們有個約束條件是
,把剛纔的解帶入到這裏,能夠獲得:
把 帶入到上面的解便可以獲得:
這個式子中分子表明的是在全部類別爲k的文檔裏出現了多少次 也就是詞典庫裏的j個單詞。分母表明的是在類別爲k的全部文檔裏包含了總共多少個單詞。
到此爲止,模型的參數已經獲得。If there is any mistake, pls let me know.