1 運行環境說明node
1.1 硬軟件環境算法
1.2 機器網絡環境shell
2 書面做業0:搭建Mahout環境apache
2.1 Mahout介紹網絡
2.2 部署過程機器學習
2.2.1 下載Mahoutjsp
2.2.2 上傳Mahoutide
2.2.3 解壓縮工具
2.2.4 設置環境變量oop
2.2.5 驗證安裝完成
2.3 測試例子
2.3.1 下載測試數據,放到$MAHOUT_HOME/testdata目錄
2.3.2 啓動Hadoop
2.3.3 使用kmeans算法
2.3.4 查看結果
3 書面做業1:運行20newsgroup
3.1 書面做業1內容
3.2 算法流程
3.3 實現過程(mahout 0.6版本)
3.3.1 下載數據
3.3.2 上傳並解壓數據
3.3.3 創建訓練集
3.3.4 創建測試集
3.3.5 上傳數據到HDFS
3.3.6 訓練貝葉斯分類器
3.3.7 觀察訓練做業運行過程
3.3.8 查看生成模型
3.3.9 測試貝葉斯分類器
3.3.10觀察訓練做業運行過程
3.3.11查看結果
3.4 實現過程(mahout 0.7+版本)
4 問題解決
4.1 使用mahout0.7+版本對20Newsgroup數據創建訓練集時出錯
l 主機操做系統:Windows 64 bit,雙核4線程,主頻2.2G,6G內存
l 虛擬軟件:VMware® Workstation 9.0.0 build-812388
l 虛擬機操做系統:CentOS 64位,單核,1G內存
l JDK:1.7.0_55 64 bit
l Hadoop:1.1.2
集羣包含三個節點:1個namenode、2個datanode,其中節點之間能夠相互ping通。節點IP地址和主機名分佈以下:
序號 |
機器名 |
類型 |
用戶名 |
運行進程 |
|
1 |
10.88.147.221 |
hadoop1 |
名稱節點 |
hadoop |
NN、SNN、JobTracer |
2 |
10.88.147.222 |
hadoop2 |
數據節點 |
hadoop |
DN、TaskTracer |
3 |
10.88.147.223 |
hadoop3 |
數據節點 |
hadoop |
DN、TaskTracer |
全部節點均是CentOS6.5 64bit系統,防火牆均禁用,全部節點上均建立了一個hadoop用戶,用戶主目錄是/usr/hadoop。全部節點上均建立了一個目錄/usr/local/hadoop,而且擁有者是hadoop用戶。
Mahout 是 Apache Software Foundation(ASF) 旗下的一個開源項目,提供一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地建立智能應用程序。AMahout包含許多實現,包括聚類、分類、推薦過濾、頻繁子項挖掘。此外,經過使用 Apache Hadoop 庫,Mahout 能夠有效地擴展到雲中。
在Apache下載最新的Mahout軟件包,點擊下載會推薦最快的鏡像站點,如下爲下載地址:http://archive.apache.org/dist/mahout/0.6/
把下載的mahout-distribution-0.6.tar.gz安裝包,使用SSH Secure File Transfer工具(第1、2做業周2.1.3.1介紹)上傳到/home/hadoop/Downloads 目錄下
在Downloads目中將mahout解壓縮
cd /home/hadoop/Downloads/
tar -xzf mahout-distribution-0.6.tar.gz
把mahout-distribution-0.6目錄移到/usr/local目錄下
sudo mv mahout-distribution-0.6 /usr/local/mahout-0.6
cd /usr/local
ls
使用以下命令編輯/etc/profile文件:
sudo vi /etc/profile
聲明mahout的home路徑和在path加入bin的路徑:
export MAHOUT_HOME=/usr/local/mahout-0.6
export MAHOUT_CONF_DIR=/usr/local/mahout-0.6/conf
export PATH=$PATH:$MAHOUT_HOME/bin
編譯配置文件/etc/profile,並確認生效
source /etc/profile
從新登陸終端,確保hadoop集羣啓動,鍵入mahout --help命令,檢查Mahout是否安裝無缺,看是否列出了一些算法:
mahout --help
下載一個文件synthetic_control.data,下載地址http://archive.ics.uci.edu/ml/databases/synthetic_control/synthetic_control.data,並把這個文件放在$MAHOUT_HOME目錄下
cd /home/hadoop/Downloads/
mv synthetic_control.data /usr/local/mahout-0.6/
mkdir testdata
cp synthetic_control.data testdata/
ls
./start-all.sh
使用以下命令進行kmeans算法測試:
mahout org.apache.mahout.clustering.syntheticcontrol.kmeans.Job
結果會在根目錄創建output新文件夾,若是下圖結果表示mahout安裝正確且運行正常:
cd output
ls
安裝Mahout,並運行20newsgroup的測試樣例,抓圖說明實驗過程
樸素貝葉斯分類是一種十分簡單的分類算法,樸素貝葉斯的思想基礎是這樣的:對於給出的待分類項,求解在此項出現的條件下各個類別出現的機率哪一個最大,就認爲此待分類項屬於哪一個類別。
這二十個新聞組數據集合是收集大約20,000新聞組文檔,均勻的分佈在20個不一樣的集合。這20個新聞組集合採集最近流行的數據集合到文本程序中做爲實驗,根據機器學習技術。例如文本分類,文本彙集。咱們將使用Mahout的Bayes Classifier創造一個模型,它將一個新文檔分類到這20個新聞組集合範例演示
下載20Newsgroups數據集,地址爲 http://qwone.com/~jason/20Newsgroups/ ,下載20news-bydate.tar.gz數據包
把下載的20news-bydate.tar.gz數據包,使用SSH Secure File Transfer工具(第1、2做業周2.1.3.1介紹)上傳到/home/hadoop/Downloads 目錄下:
解壓20news-bydate.tar.gz數據包,解壓後能夠看到兩個文件夾,分別爲訓練原始數據和測試原始數據:
cd /home/hadoop/Downloads/
tar -xzf 20news-bydate.tar.gz
在mahout根目錄下建data文件夾,而後把20news訓練原始數據和測試原始數據遷移到該文件夾下:
mkdir /usr/local/mahout-0.6/data
mv 20news-bydate-t* /usr/local/mahout-0.6/data
ls /usr/local/mahout-0.6/data
經過以下命令創建訓練集,訓練的數據在20news-bydate-train目錄中,輸出的訓練集目錄爲 bayes-train-input:
mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \
-p /usr/local/mahout-0.6/data/20news-bydate-train \
-o /usr/local/mahout-0.6/data/bayes-train-input \
-a org.apache.mahout.vectorizer.DefaultAnalyzer \
-c UTF-8
經過以下命令創建訓練集,訓練的數據在20news-bydate-test目錄中,輸出的訓練集目錄爲 bayes-test-input:
mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \
-p /usr/local/mahout-0.6/data/20news-bydate-test \
-o /usr/local/mahout-0.6/data/bayes-test-input \
-a org.apache.mahout.vectorizer.DefaultAnalyzer \
-c UTF-8
在HDFS中新建./20news文件夾,把生成的訓練集和測試集上傳到HDFS的./20news目錄中:
hadoop fs -mkdir ./20news
hadoop fs -put /usr/local/mahout-0.6/data/bayes-train-input ./20news
hadoop fs -put /usr/local/mahout-0.6/data/bayes-test-input ./20news
hadoop fs -ls ./20news
hadoop fs -ls ./ 20news/bayes-test-input
使用trainclassifier類訓練在HDFS中./20news/bayes-train-input的數據,生成的模型放到./ 20news/newsmodel 目錄中:
mahout trainclassifier \
-i /user/hadoop/20news/bayes-train-input \
-o /user/hadoop/20news/newsmodel \
-type cbayes
-ng2 \
-source hdfs
在訓練過程當中在JobTracker頁面觀察運行狀況,連接地址爲http://hadoop1:50030/jobtracker.jsp,訓練任務四個做業,大概運行了15分鐘左右:
點擊查看具體做業信息
map運行狀況
做業運行狀況
經過以下命令查看模型內容:
hadoop fs -ls ./20news
hadoop fs -ls ./20news/newsmodel
hadoop fs -ls ./20news/newsmodel/trainer-tfIdf
使用testclassifier類訓練在HDFS中./20news/bayestest-input的數據,使用的模型路徑爲./ 20news/newsmodel:
mahout testclassifier \
-m /user/hadoop/20news/newsmodel \
-d /user/hadoop/20news/bayes-test-input \
-type cbayes
-ng2 \
-source hdfs\
-method mapreduce
在執行過程當中在JobTracker頁面觀察運行狀況,連接地址爲http://hadoop1:50030/jobtracker.jsp,訓練任務1個做業,大概運行了5分鐘左右:
做業的基本信息
map運行狀況
reduce運行狀況
這個混合矩陣的意思說明:上述a到u分別是表明了有20類別,這就是咱們以前給的20個輸入文件,列中的數聽說明每一個類別中被分配到的字節個數,classified說明應該被分配到的總數
381 0 0 0 0 9 1 0 0 0 1 0 0 2 0 1 0 0 3 0 0 | 398 a = rec.motorcycles
意思爲rec.motorcycles 原本是屬於 a,有381篇文檔被劃爲了a類,這個是正確的數據,其它的分別表示劃到 b~u類中的數目。咱們能夠看到其正確率爲 381/398=0.9573 ,可見其正確率仍是很高的了。
在0.7版本的安裝目錄下$MAHOUT_HOME/examples/bin下有個腳本文件classifu-20newsgroups.sh,這個腳本中執行過程是和前面分佈執行結果是一致的,只不過將各個API用shell腳本封裝到一塊兒了。從0.7版本開始,Mahout移除了命令行調用的API:prepare20newsgroups、trainclassifier和testclassifier,只能經過shell腳本執行。
執行 $MAHOUT_HOME/examples/bin/classify-20newsgroups.sh 四個選項中選擇第一個選項,
使用以下命令對20Newsgroupt數據創建訓練集時:
mahout org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups \
-p /usr/local/mahout-0.9/data/20news-bydate-train \
-o /usr/local/mahout-0.9/data/bayes-train-input \
-a org.apache.mahout.vectorizer.DefaultAnalyzer\
-c UTF-8
出現以下錯誤,緣由在於從0.7版本開始,Mahout移除了命令行調用的prepare20newsgroups、trainclassifier和testclassifier API,只能經過shell腳本執行$MAHOUT_HOME/examples/bin/classify-20newsgroups.sh進行
14/12/7 21:31:35 WARN driver.MahoutDriver: Unable to add class: org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups
14/12/7 21:31:35 WARN driver.MahoutDriver: No org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups.props found on classpath, will use command-line arguments only
Unknown program 'org.apache.mahout.classifier.bayes.PrepareTwentyNewsgroups' chosen.
Valid program names are:
arff.vector: : Generate Vectors from an ARFF file or directory
baumwelch: : Baum-Welch algorithm for unsupervised HMM training
.......
調用shell腳本執行參見3.4