Mahout 0.8からTestForestによる分析結果の出力がよりくわしく出力されるように
前回は理論編として、
解説の前に、
ただし、
今回は、
サンプルデータをダウンロードする
今回利用するサンプルデータは、
- 1行が1顧客のデータ
- 各行はカンマ区切りで各商品の購入有無を記載
(Y:ある、 N:ない)
顧客Aの商品1の購入有無, 顧客Aの商品2の購入有無, … 顧客Aの商品1000の購入有無 顧客Bの商品1の購入有無, 顧客Bの商品2の購入有無, … 顧客Bの商品1000の購入有無 顧客Cの商品1の購入有無, 顧客Cの商品2の購入有無, … 顧客Cの商品1000の購入有無 (省略)
今回は1000個の商品数を対象とするので、
また、
descriptorファイルを作成する
今回利用するDecisionForestは、
descriptorファイルを作成するには、 Describeクラスは、 Describeクラスのパラメータには、 --descriptor (-d)オプションでは、 たとえば、 同じ種類が連続する場合は、 今回のサンプルデータでは、 descriptorファイルが無事に作成できた後は、 モデルの作成は、 BuildForestクラスのおもなパラメータには、 --selection (-sl)の値は、 無事モデルが生成されたら、 本来、 モデルの評価は、 TestForestのおもなパラメータには、 --analyze (-a) オプションを指定した場合、 各欄の出力は、 上記の出力の場合、 作成したモデルは、 ForestVisualizerのおもなパラメータには、
次は分類です。分類も、 分類結果は、 出力は、 今回の分類先クラスのラベルはYとNでしたが、 Mahoutのバージョンが0. 学習データの各列に対応して、 今回利用した学習データは、 そのため、 プログラム内部からMahoutのDecisionForestを利用する場合、 逆に、 ラベルの一覧は、 このように、 次回は、hadoop fs -put gihyo-mahout-df-sample-learning.csv .
hadoop jar $MAHOUT_HOME/mahout-core-0.7-job.jar org.apache.mahout.classifier.df.tools.Describe -p gihyo-mahout-df-sample-learning.csv -f gihyo-mahout-df-sample.info -d 999 C L
-d N N C I L
-d 2 N C I L
-d 999 C L
モデルを作成する
hadoop jar $MAHOUT_HOME/mahout-examples-0.7-job.jar org.apache.mahout.classifier.df.mapreduce.BuildForest -d gihyo-mahout-df-sample-learning.csv -ds gihyo-mahout-df-sample.info -sl 32 -t 25 -o gihyo-mahout-df-sample.model
モデルの精度を評価する
hadoop jar $MAHOUT_HOME/mahout-examples-0.7-job.jar org.apache.mahout.classifier.df.mapreduce.TestForest -i gihyo-mahout-df-sample-learning.csv -ds gihyo-mahout-df-sample.info -m gihyo-mahout-df-sample.model -a -mr -o gihyo-mahout-df-sample-test
=======================================================
Summary
-------------------------------------------------------
Correctly Classified Instances : 989 98.9%
Incorrectly Classified Instances : 11 1.1%
Total Classified Instances : 1000
=======================================================
Confusion Matrix
-------------------------------------------------------
a b <--Classified as
796 4 | 800 a = N
7 193 | 200 b = Y
モデルを視覚化する
hadoop jar $MAHOUT_HOME/mahout-core-0.7-job.jar org.apache.mahout.classifier.df.tools.ForestVisualizer --dataset gihyo-mahout-df-sample.info --model gihyo-mahout-df-sample.model
Tree[1]:
120 = N
| 47 = N
| | 783 = N
| | | 893 = N
| | | | 215 = N
| | | | | 987 = N
| | | | | | 274 = N
| | | | | | | 270 = N
(省略)
モデルを用いて分類する
hadoop fs -put gihyo-mahout-df-sample-classified.csv .
hadoop jar $MAHOUT_HOME/mahout-examples-0.7-job.jar org.apache.mahout.classifier.df.mapreduce.TestForest -i gihyo-mahout-df-sample-classified.csv -ds gihyo-mahout-df-sample.info -m gihyo-mahout-df-sample.model -mr -o gihyo-mahout-df-sample-classified
hadoop fs -cat gihyo-mahout-df-sample-classified/gihyo-mahout-df-sample-classified.csv.out
1.0
0.0
1.0
0.0
0.0
(省略)
descriptorファイルの中身を確認する
hadoop fs -cat gihyo-mahout-df-sample.info
[{"values":["N","Y"],"label":false,"type":"categorical"}, … {"values":["N","Y"],"label":true,"type":"categorical"}]
プログラム内部からDecisionForestを利用するには
org.apache.mahout.classifier.df.data.Dataset.getLabelString(double code)
org.apache.mahout.classifier.df.data.Dataset.labelCode(String label)
org.apache.mahout.classifier.df.data.Dataset.labels()