適当に・・・

何の目的も無くブログを立ち上げてみました。更新は不定期ですね。

Mahout インストール

2010年04月21日 16時00分18秒 | Weblog
Mahout インストール

Mahout とは 機械学習に関するライブラリのセット・・・

難しい事が色々書いてあるが割愛

レコメンドができると言う事で導入する感じ。

前、HadoopをインストールしたのはこのMahoutが
使いたいがための設定。

Hadoop自体も結構面白そうだけど。
(Hadoop プログラムは後で学習)

必要なもの
apache-maven-2.2.1-bin.tar.gz
jdk-6u20-linux-i586-rpm.bin
mahout-0.3-src.tar.gz

jdkのインストールは割愛

Maven
(Java用プロジェクト管理ツール Mahoutをビルドするために必要)
http://maven.apache.org/download.html ここから最新版をダウンロード

apache-maven-2.2.1-bin.tar.gz

mkdir -p /home/maven

mv apache-maven-2.2.1-bin.tar.gz

tar xvzf apache-maven-2.2.1-bin.tar.gz

vi ~/.bashrc

MAVEN_HOME=/home/maven/apache-maven-2.2.1/
JAVA_HOME=/usr/java/jdk1.6.0_20/

export PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH

を追加して保存

次 Mahoutのダウンロード
http://ftp.kddilabs.jp/infosystems/apache/lucene/mahout/0.3/mahout-0.3-src.tar.gz

tar xvzf mahout-0.3-src.tar.gz

cd mahout-0.3

mvn install

Warning: JAVA_HOME environment variable is not set.
[INFO] Scanning for projects...
[INFO] Reactor build order:
[INFO] Mahout Common Maven Parent
[INFO] Maven Mojo to generate code for collections
[INFO] Mahout Collections
[INFO] Mahout Math
[INFO] Mahout Core
[INFO] Mahout Taste Webapp
[INFO] Mahout Utilities
[INFO] Mahout Examples
[INFO] Apache Lucene Mahout ・・・

とずらずらとビルドログが出てる・・・・
なんとなく1行目のWarningが気になる。。。

ビルド中にテストしてるらしくちょっと時間がかかる。

[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] ------------------------------------------------------------------------
[INFO] Mahout Common Maven Parent ............................ SUCCESS [2:10.181s]
[INFO] Maven Mojo to generate code for collections ........... SUCCESS [3:00.867s]
[INFO] Mahout Collections .................................... SUCCESS [35.321s]
[INFO] Mahout Math ........................................... SUCCESS [40.775s]
[INFO] Mahout Core ........................................... SUCCESS [12:22.625s]
[INFO] Mahout Taste Webapp ................................... SUCCESS [45.399s]
[INFO] Mahout Utilities ...................................... SUCCESS [17.021s]
[INFO] Mahout Examples ....................................... SUCCESS [52.285s]
[INFO] Apache Lucene Mahout .................................. SUCCESS [5.169s]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20 minutes 50 seconds
[INFO] Finished at: Wed Apr 21 16:45:53 JST 2010
[INFO] Final Memory: 68M/162M
[INFO] ------------------------------------------------------------------------

と出てビルド終了。

でー動かす。

https://cwiki.apache.org/MAHOUT/syntheticcontroldata.html

データを

http://kdd.ics.uci.edu/databases/synthetic_control/synthetic_control.data

ここからダウンロードして
(数値の羅列・・・・)

hadoop fs -put synthetic_control.data testdata
(なぜtestdataと言う名前かと言うとquickstartに
All example jobs use testdata as input and output to directory output
と書かれていたからw

意味は上の簡単な英文ですら意味をわかっていないw)

kmeans
canopy
dirichlet
meanshift

分類方法があるみたい。

kmeans法は

hadoop jar mahout-examples-0.3.job org.apache.mahout.clustering.syntheticcontrol.kmeans.Job

とすると分類が始まる。

ログがずらずら出て処理が終わる

kmeans法なのでoutput/pointsの下に出力があるはず。

hadoop fs -get output output でログを持ってくる。

次はレコメンドを動かしたいけど~
Tasteってもしかして自分で実装する感じなのか?w

mahout/レコメンドサーブレットの作り方というページを
そのまま作業してみる。

http://www.pwv.co.jp/~take/TakeWiki/index.php?mahout%2F%E3%83%AC%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%89%E3%82%B5%E3%83%BC%E3%83%96%E3%83%AC%E3%83%83%E3%83%88%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9

なんの事だかさっぱりわからないが以下コマンドを打つ。

mvn archetype:create -DgroupId=sample.recommendWeb -Dartifac
tId=recommendWeb -DarchetypeArtifactId=maven-archetype-webapp -D=Version=0.0.1

必要なものを作ってくれてる感じ?

tree recommendWeb

recommendWeb/
|-- pom.xml
`-- src
  `-- main
    |-- resources
    `-- webapp
      |-- WEB-INF
      | `-- web.xml
      `-- index.jsp

5 directories, 3 files

ここまではOKだな。

pom.xmlに追加する。 pom.xmlは以下のようになった。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<modelVersion>4.0.0</modelVersion>
<groupId>sample.recommendWeb</groupId>
<artifactId>recommendWeb</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>recommendWeb Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>


<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>0.3</version>
</dependency>

<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jcl</artifactId>
<version>1.5.8</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>


</dependencies>
<build>
<finalName>recommendWeb</finalName>


<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.7</version>
</plugin>
</plugins>


</build>
</project>

recommendWebのディレクトリで

mkdir -p mkdir src/main/java

今回はeclipse使わないのだけれど、書いてあるのでやります。
mvn eclipse:eclipse -DdownloadSources=true

参考のwikiに従うと次はjavaファイルの追加
でもどこに追加するのだろう?w
mvnがわかってないので不明だな。

mvn compileとすると
デフォルトではsrc/main/javaの下の.javaをコンパイルするらしい。

ということでsrc/main/javaに配置だな。

mvn compileエラー続出w

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.NearestNUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.EuclideanDistanceSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.RecommendedItem;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

先頭にインポート文を追加したら
ビルドが通ったw

mvn jetty:run ・・・ エラー 

でもjettyのエラーで悩んでてもしょうがない。

tomcatに変更w
(頭古いから知っているものでしか動かせないのよねぇ)

$TOMCAT_HOME/webapps/で

mkdir -p recommendWeb/WEB-INF/classes
mkdir -p recommendWeb/WEB-INF/lib



$TOMCAT_HOME/webapps/recommendWeb/で

vi web.xml



<web-app xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">

<display-name>Recommend Web</display-name>

<servlet>
<servlet-name>web-recommender</servlet-name>
<servlet-class>RecommenderServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>web-recommender</servlet-name>
<url-pattern>/RecommenderServlet</url-pattern>
</servlet-mapping>

</web-app>

として保存

recommendWeb/WEB-INF/libの中には必要なjarを放り込む

mahout-0.3/examples/target/dependency/の配下のjar

わからないので上記を全部放り込んだ

recommendWeb/WEB-INF/classesには
mvn compileして出来上がったRecommenderServlet.class
を入れますの。

WEB-INFディレクトリ直下に
critics.csvに入れるのだけど、これは

http://www.grouplens.org/node/73の

100k Ratings Data Set (.tar.gz)ってリンクから拾って解凍して

解凍するとずらずら出てくるから

awk '{printf("%s,%s,%sn",$1,$2,$3);}' ua.base > critics.csv

として作る。

ちなみに

http://lucene.apache.org/mahout/taste.html#examplesをみると
データの並びは

First, create a DataModel of some kind. Here, we'll use a simple on based on data in a file. The file should be in CSV format, with lines of the form userID,itemID,prefValue (e.g. "39505,290002,3.5"):

とかいてあるので
ユーザID,アイテムID,評価値(なのか?)の
並びとしてるんだろうな、多分、読めないけど。

tomcatを起動して

http://hadoop:8080/recommendWeb/RecommenderServlet?userID=7

5.0 345
5.0 313
5.0 328

と表示されてOKだな。

u.itemの中を見ると

345=Deconstructing Harry
313=Titanic
328=Conspiracy Theory

って言う感じのお勧めなんだろうな。

http://hadoop:8080/recommendWeb/RecommenderServlet?userID=7&howMany=10
とhowManyパラメータもつけられるらしい。

5.0 328
5.0 313
5.0 302
5.0 345
4.0 295
4.0 751
4.0 315
4.0 321
4.0 340
4.0 319

サンプルなのでアレだが
問題が二つ

・起動時にデータを読み込む事
・データに評価値がついてる
(大抵の場合評価値はあまりついていないのではないかと・・・)

しかしgooブログ 10000文字の制限もう少し多くならないかい?
かなり編集苦労するんだけど。
作業を全部書きたいんだよね。わからなくなったことがわからなくなるから。

関係ないけど easyrec(http://easyrec.org/)
っていうレコメンドシステムを知った。

ボスに言われてからかなり長い時間がかかったケド
Mahout動かせて良かった。

レコメンドの種類
http://lucene.apache.org/mahout/javadoc/core/org/apache/mahout/cf/taste/impl/similarity/package-summary.html

最新の画像もっと見る

1 コメント

コメント日が  古い順  |   新しい順
Unknown (師子乃)
2019-01-09 12:45:38
こんにちは。

勉強させていただきます!
返信する

コメントを投稿