王與堯
(北京理工大學(xué) 珠海學(xué)院計(jì)算機(jī)學(xué)院,廣東 珠海519088)
樸素貝葉斯分類模型是一種非常簡(jiǎn)單有效的分類器模型,核心思路是模型訓(xùn)練階段和分類預(yù)測(cè)階段.假設(shè)某個(gè)體有n項(xiàng)特征(Feature),分別為 w1,w2,...,wm.現(xiàn)有 m個(gè)類別(Category),分別為 c1,c2,...,cm.貝葉斯分類器就是計(jì)算出概率最大的那個(gè)分類.過(guò)程是在訓(xùn)練階段對(duì)每一個(gè)集合的元素估算先驗(yàn)條件概率,然后在分類階段計(jì)算后驗(yàn)概率,返回后驗(yàn)概率最大的類.
使用樸素貝葉斯分類模型時(shí)需要假設(shè)各個(gè)定義的分量對(duì)于決定變量之間是不存在任何關(guān)系的,即給屬性值時(shí)屬性之間需要相互獨(dú)立.雖然在現(xiàn)實(shí)世界中各個(gè)分類條件不可能完全相互獨(dú)立,但是這樣的假設(shè)條件能夠減少樸素貝葉斯分類模型的工作量和復(fù)雜度,所以訓(xùn)練數(shù)據(jù)量越大,模型越精確.
先驗(yàn)條件概率:
后驗(yàn)條件概率:
公式解釋:
P(d):從文檔空間中隨機(jī)抽取一個(gè)文檔d的概率.
P(c):從文檔空間中隨機(jī)抽取一個(gè)文檔d,它屬于類別c的概率(某類文檔數(shù)/總的文檔數(shù)).P(d|c):文檔d對(duì)于給定類c的概率(文檔中的單詞數(shù)/某類中總的單詞數(shù)).
類別集:c={c1,c2,…,cn}.
β文檔向量:d={w1,w2,…,wn}.
P(c|d):測(cè)試文檔d屬于某類c的概率.
本文所用分詞工具為:Lucene全文搜索引擎、Paoding分詞器.MapReduce程序默認(rèn)的輸入格式如圖1所示.
圖1 默認(rèn)的輸入格式
本程序的設(shè)計(jì)如圖2所示.
圖2 本程序的設(shè)計(jì)
根據(jù)圖1和圖2可以知道,如果使用Hadoop默認(rèn)的輸入格式,當(dāng)需要處理的文件數(shù)量達(dá)到上萬(wàn)、上億時(shí),在執(zhí)行任務(wù)時(shí)也需要?jiǎng)?chuàng)建相應(yīng)數(shù)量的Mapper,這樣的做法實(shí)際上是相當(dāng)?shù)托У?,?huì)大量開銷系統(tǒng)資源并且使程序的執(zhí)行時(shí)間變得很長(zhǎng).可以看出Hadoop的默認(rèn)輸入格式是非常不適合執(zhí)行這個(gè)分詞任務(wù)的.為了解決這個(gè)問(wèn)題,本程序使用了CombineFileInputFormat,改變了程序讀取數(shù)據(jù)的方式,使得程序的執(zhí)行效率大大提高.
本研究中使用的工具類:
(1)InputFormat
InputFormat是對(duì)Mapper有非常重要的影響,它決定Mapper的數(shù)量以及Mapper接受數(shù)據(jù)的格式.輸入的數(shù)據(jù)會(huì)被分割成邏輯分片(Split),分片的數(shù)據(jù)會(huì)被RecordReader讀取后交給Mapper處理.
(2)CombineFileInputFormat
CombineFileInputFormat繼承了FileInputFormat,是一個(gè)用來(lái)處理大量小文件任務(wù)而設(shè)計(jì)的輸入格式.在本程序中重寫了getSplit方法,返回的分片類型是CombineFileSplit.本程序還需要實(shí)現(xiàn)createRecordReader方法,建議返回值的類型是CombineFileRecordReader,它可以處理類型為CombineFileSplit的數(shù)據(jù)分片.另外,CombineFileRecordReader的構(gòu)造函數(shù)中需要指定一個(gè)RecordReader,用于處理分片內(nèi)的單個(gè)文件.
技術(shù)實(shí)現(xiàn):繼承Mapper類,通過(guò)Mapper調(diào)用MapReduce程序,創(chuàng)建庖丁分詞器analyzer實(shí)例,StringReader接收輸入數(shù)據(jù),然后調(diào)用analyzer實(shí)例的tokenStream方法進(jìn)行分詞,Paoding分詞器將會(huì)對(duì)中文文本進(jìn)行細(xì)粒度全切分.MapReduce中文分詞結(jié)果,文本分詞的結(jié)果如圖3、圖4所示.
圖3 未分詞的文本
圖4 分詞后的文本
(1)隨機(jī)抽取20%的數(shù)據(jù)作為測(cè)試集.
(2)提取剩余樣本作為訓(xùn)練集,左連接測(cè)試集.
(3)測(cè)試集和訓(xùn)練集劃分的比例為1∶4.
(1)用trainclassifier命令來(lái)對(duì)訓(xùn)練集進(jìn)行訓(xùn)練.命令:mahout trainclassifier-i digital/train-o digital/model-bayes-type bayes-ng 1 source hdfs.
(2)訓(xùn)練之后得到互補(bǔ)的樸素貝葉斯分類器.能夠在Eclipse直接查看到HDFS上面已經(jīng)生成了貝葉斯模型,也可以在命令行中使用hadoop dfs-ls+路徑指令來(lái)查看模型是否已經(jīng)生成.該模型文件夾下的其他3個(gè)文件夾主要用于存儲(chǔ)貝葉斯分類器模型的參數(shù).
這里的生成的模型是Mahout的樸素貝葉斯分類器模型,它假設(shè)各類的先驗(yàn)概率都相等,同時(shí),為了提高分類器的效率,該模型還對(duì)P(Xi|Ci)的計(jì)算方式進(jìn)行了改進(jìn),另外Mahout還提供了一種新的樸素貝葉斯算法-Complementary Naive Bayes.
本文使用Mahout的測(cè)試集的命令進(jìn)行測(cè)試,命令為:mahout testclassifier-d digital/test-m digital/model-bayes-type bayes-ng 1-source hdfs-method mapreduce,輸出的矩陣叫做混淆矩陣(Confusion Matrix),對(duì)角線的數(shù)字代表分類正確的文章,對(duì)角線上的數(shù)字越大,代表分類器的精度越高,模型的分類結(jié)果如圖5所示.
圖5 模型輸出的結(jié)果
(1)局部評(píng)價(jià)指標(biāo):模型對(duì)某一類的分類性能,只能代表局部性能.
查全率:模型的覆蓋能力,即文章被分類正確的比例.
查準(zhǔn)率:模型正確判斷文章類型的能力,指模型分類的準(zhǔn)確率.
(2)整體評(píng)價(jià)指標(biāo):整體評(píng)價(jià)模型性能的指標(biāo).
宏平均值為所有局部指標(biāo)的平均值.查全率的宏平均值(MacRecall)和查準(zhǔn)率的宏平均值(MacPrecision)分別為:
微平均值為被正確分類的文檔所占的比例:
根據(jù)混淆矩陣和評(píng)價(jià)指標(biāo)進(jìn)行計(jì)算可得表1,可以看出該模型在各種參數(shù)上的表現(xiàn)都比較出色,基本符合一開始的預(yù)期結(jié)果.理論上,該模型在效率、速度上也非常出色,但是由于實(shí)驗(yàn)的樣本數(shù)據(jù)的數(shù)量級(jí)還沒(méi)有達(dá)到一定的級(jí)別,該實(shí)驗(yàn)結(jié)果暫時(shí)不能說(shuō)明該模型在處理更大規(guī)模數(shù)據(jù)的優(yōu)勢(shì).
表1 測(cè)試評(píng)估結(jié)果
(1)任務(wù)描述
搜集一些用戶在某些網(wǎng)站瀏覽過(guò)的頁(yè)面文本,每個(gè)用戶瀏589覽的文本放在一個(gè)文件夾中,代表一個(gè)用戶的訪問(wèn)記錄,根據(jù)這些文本文件計(jì)算用戶的閱讀偏好.
(2)輸出結(jié)果
每個(gè)用戶的閱讀偏好,即按照類別進(jìn)行排序.
本程序的設(shè)計(jì)思想如圖6所示.
圖 6 Mapper、Reducer輸入輸出格式
(1)在Hadoop平臺(tái)上運(yùn)行分類程序的jar包.在命令行輸入命令:hadoop jar-MR/MRClassify.jar user/processed user/output digital/model-cbayes cbayes,可以得到用戶對(duì)不同類型的文章的閱讀偏好,結(jié)果如圖7所示:
圖7 用戶對(duì)不同文章的閱讀次數(shù)
(2)使用Pig腳本對(duì)各個(gè)用戶的閱讀進(jìn)行排序.執(zhí)行之后可以顯示每個(gè)用戶最喜歡讀的文章類型和數(shù)量,Pig腳本的代碼如圖8所示.執(zhí)行Pig腳本之后得到最終的輸出結(jié)果.
Pig腳本代碼解釋:
–group:對(duì)相同user的閱讀記錄進(jìn)行聚合
–sorted:根據(jù)times進(jìn)行降序排序
–top:保存sorted的第一行
圖8 Pig腳本代碼
(3)輸出結(jié)果.排序后的輸出結(jié)果如圖9所示,最左側(cè)代表的是用戶的編號(hào),中間的是用戶閱讀數(shù)量最多的文檔的類別,最右側(cè)的一列代表用戶閱讀最多的一類文章的數(shù)量.
圖9 每個(gè)用戶閱讀偏好的最終排序結(jié)果
通過(guò)對(duì)Lucene全文搜索引擎以及Paoding分詞器的使用和研究,得出如下結(jié)論:Paoding分詞器可以很好地完成本實(shí)驗(yàn)的分詞任務(wù),Paoding分詞器在本實(shí)驗(yàn)中表現(xiàn)出非常好的分詞精度和分詞效率,而且算法非常容易理解、模型復(fù)雜度低、新詞的辨識(shí)能力強(qiáng).
本研究使用了Hadoop下的MapReduce設(shè)計(jì)模型,為了使程序能過(guò)更高效的完成并行計(jì)算的工作,本程序修改了MapReduce程序的輸入方式,使得大量小文件的處理能過(guò)更加高效,節(jié)省了大量的時(shí)間和機(jī)器資源.
在測(cè)試樸素貝葉斯分類模型之后,得出如下結(jié)論:樸素貝葉斯分類器擁有很好的分類精度,在查全率、查準(zhǔn)率、宏平均值等方面的表現(xiàn)說(shuō)明樸素貝葉斯分類模型在文本分類處理任務(wù)上有非??捎^的效率.最后,本研究通過(guò)MapReduce程序進(jìn)行并行計(jì)算,可以計(jì)算出每個(gè)用戶的閱讀各種文章的數(shù)量,然后通過(guò)排序得出用戶對(duì)各種類型的文章的閱讀偏好.
[1]李靜梅,孫麗華,張巧榮,等.一種文本處理中的樸素貝葉斯分類器[J].哈爾濱工程大學(xué)學(xué)報(bào),2003,24(1):72-74.
[2]周顏軍,王雙成,王輝.基于貝葉斯網(wǎng)絡(luò)的分類器研究[J].東北師大學(xué)報(bào)(自然科學(xué)版),2003,35(2):23-25.
[3]王樹良,丁剛毅,鐘鳴.大數(shù)據(jù)下的空間數(shù)據(jù)挖掘思考[J].中國(guó)電子科學(xué)研究院學(xué)報(bào),2013,8(1):8-17.
[4]鄒臘梅,肖基毅,龔向堅(jiān).Web 文本挖掘技術(shù)研究[J].情報(bào)雜志,2007,37(2):53-55.
[5]代六玲,黃河燕,陳肇雄.中文文本分類中特征抽取方法的比較研究[J].中文信息學(xué)報(bào),2004,18(1):28-32.
[6]熊子奇,張暉,林茂松.基于相似度的中文網(wǎng)頁(yè)正文提取算法[J].西南科技大學(xué)學(xué)報(bào),2010,25(1):80-84.
[7]Chickering D M,Meek C,Heckerman D.Large-sample learning of Bayesian networks is hard[J].Journal of Machine Learning Research,2004(5):1287-1330.
[8]Friedman N,Koller D.Being Bayesian about network structure:A Bayesian approach to structure discovery in Bayesian networks[J].Machine Learning,2003,50(1/2):95-126.