?
樸素貝葉斯的核心基礎理論就是貝葉斯理論和條件獨立性假設,在文本數(shù)據(jù)分析中應用比較成功。樸素貝葉斯分類器實現(xiàn)起來非常簡單,雖然其性能經常會被支持向量機等技術超越,但有時也能發(fā)揮出驚人的效果。所以,在將樸素貝葉斯排除前,最好先試試,大家常將其作為一個比較的基準線。本文會結合垃圾郵件分來來詳解樸素貝葉斯,緊跟其后的是樸素貝葉斯的兩種變形。文章整體劃分為三個部分,1)Bernoulli型樸素貝葉斯;2)Laplace平滑;3)多項分布型樸素貝葉斯模型;4)樸素貝葉斯模型在連續(xù)型數(shù)據(jù)中的應用。
Bernoulli型樸素貝葉斯
對于垃圾郵件分類問題,我們的目標就是建立一個分類器模型,使其能夠判定接受到的郵件是否為垃圾郵件。很顯然,這是個二分類問題,我們定義郵件的標簽(label)信息\(y\in\{0,1\}\),垃圾郵件對應\(y=1\),正常郵件對應\(y=0\)。郵件的主體信息只是由一系列單詞組成的文本,我們如何用向量\(x\)來表示它的特征? 常見的方法就是基于現(xiàn)有的文本集合,經過預處理后,從中挑選出較為關鍵的單詞組成詞典(Vocabulary)。建好詞典后,我們掃描每個文本,然后將文本中出現(xiàn)在詞典中的單詞以詞頻等形式編碼到特征向量中。這里的詞典與我們平時用的詞典不一樣,主要是基于已有的文本集合的單詞集合建立的,更貼近于已有數(shù)據(jù),還能考慮很多詞典中沒有的怪異單詞。 在Bernoulli型樸素貝葉斯中,我們掃描整個詞典,如果詞典中的第\(i\)個單詞出現(xiàn)在給定文本中,我們設定\(x_i=1\),否則設定\(x_i=0\)。最后,我們就得到了一個與詞典等長的特征表示\(x\in\{0,1\}^{n}\),如下圖所示。?
有人看了文本的特征表示后可能會想\(x\in\{0,1\}^{n}\)意味著\(x\)最多有\(zhòng)(2^n\)種情況,是不是也可以用多項分布來表示?理論上式可行的,但實際上這絕對不是個行得通的方案。因為在實際應用中,詞典的規(guī)模通常比較大,一般都是以萬為單位的,那么多項分布的模型參數(shù)計算機是無法承受的。 在樸素貝葉斯中,我們提出了一個很強的假設為\(p(x|y)\)建模,即在給定\(y\)的情況下,所有\(zhòng)(x_i\)都是獨立的,稱之為條件獨立(conditionally independent)。該假設稱為樸素貝葉斯假設,由此得出的算法則稱為樸素貝葉斯分類器。用數(shù)學形式可描述成如下形式: \begin{equation} \begin{array}{rl} p(x|y)&=p(x_1,x_2,\cdots,x_{n}|y)\\ &=p(x_1|y)p(x_2|y,x_1)\cdots p(x_{n}|y,x_1,\cdots,x_{n-1})\\ &=p(x_1|y)p(x_2|y)p(x_3|y)\cdots p(x_{n}|y)\\ &=\prod_{i=1}^{n}p(x_i|y) \end{array} \end{equation} 其中,第一步到第二步是根據(jù)概率論中的鏈式法則(Chain Rule);第二步到第三步是根據(jù)樸素貝葉斯假設。 我們舉個例子來說明樸素貝葉斯的假設。比如第\(1089\)個單詞"buy"和第\(3873\)個單詞"price"同時出現(xiàn)在垃圾郵件中,我們假設如果你已經知道這是一封垃圾郵件,那么第\(1089\)個單詞是否出現(xiàn)絲毫不影響你對第\(3873\)個單詞是否出現(xiàn)的確定程度,即\(p(x_{3873}|y)=p(x_{3873}|y,x_{1089})\)。\(x_{1089}\)與\(x_{3873}\)相互獨立則表示成\(p(x_{3873})=p(x_{3873}|x_{1089})\),這和前面的條件獨立不是同一個概念。很顯然這個假設在大多數(shù)情況下都是不成立的,但是樸素貝葉斯算法在文本分類的問題中往往非常奏效。我們可以這樣想,郵件是以這樣的方式產生的:首先,發(fā)送者根據(jù)概率\(p(y)\)隨機決定一封郵件是否為垃圾郵件;然后,發(fā)送者掃描整個詞典,每次根據(jù)概率\(p(x_i=1|y)\)隨機決定是否把\(x_i\)對應的單詞放到郵件中,并且單詞的選擇之間是互不影響的;最后,這封郵件產生的概率就為\(\prod_{i=1}^{n}p(x_i|y)\)。 樸素貝葉斯模型包含的參數(shù)有\(zhòng)(\phi_y=p(y=1)\),\(\phi_{i|y=1}=p(x_i=1|y=1)\),\(\phi_{i|y=0}=p(x_i=1|y=0)\)。給定\(m\)個樣本組成的訓練集\(\{(x^{(i)},y^{(i)});i=1,2,\cdots,m\}\),其似然函數(shù)形式如下: \begin{equation} \ell(\phi_y,\phi_{i|y=0},\phi_{i|y=1})=\prod_{i=1}^mp(x^{(i)},y^{(i)}) \end{equation} 為了便于計算,將其轉化為對數(shù)形式 \begin{equation} \mathcal{L}(\phi_y,\phi_{i|y=0},\phi_{i|y=1})=\sum_{i=1}^m\log p(x^{(i)}|y^{(i)})+\log P(y^{(i)}) \end{equation} 其中 \begin{equation} p(y^{(i)})=\phi_y^{y{(i)}}(1-\phi_y)^{1-y^{(i)}} \end{equation} \begin{equation} p(x^{(i)}|y^{(i)})=\prod_{j=1}^np(x_j^{(i)}|y^{(i)}) \end{equation} \begin{equation} \begin{array}{cl} p(x_j^{(i)}|y^{(i)})=&\left(\phi_{j|y=0}^{1\{x_j^{(i)}=1\}}(1-\phi_{j|y=0})^{1-1\{x_j^{(i)}=1\}}\right)^{1\{y^{(i)}=0\}}\\ &\cdot\left(\phi_{j|y=1}^{1\{x_j^{(i)}=1\}}(1-\phi_{j|y=1})^{1-1\{x_j^{(i)}=1\}}\right)^{1\{y^{(i)}=1\}} \end{array} \end{equation} 將上述三個等式帶入對數(shù)似然函數(shù)\(\mathcal{L}\)中可得 \begin{equation} \begin{array}{rl} &\mathcal{L}(\phi_y,\phi_{i|y=0},\phi_{i|y=1})\\ =&\sum_{i=1}^m\left(\sum_{j=1}^n1\{y^{(i)}=0\}\left(1\{x_j^{(i)}=1\}\log \phi_{j|y=0}\right.\right.\\ &\left.+(1-1\{x_j^{(i)}=1\})\log(1-\phi_{j|y=0})\right)\\ &+1\{y^{(i)}=1\}\left(1\{x_j^{(i)}=1\}\log \phi_{j|y=1}\right.\\ &\left.\left.+(1-1\{x_j^{(i)}=1\})\log(1-\phi_{j|y=1})\right)\right)\\ &+y^{(i)}\log\phi_y+(1-y^{(i)})\log(1-\phi_y) \end{array} \end{equation} 利用似然函數(shù)的對數(shù)形式對各參數(shù)求偏導,并令偏導為0,可得: \begin{equation} \begin{array}{rl} \frac{\partial\mathcal{L}}{\partial\phi_y}&=\sum_{i=1}^m\frac{y^{(i)}}{\phi_y}-\frac{1-y^{(i)}}{1-\phi_y}\\ &=\sum_{i=1}^m\frac{y^{(i)}-\phi_y}{\phi_y(1-\phi_y)}=0\\ &\Rightarrow\phi_y=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}}{m} \end{array} \end{equation} \begin{equation} \begin{array}{rl} \frac{\partial\mathcal{L}}{\partial\phi_{j|y=0}}&=\sum_{i=1}^m1\{y^{(i)}=0\}\left(\frac{1\{x_j^{(i)}=1\}}{\phi_{j|y=0}}-\frac{1-1\{x_j^{(i)}=1\}}{1-\phi_{j|y=0}}\right)\\ &=\sum_{i=1}^m\frac{1\{y^{(i)}=0\}\left(1\{x_j^{(i)}=1\}-\phi_{j|y=0}\right)}{\phi_{j|y=0}(1-\phi_{j|y=0})}=0\\ &\Rightarrow\phi_{i|y=0}=\frac{\sum_{i=1}^m1\{x^{(i)}=1\&\&y^{(i)}=0\}}{\sum_{i=1}^m1\{y^{(i)}=0\}} \end{array} \end{equation} \begin{equation} \begin{array}{rl} \frac{\partial\mathcal{L}}{\partial\phi_{j|y=1}}&=\sum_{i=1}^m1\{y^{(i)}=1\}\left(\frac{1\{x_j^{(i)}=1\}}{\phi_{j|y=1}}-\frac{1-1\{x_j^{(i)}=1\}}{1-\phi_{j|y=1}}\right)\\ &=\sum_{i=1}^m\frac{1\{y^{(i)}=1\}\left(1\{x_j^{(i)}=1\}-\phi_{j|y=1}\right)}{\phi_{j|y=1}(1-\phi_{j|y=1})}=0\\ &\Rightarrow\phi_{i|y=1}=\frac{\sum_{i=1}^m1\{x^{(i)}=1\&\&y^{(i)}=1\}}{\sum_{i=1}^m1\{y^{(i)}=1\}} \end{array} \end{equation} 學習到上述參數(shù)后,對特征向量為\(x\)的新樣本進行預測也就很簡單了 \begin{equation} \hat{y}=\underset{y\in\{0,1\}}{\arg\max}\;p(y|x)=\underset{y\in\{0,1\}}{\arg\max}\left(p(y)\prod_{j=1}^np(x_j|y)\right) \end{equation} 由于概率值的范圍為\([0,1]\),多個概率值相乘后的結果可能會非常小,以致于計算機將其視為0來處理。為了避免這種情況,我們用上式的對數(shù)形式來進行等價表示 \begin{equation} \hat{y}=\underset{y\in\{0,1\}}{\arg\max}\;p(y|x)=\underset{y\in\{0,1\}}{\arg\max}\left(\log p(y)+\sum_{j=1}^n\log p(x_j|y)\right) \end{equation} Bernoulli型樸素貝葉斯只考慮了詞典中的詞是否出現(xiàn),所以該方法適應于單詞出現(xiàn)的次數(shù)不是重點但是否出現(xiàn)最為關鍵的分類問題。比如,在情感分類問題中,“心煩”、“傷心”等詞的出現(xiàn)次數(shù)并不是非常重要,只要文中出現(xiàn)了這類表達負面情緒的詞匯,我們就可以判定用戶心情不太好。
Laplace平滑
上述理論存在一個瑕疵,實際中很可能出現(xiàn)詞典中的第\(i\)個單詞在訓練集的某一類樣本中壓根沒出現(xiàn),或者詞典中存在一些在所有訓練樣本中都沒出現(xiàn)的單詞。這樣就會出現(xiàn)類條件概率\(p(x_i|y)=0\)的情形。如果用第一個判別準則,我們會發(fā)現(xiàn)僅僅由于這個小問題會引發(fā)模型的整體“失憶”,即所有其他的類條件概率\(p(x_j|y)=0\)與\(p(x_i|y)=0\)的乘積為0;如果用第二個判別準則,會出現(xiàn)未定義的計算\(\log 0\)。 舉個簡單的例子來說,假設我們現(xiàn)在要估算服從多項分布的隨機變量\(z\in\{1,\cdots,k\}\)的均值,該多項分布的參數(shù)為\(\phi_i=p(z=i)\)。給定\(m\)個訓練樣本\(\{z^{(1)},\cdots,z^{(m)}\}\),利用最大似然估計出的參數(shù)為\(\phi_j=\sum_{i=1}^m1\{z^{(i)}=j\}/m\)。如果事件\(z^{(i)}=j\)在訓練集中從未出現(xiàn)過,那么最終\(\phi_j=0\)。從統(tǒng)計學角度而言,僅僅因為在訓練集中未看到特定事件的發(fā)生就將其出現(xiàn)概率置為0是很不合理的。 為了避免這個問題,我們引入Laplace平滑,即將上面的參數(shù)估計變成\(\phi_i=\left(\sum_{i=1}^m1\{z^{(i)}=j\}+1\right)/(m+k)\)。分子和分母都在原來統(tǒng)計的基礎上加上了一個常數(shù),也稱為pseudo count,經過Laplace平滑后,\(\sum_{j=1}^k\phi_j=1\)仍然成立?;氐綐闼刎惾~斯分類器,采用Laplace平滑后參數(shù)形式如下: \begin{equation} \phi_y=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}+1}{m+2} \end{equation} \begin{equation} \phi_{i|y=1}=\frac{\sum_{i=1}^m1\{x^{(i)}=1\&\&y^{(i)}=0\}+1}{\sum_{i=1}^m1\{y^{(i)}=0\}+2} \end{equation} \begin{equation} \phi_{i|y=0}=\frac{\sum_{i=1}^m1\{x^{(i)}=1\&\&y^{(i)}=0\}+1}{\sum_{i=1}^m1\{y^{(i)}=0\}+2} \end{equation}
多項分布型樸素貝葉斯
多項分布型的樸素貝葉斯和Bernoulli型樸素貝葉斯放在一起,很多人就犯迷糊了。兩中方法看待問題的方式還是有很大區(qū)別的,而且應用場景也有各自的側重點,要注意區(qū)分。 在多項分布型樸素貝葉斯中,郵件的特征表示就與Bernoulli型的樸素貝葉斯不同。假設我們有\(zhòng)(|V|\)個單詞組成的詞典,\(x_i\)表示郵件的第\(i\)個詞,現(xiàn)在\(x_i\)的取值范圍由\(\{0,1\}\)變成\(\{1,2,\cdots,|V|\}\)。最后,長度為\(n\)的郵件對應的特征向量為\((x_1,x_2,\cdots,x_n)\),因為每個郵件的長度\(n\)不同,所有郵件對應的特征向量的維度也會不同,如下圖所示:
?郵件的生成方式可以描述成:1)根據(jù)Bernoulli分布的概率值\(p(y)\)隨機決定郵件是否為垃圾郵件;2)發(fā)送者根據(jù)多項分布概率值\(p(x_i|y)\)隨機從詞典中選取一個又一個單詞,每次選取單詞的事件是相互獨立,直到組成長度為\(n\)的郵件。因此,一封郵件對應的概率表示成\(p(y)\prod_{i=1}^np(x_i|y)\)。這個描述過程和上面的Bernoulli型貝葉斯很相似,但是選詞的方式發(fā)生了改變,前者是根據(jù)Bernoulli分布決定是否將詞典中的某個詞寫入郵件中,后者是根據(jù)多項分布決定把詞典中的哪一個詞作為即將寫入郵件的單詞。 多項分布型樸素貝葉斯模型的參數(shù):\(\phi_y=p(y=1)\),\(\phi_{i|y=0}=p(x_j=i|y=0)\),\(\phi_{i|y=1}=p(x_j=i|y=1)\)。其中\(zhòng)(j\)可以是集合\(\{1,2,\cdots,n\}\)中的任意值,也就是相同類別的郵件中的所有詞都服從相同的多項分布,每個詞的分布不受位置\(j\)的影響。模型中有如下的概率關系: \begin{equation} p(y)=\phi_y^y(1-\phi_y)^{1-y} \end{equation} \begin{equation} p(x|y)=\prod_{i=1}^np(x_i|y) \end{equation} \begin{equation} \begin{array}{rl} p(x_i|y)&=\left(\phi_{1|y=0}^{1\{x_i=1\}}\cdots\phi_{|V||y=0}^{1\{x_i=|V|\}}\right)^{1\{y=0\}}\left(\phi_{1|y=1}^{1\{x_i=1\}}\cdots\phi_{|V||y=1}^{1\{x_i=|V|\}}\right)^{1\{y=1\}}\\ &=\left(\prod_{k=1}^{|V|}\phi_{k|y=0}^{1\{x_i=k\}}\right)^{1\{y=0\}}\left(\prod_{k=1}^{|V|}\phi_{k|y=1}^{1\{x_i=k\}}\right)^{1\{y=1\}} \end{array} \end{equation} 給定\(m\)個樣本組成的訓練集\(\{(x^{(i)},y^{(i)}),i=1,\cdots,m\}\),其中\(zhòng)(y^{(i)}\in\{0,1\}\),\(x^{(i)}=\{x^{(i)}_1,\cdots,x^{(i)}_{n_i}\}\),\(n_i\)為第\(i\)個訓練樣本的單詞總數(shù)。在該訓練集上定義的似然函數(shù)如下: \begin{equation} \begin{array}{rl} &\ell(\phi_y,\phi_{k|y=0},\phi_{k|y=1})\\ =&\prod_{i=1}^mp(x^{(i)},y^{(i)})\\ =&\prod_{i=1}^m\left(\prod_{j=1}^{n_i}p(x_j^{(i)}|y^{(i)};\phi_{k|y=0},\phi_{i|y=1})\right)p(y^{(i)};\phi_y) \end{array} \end{equation} 考慮到存在約束條件\(\sum_{i=1}^{|V|}\phi_{k|y=0}=1\)和\(\sum_{i=1}^{|V|}\phi_{k|y=1}=1\),我們在似然函數(shù)的對數(shù)形式中引入Lagrange乘子\(\lambda_1,\lambda_2\),得到如下的Lagrange函數(shù) \begin{equation} \begin{array}{rl} &\mathcal{L}(\phi_y,\phi_{k|y=1},\phi_{k|y=1})\\ =&\sum_{i=1}^m\left(\sum_{j=1}^{n_i}\log p(x^{(i)}_j|y^{(i)})+\log p(y^{(i)})\right)\\ &+\lambda_1\left(\sum_{k=1}^{|V|}\phi_{k|y=0}-1\right)+\lambda_2\left(\sum_{k=1}^{|V|}\phi_{k|y=1}-1\right)\\ =&\sum_{i=1}^m\left[\sum_{j=1}^{n_i}\left(1\{y^{(i)}=0\}\sum_{k=1}^{|V|}1\{x_j^{(i)}=k\}\log\phi_{k|y=0}\right.\right.\\ &\left.+1\{y^{(i)}=1\}\sum_{k=1}^{|V|}1\{x_j^{(i)}=k\}\log\phi_{k|y=1}\right)\\ &\left.+y^{(i)}\log\phi_y+\left(1-y^{(i)}\right)\log\left(1-\phi_y\right)\right]\\ &+\lambda_1\left(\sum_{k=1}^{|V|}\phi_{k|y=0}-1\right)+\lambda_2\left(\sum_{k=1}^{|V|}\phi_{k|y=1}-1\right) \end{array} \end{equation} 用最大似然的方法進行參數(shù)估計,Lagrange函數(shù)\(\mathcal{L}\)對各參數(shù)求偏導: \begin{equation} \begin{array}{rl} \frac{\partial\mathcal{L}}{\partial\phi_y}&=\sum_{i=1}^m\frac{y^{(i)}}{\phi_y}-\frac{1-y^{(i)}}{1-\phi_y}\\ &=\sum_{i=1}^m\frac{y^{(i)}-\phi_y}{\phi_y(1-\phi_y)}\\ &\Rightarrow\phi_y=\frac{\sum_{i=1}^my^{(i)}}{m}=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}}{m} \end{array} \end{equation} \begin{equation} \begin{array}{rl} \frac{\partial\mathcal{L}}{\partial\phi_{k|y=0}}&=\sum_{i=1}^m\sum_{j=1}^{n_i}\frac{1\{x_j^{(i)}=k\&\&y^{(i)}=0\}}{\phi_{k|y=0}}+\lambda_1=0\\ &\Rightarrow\phi_{k|y=0}=-\frac{\sum_{i=1}^m\sum_{j=1}^{n_i}1\{x_j^{(i)}=k\&\&y^{(i)}=0\}}{\lambda_1} \end{array} \end{equation} \begin{equation} \begin{array}{rl} \frac{\partial\mathcal{L}}{\partial\phi_{k|y=1}}&=\sum_{i=1}^m\sum_{j=1}^{n_i}\frac{1\{x_j^{(i)}=k\&\&y^{(i)}=1\}}{\phi_{k|y=1}}+\lambda_2=0\\ &\Rightarrow\phi_{k|y=1}=-\frac{\sum_{i=1}^m\sum_{j=1}^{n_i}1\{x_j^{(i)}=k\&\&y^{(i)}=1\}}{\lambda_2} \end{array} \end{equation} 又存在\(\sum_{k=1}^M\phi_{k|y=0}=1\)和\(\sum_{k=1}^M\phi_{k|y=1}=1\),結合上式,我們得到 \begin{equation} \lambda_1=-\sum_{i=1}^m\sum_{j=1}^{n_i}\sum_{k=1}^{|V|}1\{x_j^{(i)}=k\&\&y^{(i)}=0\}=-\sum_{i=1}^m1\{y^{(i)}=0\}n_i \end{equation} \begin{equation} \lambda_2=-\sum_{i=1}^m\sum_{j=1}^{n_i}\sum_{k=1}^{|V|}1\{x_j^{(i)}=k\&\&y^{(i)}=1\}=-\sum_{i=1}^m1\{y^{(i)}=1\}n_i \end{equation} 將求得的\(\lambda_1\)和\(\lambda_2\)帶入上式,很容易求得 \begin{equation} \phi_{k|y=0}=\frac{\sum_{i=1}^m\sum_{j=1}^{n_i}1\{x_j^{(i)}=k\&\&y^{(i)}=0\}}{\sum_{i=1}^m1\{y^{(i)}=0\}n_i} \end{equation} \begin{equation} \phi_{k|y=1}=\frac{\sum_{i=1}^m\sum_{j=1}^{n_i}1\{x_j^{(i)}=k\&\&y^{(i)}=1\}}{\sum_{i=1}^m1\{y^{(i)}=1\}n_i} \end{equation} 觀察求出來的參數(shù),\(\phi_y\)很顯然就是在訓練數(shù)據(jù)中統(tǒng)計出來的垃圾郵件出現(xiàn)的頻率;\(\phi_{k|y=1}\)的分母為所有垃圾郵件的總長度,分子為所有垃圾郵件中第\(k\)個單詞出現(xiàn)的次數(shù),總體求得的實際上就是第\(k\)個單詞在垃圾郵件中出現(xiàn)的概率。 我們在此基礎上加上Laplace平滑,得到如下形式的參數(shù) \begin{equation} \phi_y=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}+1}{m+2} \end{equation} \begin{equation} \phi_{k|y=0}=\frac{\sum_{i=1}^m\sum_{j=1}^{n_i}1\{x_j^{(i)}=k\&\&y^{(i)}=0\}+1}{\sum_{i=1}^m1\{y^{(i)}=0\}n_i+|V|} \end{equation} \begin{equation} \phi_{k|y=1}=\frac{\sum_{i=1}^m\sum_{j=1}^{n_i}1\{x_j^{(i)}=k\&\&y^{(i)}=1\}+1}{\sum_{i=1}^m1\{y^{(i)}=1\}n_i+|V|} \end{equation} 多項分布型樸素貝葉斯則考慮了詞典中的每個單詞在每類樣本中的詞頻,所以它的應用場合更傾向于詞頻扮演重要角色的分類問題,比如主題分類問題(Topic Classification)。在主題分類問題中,出現(xiàn)次數(shù)太少的詞很難主導整個文章的主體類型,但是如果某些詞頻繁出現(xiàn),那么文章的主題既有可能和這些詞相關。 求得模型參數(shù)后,可以確定先驗概率\(p(y)\),給定特征為\(x\)的新樣本,\(p(x|y)\)也很容易計算,最后的分類準則如下: \begin{equation} \hat{y}=\underset{y\in\{0,1\}}{\arg\max}\;p(y|x)=\underset{y\in\{0,1\}}{\arg\max}\left(\log p(y)+\sum_{j=1}^{n_i}\log p(x_j|y)\right) \end{equation}
樸素貝葉斯與連續(xù)型數(shù)據(jù)
前面我們說的兩種樸素貝葉斯模型都只適應于離散型的數(shù)據(jù),那么遇到連續(xù)型的數(shù)據(jù)該怎么處理?接下來同樣介紹兩種常用的方法:概率分布估計和離散化。 對于連續(xù)型數(shù)據(jù),我們通常假設該數(shù)據(jù)在每類樣本中都各自服從高斯分布\(\mathcal{N}(\mu_0,\sigma_0^2)\)和\(\mathcal{N}(\mu_1,\sigma_1^2)\)。當然,也可以根據(jù)實際情況給出更符合實際情況的概率分布模型,這里就以高斯模型為例。由于樣本的每個屬性都是條件獨立的,所以每個屬性都可以有不同的概率分布,如下圖所示:
?模型參數(shù)包括一個Bernoulli分布的參數(shù)\(\phi_y=p(y=1)\)和\(2n\)個Gauss模型對應的參數(shù)\(\mu_{j|y=0}\),\(\sigma_{j|y=0}\),\(\mu_{j|y=1}\),\(\sigma_{j|y=1}\)。模型中存在的概率關系如下: \begin{equation} p(y)=\phi_y^{y}(1-\phi_y)^{1-y} \end{equation} \begin{equation} p(x|y)=\prod_{i=1}^np(x_i|y) \end{equation} \begin{equation} \begin{array}{lr} p(x_i|y)&=\left(\frac{1}{\sqrt{2\pi\sigma_0^2}}\exp\left(-\frac{(x_i-\mu_0)^2}{2\sigma_0^2}\right)\right)^{1\{y=0\}}\\ &\cdot\left(\frac{1}{\sqrt{2\pi\sigma_1^2}}\exp\left(-\frac{(x_i-\mu_1)^2}{2\sigma_1^2}\right)\right)^{1\{y=1\}} \end{array} \end{equation} 假設我們有\(zhòng)(m\)個樣本組成的訓練集\(\{(x^{(i)},y^{(i)}),i=1,\cdots,m\}\),其中\(zhòng)(x^{(i)}\in\mathbb{R}^n\),\(y^{(i)}\in\{0,1\}\),得到如下的似然函數(shù): \begin{equation} \begin{array}{rl} &\ell(\phi_y,\mu_{k|y=0},\sigma_{k|y=0}^2,\mu_{k|y=1},\sigma_{k|y=1}^2)\\ =&\prod_{i=1}^mp\left(x^{(i)},y^{(i)}\right)\\ =&\prod_{i=1}^m\left(\prod_{j=1}^np\left(x_j^{(i)}|y^{(i)}\right)\right)p(y^{(i)})\\ \end{array} \end{equation} 將上述似然函數(shù)轉化為對數(shù)形式,方便后面求偏導 \begin{equation} \begin{array}{rl} &\mathcal{L}(\phi_y,\mu_{k|y=0},\sigma_{k|y=0}^2,\mu_{k|y=1},\sigma_{k|y=1}^2)\\ =&\sum_{i=1}^m\left(\sum_{j=1}^n\log p\left(x_j^{(i)}|y^{(i)}\right)+\log p\left(y^{(i)}\right)\right)\\ =&-\frac{1}{2}\sum_{i=1}^m\left[\sum_{j=1}^n1\{y^{(i)}=0\}\left(\frac{\left(x_j^{(i)}-\mu_{j|y=0}\right)^2}{\sigma_{j|y=0}^2}+\log\sigma_{j|y=0}^2\right)\right.\\ &\left.+1\{y^{(i)}=1\}\left(\frac{\left(x_j^{(i)}-\mu_{j|y=1}\right)^2}{\sigma_{j|y=1}^2}+\log\sigma_{j|y=1}^2\right)\right]\\ &\quad+y^{(i)}\log\phi_y+\left(1-y^{(i)}\right)\log(1-\phi_y)+const \end{array} \end{equation} 依然用最大似然估計所有參數(shù),將上面的對數(shù)似然函數(shù)對各個參數(shù)求偏導 \begin{equation} \begin{array}{rl} \frac{\partial\mathcal{L}}{\partial\phi_y}=&-\frac{1}{2}\sum_{i=1}^m\frac{y^{(i)}}{\phi_y}-\frac{1-y^{(i)}}{1-\phi_y}\\ =&\frac{1}{2}\sum_{i=1}^m\frac{\phi_y-y^{(i)}}{\phi_y(1-\phi_y)}=0\\ \Rightarrow&\phi_y=\frac{\sum_{i=1}^my^{(i)}}{m} \end{array} \end{equation} \begin{equation} \begin{array}{rl} \frac{\partial\mathcal{L}}{\partial\mu_{j|y=0}}&=-\sum_{i=1}^m1\{y^{(i)}=0\}\frac{\left(x_j^{(i)}-\mu_{j|y=0}\right)}{\sigma_{j|y=0}^2}=0\\ &\Rightarrow \mu_{j|y=0}=\frac{\sum_{i=1}^m1\{y^{(i)}=0\}x_j^{(i)}}{\sum_{i=1}^m1\{y^{(i)}=0\}} \end{array} \end{equation} 同理,可得 \begin{equation} \mu_{j|y=1}=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}x_j^{(i)}}{\sum_{i=1}^m1\{y^{(i)}=1\}} \end{equation} \begin{equation} \begin{array}{rl} \frac{\partial\mathcal{L}}{\partial\sigma_{j|y=0}}&=\sum_{i=1}^m1\{y^{(i)}=0\}\left(\frac{\left(x_j^{(i)}-\mu_{j|y=0}\right)^2}{\sigma_{j|y=0}^3}-\frac{1}{\sigma_{j|y=0}}\right)=0\\ &\Rightarrow\sigma_{j|y=0}^2=\frac{\sum_{i=1}^m1\{y^{(i)}=0\}\left(x_j^{(i)}-\mu_{j|y=0}\right)^2}{\sum_{i=1}^m1\{y^{(i)}=0\}} \end{array} \end{equation} 同理,可得 \begin{equation} \sigma_{j|y=1}^2=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}\left(x_j^{(i)}-\mu_{j|y=1}\right)^2}{\sum_{i=1}^m1\{y^{(i)}=1\}} \end{equation} 仔細觀察下上面求出的參數(shù),我們很容易就能發(fā)現(xiàn):\(\phi_y\)其實就訓練集中正樣本出現(xiàn)的頻率;\(\mu_{j|y=0}\)和\(\mu_{j|y=0}\)分別是正負樣本特征第\(j\)維的均值;\(\sigma_{j|y=0}^2\)和\(\sigma_{j|y=1}^2\)則分別是正負樣本特征第\(j\)維的方差。有了模型參數(shù),要判定新樣本屬于哪個類別,我們可以沿用前面的方法。 另外一種處理連續(xù)型數(shù)據(jù)的方法就是將其離散化(Discretization)為\(k\)個有限的離散值(一般\(k=10\)),然后應用樸素貝葉斯算法。如下表所示,用\(x_i\)表示月收入,我們也許會將其離散化為表中的形式。如果某個人的月收入為\(20K\),則對應的特征\(x_i=4\),然后用多項分布為\(p(x_i|y)\)建模。
?現(xiàn)在假設我們有很多維聯(lián)系的特征需要離散化處理,如下圖所示:第一維數(shù)據(jù)被劃分成兩個區(qū)間,第二維數(shù)據(jù)被劃分成四個區(qū)間,原始數(shù)據(jù)第一維和第二維分別落入第二個和第三個區(qū)間,那么離散化后的數(shù)值分別為2和3。
在這里,我們假設每一維數(shù)據(jù)都是連續(xù)數(shù)值,原始特征的第\(j\)維連續(xù)數(shù)據(jù)經離散化后變成了\(k_j\)個離散數(shù)值\(\{1,2,\cdots,k_j\}\),每個樣本對應的標簽信息\(y\in\{0,1\}\)。當然,這可以視為Bernoulli型樸素貝葉斯的擴展,因為這里第\(x_j\)的取值范圍由\(\{0,1\}\)擴展到\(\{1,2,\cdots,k_j\}\)。很顯然,我們應該用多項分布來為\(p(x_j|y)\)建模。與前面的多項分布型樸素貝葉斯也有不同,這里每一維特征服從不同的多項分布。模型包含的參數(shù)有\(zhòng)(\phi_y=p(y=1)\),\(\phi_{i=t|y=0}=p(x_i=t|y=0)\)和\(\phi_{i=t|y=1}=p(x_i=t|y=1)\)。模型中存在的概率關系有: \begin{equation} p(y)=\phi_y^{y}(1-\phi_y)^{1-y} \end{equation} \begin{equation} p(x|y)=\prod_{i=1}^np(x_i|y) \end{equation} \begin{equation} \begin{array}{rl} p(x_i|y)&=\left(\phi_{i=1|y=0}^{1\{x_i=1\}}\cdots\phi_{i=k_i|y=0}^{1\{x_i=k_i\}}\right)^{1\{y=0\}}\left(\phi_{i=1|y=1}^{1\{x_i=1\}}\cdots\phi_{i=k_i|y=1}^{1\{x_i=k_i\}}\right)^{1\{y=1\}}\\ &=\left(\prod_{t=1}^{k_i}\phi_{i=t|y=0}^{1\{x_i=k\}}\right)^{1\{y=0\}}\left(\prod_{t=1}^{k_i}\phi_{i=t|y=1}^{1\{x_i=k\}}\right)^{1\{y=1\}} \end{array} \end{equation} 對于\(m\)個樣本組成的訓練集\(\mathcal{S}=\{(x^{(i)},y^{(i)}),i=1,\cdots,m\}\),其中\(zhòng)(x^{(i)}\)為\(n\)維離散數(shù)值向量,\(y^{(i)}\in\{0,1\}\),\(x_j^{(i)}\in\{1,\cdots,k_i\}\),得到如下的似然函數(shù): \begin{equation} \begin{array}{rl} &\ell(\phi_y,\phi_{i=t|y=0},\phi_{i=t|y=1})\\ =&\prod_{i=1}^mp\left(x^{(i)},y^{(i)}\right)\\ =&\prod_{i=1}^m\left(\prod_{j=1}^np\left(x_j^{(i)}|y^{(i)}\right)\right)p(y^{(i)})\\ \end{array} \end{equation} 將上面似然函數(shù)轉化為對數(shù)形式 \begin{equation} \mathcal{L}(\phi_y,\phi_{i=t|y=0},\phi_{i=t|y=1}) =\sum_{i=1}^m\left(\sum_{j=1}^n\log p\left(x_j^{(i)}|y^{(i)}\right)+\log p\left(y^{(i)}\right)\right) \end{equation} 考慮到兩個等式約束\(\sum_{t=1}^{k_j}\phi_{j=t|y=0}=1\)和\(\sum_{t=1}^{k_j}\phi_{j=t|y=1}=1\),在上式基礎上引入Lagrange乘子\(\lambda_1\)和\(\lambda_2\) \begin{equation} \begin{array}{rl} &\mathcal{O}(\phi_y,\phi_{i=t|y=0},\phi_{i=t|y=1})\\ =&\sum_{i=1}^m\left(\sum_{j=1}^n\log p\left(x_j^{(i)}|y^{(i)};\phi_{j=t|y=0},\phi_{j=t|y=1}\right)+\log p\left(y^{(i)};\phi_y\right)\right)\\ &+\lambda_1\left(\sum_{t=1}^{k_j}\phi_{j=t|y=0}-1\right)+\lambda_2\left(\sum_{t=1}^{k_j}\phi_{j=t|y=0}-1\right) \end{array} \end{equation} 用最大似然的方法進行參數(shù)估計,對各參數(shù)求偏導 \begin{equation} \begin{array}{rl} \frac{\partial\mathcal{O}}{\partial\phi_y}&=\frac{\partial}{\partial\phi_y}\sum_{i=1}^m\log p\left(y^{(i)}\right)\\ &=\sum_{i=1}^m\frac{\partial}{\partial\phi_y}\left(y^{(i)}\log\phi_y+\left(1-y^{(i)}\right)\log(1-\phi_y)\right)\\ &=\sum_{i=1}^m\frac{y^{(i)}-\phi_y}{\phi_y(1-\phi_y)}=0\\ &\Rightarrow \phi_y=\frac{\sum_{i=1}^my^{(i)}}{m}=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}}{m} \end{array} \end{equation} \begin{equation} \begin{array}{rl} &\frac{\partial\mathcal{O}}{\partial\phi_{j=t|y=0}}\\ =&\frac{\partial}{\partial\phi_{j=t|y=0}}\sum_{i=1}^m\log p\left(x_j^{(i)}|y^{(i)}\right)+\lambda_1\left(\sum_{t=1}^{k_j}\phi_{j=t|y=0}-1\right)\\ =&\frac{\sum_{i=1}^m1\{y^{(i)}=0\&\&x_j^{(i)}=t\}}{\phi_{j=t|y=0}}+\lambda_1=0\\ \Rightarrow&\phi_{j=t|y=0}=-\frac{\sum_{i=1}^m1\{y^{(i)}=0\&\&x_j^{(i)}=t\}}{\lambda_1} \end{array} \end{equation} \begin{equation} \begin{array}{rl} &\frac{\partial\mathcal{O}}{\partial\phi_{j=t|y=1}}\\ =&\frac{\partial}{\partial\phi_{j=t|y=1}}\sum_{i=1}^m\log p\left(x_j^{(i)}|y^{(i)}\right)+\lambda_2\left(\sum_{t=1}^{k_j}\phi_{j=t|y=1}-1\right)\\ =&\frac{\sum_{i=1}^m1\{y^{(i)}=1\&\&x_j^{(i)}=t\}}{\phi_{j=t|y=1}}+\lambda_2=0\\ \Rightarrow&\phi_{j=t|y=1}=-\frac{\sum_{i=1}^m1\{y^{(i)}=1\&\&x_j^{(i)}=t\}}{\lambda_2} \end{array} \end{equation} 根據(jù)\(\sum_{t=1}^{k_j}\phi_{j=t|y=0}=1\)和\(\sum_{t=1}^{k_j}\phi_{j=t|y=1}=1\),將上面求出的參數(shù)左右兩邊同時加和,求得 \begin{equation} \lambda_1=-\sum_{t=1}^{k_j}\sum_{i=1}^m1\{y^{(i)}=0\&\&x_j^{(i)}=t\}=-\sum_{i=1}^m1\{y^{(i)}=0\} \end{equation} \begin{equation} \lambda_2=-\sum_{t=1}^{k_j}\sum_{i=1}^m1\{y^{(i)}=1\&\&x_j^{(i)}=t\}=-\sum_{i=1}^m1\{y^{(i)}=1\} \end{equation} 將求出的\(\lambda_1\)和\(\lambda_2\)帶回,可求得 \begin{equation} \phi_{j=t|y=0}=\frac{\sum_{i=1}^m1\{y^{(i)}=0\&\&x_j^{(i)}=t\}}{\sum_{i=1}^m1\{y^{(i)}=0\}} \end{equation} \begin{equation} \phi_{j=t|y=1}=\frac{\sum_{i=1}^m1\{y^{(i)}=1\&\&x_j^{(i)}=t\}}{\sum_{i=1}^m1\{y^{(i)}=1\}} \end{equation} 在進入Laplace平滑后,我們的模型參數(shù)如下: \begin{equation} \phi_y=\frac{\sum_{i=1}^m1\{y^{(i)}=1\}+1}{m+2} \end{equation} \begin{equation} \phi_{j=t|y=0}=\frac{\sum_{i=1}^m1\{y^{(i)}=0\&\&x_j^{(i)}=t\}+1}{\sum_{i=1}^m1\{y^{(i)}=0\}+k_j} \end{equation} \begin{equation} \phi_{j=t|y=1}=\frac{\sum_{i=1}^m1\{y^{(i)}=1\&\&x_j^{(i)}=t\}+1}{\sum_{i=1}^m1\{y^{(i)}=1\}+k_j} \end{equation} 那么,在處理連續(xù)型數(shù)據(jù)時,我們應該選用概率分布估計還是離散化的方法?如果訓練數(shù)據(jù)較少,或者數(shù)據(jù)的概率分布我們大致知道數(shù)據(jù)的概率分布,那么選用合適的概率分布模型效果會更好;當有大量的訓練數(shù)據(jù)時,離散化的方法會有不錯的表現(xiàn),因為其模型更為復雜,整個學習過程實際上是在不斷擬合數(shù)據(jù)的實際概率分布模型,而前者是在假定數(shù)據(jù)滿足某種概率分布的前提下學習模型的參數(shù)。樸素貝葉斯更多地被用于有大量訓練數(shù)據(jù)的應用場合,離散化的技術手段應用的更廣泛一些。 一般來說,簡單模型很容易產生欠擬合(under-fitting)的情況,而復雜模型容易產生過擬合(over-fitting)的情況。在訓練數(shù)據(jù)較小的時候,復雜模型會產生過擬合問題,簡單模型的泛化能力要比復雜模型好,但這時兩者都只能學習到數(shù)據(jù)的極少數(shù)特點;當訓練數(shù)據(jù)很充足時,簡單模型則會出現(xiàn)欠擬合問題,其泛化能力不會因訓練數(shù)據(jù)的增大而增強,此時復雜模型的優(yōu)勢就顯露出來了。
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
