朴素贝叶斯文本分类java_朴素贝叶斯文本分类简单介绍
本文介紹樸素貝葉斯算法如何對文本進(jìn)行分類。比如,每個用戶的購物評論就是一篇文本,識別出這篇文本屬于正向評論還是負(fù)面評論 就是分類的過程,而類別就是:{正面評論,負(fù)面評論}。正面評論為Positive,用標(biāo)識符'+'表示;負(fù)面評論為Negative,用標(biāo)識符'-'表示。
一,分類目標(biāo)
尋找文本的某些特征,然后根據(jù)這些特征將文本歸為某個類。
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.
使用監(jiān)督式機(jī)器學(xué)習(xí)方法對文本進(jìn)行分類:首先假設(shè)已經(jīng)有分好類的N篇文檔:(d1,c1)、(d2,c2)、(d3,c3)……(dn,cn)
di表示第i篇文檔,ci表示第i個類別。目標(biāo)是:尋找一個分類器,這個分類器能夠:當(dāng)丟給它一篇新文檔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)
前面提到,文本分類需要尋找文本的特征。而詞袋模型就是表示文本特征的一種方式。給定一篇文檔,它會有很多特征,比如文檔中每個單詞出現(xiàn)的次數(shù)、某些單詞出現(xiàn)的位置、單詞的長度、單詞出現(xiàn)的頻率……而詞袋模型只考慮一篇文檔中單詞出現(xiàn)的頻率(次數(shù)),用每個單詞出現(xiàn)的頻率作為文檔的特征(或者說用單詞出現(xiàn)的頻率來代表該文檔)。詞袋模型的示意圖如下:
We represent a text document as if it were abag-of-words,
that is, an unordered set of words with their position ignored, keeping only their frequency in the document.
四,樸素貝葉斯分類器
樸素貝葉斯分類器是一個概率分類器。假設(shè)現(xiàn)有的類別C={c1,c2,……cm}。給定一篇文檔d,文檔d最有可能屬于哪個類呢?這個問題用數(shù)學(xué)公式表示如下:
(公式一)
c^就是:在所有的類別C={c1,c2,……cm} 中,使得:條件概率P(c|d)取最大值的類別。使用貝葉斯公式,將(公式一)轉(zhuǎn)換成如下形式:
(公式二)
對類別C中的每個類型,計算?[p(d|c)*p(c)]/p(d) 的值,然后選取最大值對應(yīng)的那個類型ci ,該ci就是最優(yōu)解c^,因此,可以忽略掉分母 p(d),(公式二)變成如下形式:
(公式三)
這個公式由兩部分組成,前面那部分P(d|c) 稱為似然函數(shù),后面那部分P(c) 稱為先驗(yàn)概率。
前面提到使用詞袋模型來表示 文檔d,文檔d的每個特征表示為:d={f1,f2,f3……fn},那么這里的特征fi其實(shí)就是單詞wi出現(xiàn)的頻率(次數(shù)),公式三轉(zhuǎn)化成如下形式:
(公式四)
對文檔d 做個假設(shè):假設(shè)各個特征之間是相互獨(dú)立的。那么p(f1,f2……fn|c)=p(f1|c)*p(f2|c)*……*p(fn|c),公式四轉(zhuǎn)化成如下形式:
(公式五)
由于每個概率值很小(比如0.0001)若干個很小的概率值直接相乘,得到的結(jié)果會越來越小。為了避免計算過程出現(xiàn)下溢(underflower),引入對數(shù)函數(shù)Log,在 log space中進(jìn)行計算。然后使用詞袋模型的每個單詞wi 出現(xiàn)頻率作為特征,得到如下公式
(公式六)
五,訓(xùn)練樸素貝葉斯分類器
訓(xùn)練樸素貝葉斯的過程其實(shí)就是計算先驗(yàn)概率和似然函數(shù)的過程。
①先驗(yàn)概率P(c)的計算
P(c)的意思是:在所有的文檔中,類別為c的文檔出現(xiàn)的概率有多大?假設(shè)訓(xùn)練數(shù)據(jù)中一共有Ndoc篇文檔,只要數(shù)一下類別c的文檔有多少個就能計算p(c)了,類別c的文檔共有Nc篇,先驗(yàn)概率的計算公式如下:
(公式七)
【先驗(yàn)概率 其實(shí)就是 準(zhǔn)備干一件事情時,目前已經(jīng)掌握了哪些信息了】關(guān)于先驗(yàn)信息理解,可參考:這篇文章。
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
②似然函數(shù)P(wi|c)的計算
由于是用詞袋模型表示一篇文檔d,對于文檔d中的每個單詞wi,找到訓(xùn)練數(shù)據(jù)集中所有類別為c的文檔,數(shù)一數(shù) 單詞wi在這些文檔(類別為c)中出現(xiàn)的次數(shù):count(wi,c)
然后,再數(shù)一數(shù)訓(xùn)練數(shù)據(jù)集中類別為c的文檔一共有多少個單詞
。計算 二者之間的比值,就是似然函數(shù)的值。似然函數(shù)計算公式如下:
(公式八)
其中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.
從上面計算似然函數(shù)的過程來看,其實(shí)相當(dāng)于一個發(fā)掘(統(tǒng)計)潛藏規(guī)律的過程。
六,unknow words的情形
假設(shè)只考慮文本二分類:將文檔分成 positve類別,或者negative類別,C={positive, negative}
在訓(xùn)練數(shù)據(jù)集中,類別為positive的所有文檔 都沒有 包含 單詞wi?=?fantastic(fantastic可能出現(xiàn)在類別為negative的文檔中)
那么 count(wi=fantastic,ci=positive)=0 。那么:
而注意到前面公式五中的累乘,整篇文檔的似然函數(shù)值為0,也就是說:如果文檔d中有個單詞fantastic在類別為c的訓(xùn)練數(shù)據(jù)集文檔中從未出現(xiàn)過,那文檔d被分類到類別c的概率為0,盡管文檔d中還有一些其他單詞(特征),而這些單詞所代表的特征認(rèn)為文檔d應(yīng)該被分類 到 類別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。(不介紹了),其實(shí)就是將“出現(xiàn)次數(shù)加1”。似然函數(shù)公式變成如下形式:
(公式九)
其中|V|是詞庫中所有單詞的個數(shù)。
七,樸素貝葉斯分類示例
假設(shè)訓(xùn)練數(shù)據(jù)集有五篇文檔,其中Negative類別的文檔有三篇,用符號 '-' 標(biāo)識;Positive類別的文檔有二篇,用符號 '+' 標(biāo)識,它們的內(nèi)容如下:
- just plain boring
- entirely predictable and lacks energy
- no surprises and very few laughs
+ very powerful
+ the most fun film of the summer
測試數(shù)據(jù)集T 有一篇文檔dt,內(nèi)容如下:
predictable with no fun
樸素貝葉斯分類器會把“predictable with no fun”歸為哪個類呢?根據(jù)第五節(jié)“訓(xùn)練樸素貝葉斯分類器”,需要計算先驗(yàn)概率和似然函數(shù)。
由于訓(xùn)練數(shù)據(jù)集中一共有5篇文檔,其中類別 '+' 的文檔有2篇,類別為 '-' 的文檔有3篇,因此先驗(yàn)概率:P(c)=P('-')=Nc/Ndoc=3/5=0.6
類別為'+' 的文檔有2篇,故P(c)=P('+')=Nc/Ndoc=2/5=0.4
對測試數(shù)據(jù)集文檔dt中的每個單詞,似然函數(shù)采用“add-one smoothing”處理,計算相應(yīng)的似然概率:
首先單詞 predictable 在訓(xùn)練數(shù)據(jù)集中 類別為'-'的文檔中只出現(xiàn)了1次,類別為'-'的文檔一共有14個單詞,訓(xùn)練數(shù)據(jù)集中兩種類型的文檔加起來一共有23個單詞,但是有三個單詞(and、
very、the)重復(fù)出現(xiàn)了兩次,故詞庫V的大小為 20。因此單詞predictable對應(yīng)的似然概率如下:
p(predictable|'-')=(1+1)/(14+20)=2/34
同理:p(predictable|'+')=(0+1)/(9+20)=1/29 ?(predictable沒有在類別為'+'的訓(xùn)練數(shù)據(jù)集中出現(xiàn)過)
類似地: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”歸為 '-' 類別。
八,參考資料
總結(jié)
以上是生活随笔為你收集整理的朴素贝叶斯文本分类java_朴素贝叶斯文本分类简单介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HTML前端连接go语言后段,一次完整的
- 下一篇: 覆盖淘宝原数据、京东商品详情、1688拍