1. 程式人生 > >Mahout分類演算法學習之實現Naive Bayes分類示例

Mahout分類演算法學習之實現Naive Bayes分類示例

1.簡介

(1) 貝葉斯分類器的分類原理髮源於古典概率理論,是通過某物件的先驗概率,利用貝葉斯公式計算出其後驗概率,即該物件屬於某一類的概率,選擇具有最大後驗概率的類作為該物件所屬的類。樸素貝葉斯分類器(Naive Bayes Classifier)做了一個簡單的假定:給定目標值時屬性之間相互條件獨立,即給定元組的類標號,假定屬性值有條件地相互獨立,即在屬性間不存在依賴關係。樸素貝葉斯分類模型所需估計的引數很少,對缺失資料不太敏感,演算法也比較簡單。

(2) Mahout 實現了Traditional Naive Bayes 和Complementary Naive Bayes,後者是在前者的基礎上增加了結果分析功能(Result Analyzer).

(3) 主要相關的Mahout類:
org.apache.mahout.classifier.naivebayes.NaiveBayesModel
org.apache.mahout.classifier.naivebayes.StandardNaiveBayesClassifier
org.apache.mahout.classifier.naivebayes.ComplementaryNaiveBayesClassifier

2.資料

使用20 newsgroups data (http://people.csail.mit.edu/jrennie/20Newsgroups/20news-bydate.tar.gz) ,資料集按時間分為訓練資料和測試資料,總大小約為85MB,每個資料檔案為一條資訊,檔案頭部幾行指定訊息的傳送者、長度、型別、使用軟體,以及主題等,然後用空行將其與正文隔開,正文沒有固定的格式。

3.目標

根據新聞文件內容,將其分到不同的文件型別中。

4.程式

使用Mahout自帶示例程式,主要的訓練類和測試類分別為TrainNaiveBayesJob.java和TestNaiveBayesDriver.java,JAR包為mahout-core-0.7-job.jar,詳細程式碼見(mahout-distribution-0.7/core/src/main/java/org/apache/mahout/classifier/naivebayes/trainning,mahout-distribution-0.7/core/src/main/java/org/apache/mahout/classifier/naivebayes/test).


5.步驟
(1) 資料準備

①將20news-bydate.tar.gz解壓,並將20news-bydate中的所有子文夾中的內容複製到20news-all中,該步驟已經完成,20news-all資料夾存放在hdfs:/share/data/ Mahout_examples_Data_Set中
②將20news-all放在hdfs的使用者根目錄下
[email protected]:~/workspace$hadoop dfs -cp /share/data/Mahout_examples_Data_Set/20news-all .
③從20newsgroups data建立序列檔案(sequence files)
[email protected]
:~/workspace$mahout seqdirectory -i 20news-all -o 20news-seq
④將序列檔案轉化為向量
[email protected]:~/workspace$mahout seq2sparse -i ./20news-seq -o ./20news-vectors  -lnorm -nv  -wt tfidf  
⑤將向量資料集分為訓練資料和檢測資料,以隨機40-60拆分
[email protected]:~/workspace$mahout split -i ./20news-vectors/tfidf-vectors --trainingOutput ./20news-train-vectors --testOutput ./20news-test-vectors --randomSelectionPct 40 --overwrite --sequenceFiles -xm sequential


(2)訓練樸素貝葉斯模型

[email protected]:~/workspace$mahout trainnb -i  ./20news-train-vectors -el -o ./model -li ./labelindex -ow -c  

(3)檢驗樸素貝葉斯模型
[email protected]:~/workspace$mahout testnb -i ./20news-train-vectors -m ./model -l ./labelindex -ow -o 20news-testing -c
結果如下:

(4)檢測模型分類效果
[email protected]:~/workspace$mahout testnb -i ./20news-test-vectors -m ./model -l ./labelindex -ow -o ./20news-testing -c
結果如下:

(5)檢視結果,將序列檔案轉化為文字
[email protected]:~/workspace$mahout seqdumper -i ./20news-testing/part-m-00000 -o ./20news_testing.res
[email protected]:~/workspace$cat 20news_testging.res

結果如下: