樸素貝葉斯文本分類簡單介紹
本文介紹樸素貝葉斯算法如何對文本進行分類。比如,每個用戶的購物評論就是一篇文本,識別出這篇文本屬於正向評論還是負面評論 就是分類的過程,而類別就是:{正面評論,負面評論}。正面評論為Positive,用標識符‘+‘表示;負面評論為Negative,用標識符‘-‘表示。
一,分類目標
尋找文本的某些特征,然後根據這些特征將文本歸為某個類。
The goal of classification is to take a single observation, extract some useful features, and thereby classify the observation into one of a set of discrete classes.
使用監督式機器學習方法對文本進行分類:首先假設已經有分好類的N篇文檔:(d1,c1)、(d2,c2)、(d3,c3)……(dn,cn)
di表示第i篇文檔,ci表示第i個類別。目標是:尋找一個分類器,這個分類器能夠:當丟給它一篇新文檔d,它就輸出d (最有可能)屬於哪個類別c
二,分類器的介紹
①Generative classifier
樸素貝葉斯分類器屬於Generative classifier。
②Discriminative classifier
邏輯回歸屬於Discriminative classifier。
Generative classifiers like naive Bayes build a model of each class. Given an observation,they return the class most likely to have generated the observation.
Discriminative classifiers like logistic regression instead learn what features from the input are most useful to discriminate between the different possible classes.
三,詞袋模型(Bag Of Words)
前面提到,文本分類需要尋找文本的特征。而詞袋模型就是表示文本特征的一種方式。給定一篇文檔,它會有很多特征,比如文檔中每個單詞出現的次數、某些單詞出現的位置、單詞的長度、單詞出現的頻率……而詞袋模型只考慮一篇文檔中單詞出現的頻率(次數),用每個單詞出現的頻率作為文檔的特征(或者說用單詞出現的頻率來代表該文檔)。詞袋模型的示意圖如下:
We represent a text document as if it were a bag-of-words,
that is, an unordered set of words with their position ignored, keeping only their frequency in the document.
四,樸素貝葉斯分類器
樸素貝葉斯分類器是一個概率分類器。假設現有的類別C={c1,c2,……cm}。給定一篇文檔d,文檔d最有可能屬於哪個類呢?這個問題用數學公式表示如下:
(公式一)
c^ 就是:在所有的類別C={c1,c2,……cm} 中,使得:條件概率P(c|d)取最大值的類別。使用貝葉斯公式,將(公式一)轉換成如下形式:
(公式二)
對類別C中的每個類型,計算 [p(d|c)*p(c)]/p(d) 的值,然後選取最大值對應的那個類型ci ,該ci就是最優解c^,因此,可以忽略掉分母 p(d),(公式二)變成如下形式:
(公式三)
這個公式由兩部分組成,前面那部分P(d|c) 稱為似然函數,後面那部分P(c) 稱為先驗概率。
前面提到使用詞袋模型來表示 文檔d,文檔d的每個特征表示為:d={f1,f2,f3……fn},那麽這裏的特征fi 其實就是單詞wi 出現的頻率(次數),公式三轉化成如下形式:
(公式四)
對文檔d 做個假設:假設各個特征之間是相互獨立的。那麽p(f1,f2……fn|c)=p(f1|c)*p(f2|c)*……*p(fn|c),公式四轉化成如下形式:
(公式五)
由於每個概率值很小(比如0.0001)若幹個很小的概率值直接相乘,得到的結果會越來越小。為了避免計算過程出現下溢(underflower),引入對數函數Log,在 log space中進行計算。然後使用詞袋模型的每個單詞wi 出現頻率作為特征,得到如下公式
(公式六)
五,訓練樸素貝葉斯分類器
訓練樸素貝葉斯的過程其實就是計算先驗概率和似然函數的過程。
①先驗概率P(c)的計算
P(c)的意思是:在所有的文檔中,類別為c的文檔出現的概率有多大?假設訓練數據中一共有Ndoc篇文檔,只要數一下類別c的文檔有多少個就能計算p(c)了,類別c的文檔共有Nc篇,先驗概率的計算公式如下:
(公式七)
【先驗概率 其實就是 準備幹一件事情時,目前已經掌握了哪些信息了】關於先驗信息理解,可參考:這篇文章。
For the document prior P(c) we ask what percentage of the documents in our training set are in each class c.
Let Nc be the number of documents in our training data with
class c and Ndoc be the total number of documents
②似然函數P(wi|c)的計算
由於是用詞袋模型表示一篇文檔d,對於文檔d中的每個單詞wi,找到訓練數據集中所有類別為c的文檔,數一數 單詞wi在這些文檔(類別為c)中出現的次數:count(wi,c)
然後,再數一數訓練數據集中類別為c的文檔一共有多少個單詞。計算 二者之間的比值,就是似然函數的值。似然函數計算公式如下:
(公式八)
其中V,就是詞庫。(有些單詞在詞庫中,但是不屬於類別C,那麽 count(w,c)=0)
Here the vocabulary V consists of the union of all the word types in all classes, not just the words in one class c.
從上面計算似然函數的過程來看,其實相當於一個發掘(統計)潛藏規律的過程。
六,unknow words的情形
假設只考慮文本二分類:將文檔分成 positve類別,或者negative類別,C={positive, negative}
在訓練數據集中,類別為positive的所有文檔 都沒有 包含 單詞wi = fantastic(fantastic可能出現在類別為negative的文檔中)
那麽 count(wi=fantastic,ci=positive)=0 。那麽:
而註意到前面公式五中的累乘,整篇文檔的似然函數值為0,也就是說:如果文檔d中有個單詞fantastic在類別為c的訓練數據集文檔中從未出現過,那文檔d被分類到類別c的概率為0,盡管文檔d中還有一些其他單詞(特征),而這些單詞所代表的特征認為文檔d應該被分類 到 類別c中
But since naive Bayes naively multiplies all the feature likelihoods together, zero
probabilities in the likelihood term for any class will cause the probability of the
class to be zero, no matter the other evidence!
解決方案就是 add-one smoothing。(不介紹了),其實就是將“出現次數加1”。似然函數公式變成如下形式:
(公式九)
其中|V|是詞庫中所有單詞的個數。
七,樸素貝葉斯分類示例
假設訓練數據集有五篇文檔,其中Negative類別的文檔有三篇,用符號 ‘-‘ 標識;Positive類別的文檔有二篇,用符號 ‘+‘ 標識,它們的內容如下:
- just plain boring
- entirely predictable and lacks energy
- no surprises and very few laughs
+ very powerful
+ the most fun film of the summer
測試數據集T 有一篇文檔dt,內容如下:
predictable with no fun
樸素貝葉斯分類器會把“predictable with no fun”歸為哪個類呢?根據第五節“訓練樸素貝葉斯分類器”,需要計算先驗概率和似然函數。
由於訓練數據集中一共有5篇文檔,其中類別 ‘+‘ 的文檔有2篇,類別為 ‘-‘ 的文檔有3篇,因此先驗概率:P(c)=P(‘-‘)=Nc/Ndoc=3/5=0.6
類別為‘+‘ 的文檔有2篇,故 P(c)=P(‘+‘)=Nc/Ndoc=2/5=0.4
對測試數據集文檔dt中的每個單詞,似然函數采用“add-one smoothing”處理,計算相應的似然概率:
首先單詞 predictable 在訓練數據集中 類別為‘-‘的文檔中只出現了1次,類別為‘-‘的文檔一共有14個單詞,訓練數據集中兩種類型的文檔加起來一共有23個單詞,但是有三個單詞(and、
very、the)重復出現了兩次,故詞庫V的大小為 20。因此單詞predictable對應的似然概率如下:
p(predictable|‘-‘)=(1+1)/(14+20)=2/34
同理:p(predictable|‘+‘)=(0+1)/(9+20)=2/29 (predictable沒有在類別為‘+‘的訓練數據集中出現過)
類似地:p(no|‘=‘)=(1+1)/(14+20) p(no|‘+‘)=(0+1)/(9+20)
p(fun|‘-‘)=(0+1)/(14+20) p(fun|‘+‘)=(1+1)/(9+20)
因此,測試集中的文檔d歸類為 ‘-‘ 的概率為:0.6 * (2*2*1)/343 = 6.1*10-5
測試集中的文檔d歸類為 ‘+‘ 的概率為:0.4*(1*1*2)/293 =3.2*10-5
比較上面兩個概率的大小,就可以知道將“predictable with no fun”歸為 ‘-‘ 類別。
八,參考資料
CS 124: From Languages to Information
機器學習中的貝葉斯方法---先驗概率、似然函數、後驗概率的理解及如何使用貝葉斯進行模型預測(1)
機器學習中的貝葉斯方法---先驗概率、似然函數、後驗概率的理解及如何使用貝葉斯進行模型預測(2)
樸素貝葉斯文本分類簡單介紹