Apache Mahoutをローカル環境で実行する。

統計学的な話と平行して、機械学習についても進めて行きたかったのであるが、Hadoop MapReduceを使っての相関行列計算にかなりの時間を割いてしまった。

今回のログでは、Apache Mahoutをローカル環境で実行してみる。
Apache Mahoutのバージョンは0.7。ローカル環境は、Mac Book Pro (Mountain Lion)である。

注記(2013/8/14);2013/7/25にMahout0.8がリリースされていたので、そちらへ変更。以下、「Mahout0.7」は「Mahout0.8」と読み替えてください。

Apache Mahoutは、ちょっと変わったプロジェクトだ。

機械学習のツールを提供している」というよりも、「機械学習で使うための部品(アルゴリズム)を提供している」といった方が正確で、何をどうしたらいいのか分かりづらい。また、Hadoopと一緒に登場することが多いが、提供されているアルゴリズムが「全てHadoop MapReduceで動く」わけではない。
協調フィルタリングは、Tasteという別プロジェクトを吸収したものなので、ちょっと経路が違うように感じる。このあたりは、「Mahout in Action」に詳しいので、参照されたい。

Mahoutイン・アクション

Mahoutイン・アクション

また、以前にも述べたが、Mahoutの対象としている機械学習のエリアは、ベクトル空間で考えると、次数が大きい反面、空間内のプロットが疎らに散らばっている。(観測値行列が疎になる)
疎らに散らばっているということは、大きな次元を使い切っていないととらえられるので、次元縮約などの方法論とアルゴリズムが重要視される。
統計学的にも、同じように「次元が落ちる」ことは普通におこるが、体系的な理論の中では、(機械学習ほど)当たり前とは扱われないと思う。

さて、以下では、Mahoutを本家プロジェクトからダウンロードし、サンプルプログラムを動かしてみる。


まず、Mahout0.7を本家サイトからダウンロードして、ホームディレクトリ/Users/tetsuyaに解凍した。


サンプルにあるclassify-20newsgroups.sh(ニュースの購読データの分類)を実行してみたいが、バグがあって動かない。
こちらのサイトを参考にさせてもらって、$MAHOUT_HOME/bin/mahoutを修正する。

注記(2013/8/14);Mahout0.8では、classify-20newsgroups.shが動かないバグが修正されているようなので、以下の修正はしなくとも、Naive Bayes, Complement Naive Bayes分類が動きます。

diff mahout mahout.org 
224c224
<     CLASSPATH="${CLASSPATH}:${MAHOUT_HOME}/lib/hadoop/*"
---
>     CLASSPATH="${CLASSPATH}:${MAHOUT_HOME/lib/hadoop/*}"


次に環境変数を設定する。(example実行時に、$HADOOP_HOME is deprecatedとでるので、これはいらないかもしれない)

export JAVA_HOME=[your_java_home]
export HADOOP_HOME=[your_hadoop_home]
export HADOOP_CONF_DIR=[your_hadoop_home]/conf
export MAHOUT_HOME=[your_mahout_home]
export CLASS_PATH=$HADOOP_HOME:$HADOOP_CONF_DIR:$MAHOUT_HOME/conf
export PATH=$MAHOUT_HOME/bin:$PATH

$MAHOUT_HOME/examples/binに移動し、MAHOUT_LOCAL=TRUEを指定してサンプルを実行する。

MAHOUT_LOCAL=TRUE ./classify-20newsgroups.sh

実行すると、いくつかの分類手法を聞かれるので、単純ベイズ分類(2番のNaive Bayes Classification)を選択して実行すると学習が始まって、結果として、混同行列(Confusion Matrix:正解に対して、どのように分類されたかを示す表)が出力される。

Confusion Matrix
-------------------------------------------------------
a    	b    	c    	d    	e    	f    	g    	h    	i    	j    	k    	l    	m    	n    	o    	p    	q    	r    	s    	t    	<--Classified as
284  	0    	0    	0    	2    	0    	0    	0    	1    	0    	0    	1    	0    	0    	0    	2    	1    	2    	11   	0    	 |  304   	a     = alt.atheism
0    	337  	3    	18   	5    	15   	6    	0    	0    	0    	0    	4    	8    	1    	1    	0    	0    	0    	1    	0    	 |  399   	b     = comp.graphics
1    	33   	235  	69   	14   	32   	10   	2    	1    	1    	0    	1    	2    	3    	0    	0    	0    	0    	0    	1    	 |  405   	c     = comp.os.ms-windows.misc
0    	6    	7    	358  	19   	4    	10   	2    	0    	0    	0    	0    	7    	0    	0    	0    	0    	0    	0    	0    	 |  413   	d     = comp.sys.ibm.pc.hardware
1    	4    	0    	12   	359  	2    	5    	2    	0    	0    	1    	1    	7    	1    	0    	0    	0    	0    	0    	0    	 |  395   	e     = comp.sys.mac.hardware