2010/01/19からのアクセス回数 21632
Tasteは、mahoutに含まれるレコメンドシステム用パッケージです。
mahout ver. 0.20のTasteは、まだMapReduce(hadoop)に対応して いないので、hadoupをインストールしなくても使用することができます。
mahoutでの開発には、JDK 1.6が必要です。
ネット検索するとOS XでJDK 1.6を使うには、アプリケーションのユーティリティフォルダにある Java Preferencesで切り替えるとありますが、これを実施してもターミナルでjavac -versionが1.6に 切り替わりません。
そこで、以下の設定を.profileに追加します。
JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home export PATH=$JAVA_HOME/bin:$PATH
新しいターミナルを起動して、設定が正しくできたか確認します。
$ javac -version javac 1.6.0_15
mavenを使ってレコメンド・アプリケーションを作成します。
最初に、プロジェクトを作成します。
$ mvn archetype:create -DgroupId=sample.recommendApp -DartifactId=recommendApp -Dversion=0.0.1
pom.xmlのdependecyに以下の項目を追加します。
</dependency> <dependency> <groupId>org.apache.mahout</groupId> <artifactId>mahout-core</artifactId> <version>0.2</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jcl</artifactId> <version>1.5.8</version> <scope>test</scope> </dependency>
また、JDKを1.6にするために以下のbuildを追加します。
<build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
これで、pom.xml の設定は完了です。
Eclipseを使って編集ができるように、以下のコマンドでEclipseのプロジェクトにします。
mvn eclipse:eclipse -DdownloadSources=true
これで、必要なライブラリがすべてセットされ、ソースの参照も可能なEclipseプロジェクト のできあがりです。
Eclipseで作成したrecommendAppをインポートしてください。
集合知の2章のデータを使って、ユークリッド距離によるレコメンドアプリケーション を作成してみましょう。
プログラムのメインは、以下のようになります。
// モデル構築用のデータをファイルから読み込む DataModel model = new FileDataModel(new File("data/critics.csv")); // ユーザ類似性と類似ユーザ抽出のメソッドを決定 UserSimilarity similarity = new EuclideanDistanceSimilarity(model); UserNeighborhood neighborhood = new NearestNUserNeighborhood(2, similarity, model); // ユーザベースの推薦を作成 Recommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity); // Toby(ユーザID=7)への推薦項目を3個検索 List<RecommendedItem> recommendations = recommender.recommend(7, 3); // 推薦結果を出力 for (RecommendedItem recommendation : recommendations) { System.out.println(recommendation); }
以下のテストデータとjavaのプログラムがあります。
プログラムを実行すると以下のように出力されます。
10/01/19 19:24:39 INFO file.FileDataModel: Creating FileDataModel for file data/critics.csv 10/01/19 19:24:39 INFO file.FileDataModel: Reading file info... 10/01/19 19:24:39 INFO file.FileDataModel: Read lines: 35 10/01/19 19:24:39 INFO model.GenericDataModel: Processed 7 users RecommendedItem[item:6, value:3.741911] RecommendedItem[item:1, value:3.0] RecommendedItem[item:3, value:2.4946072]
推薦の結果は、最後の2行です。ItemIdを映画の名前にすると
となり、Tobyがまだ見ていない映画のなかから、Tobyと似た嗜好をもつユーザの 好きな映画がリストアップされます。
この結果は、「集合知」2.4の結果とスコアは異なりますが順序は一致します。
# 集合知の出力 >>>recommendations.getRecommendations(recommendations.critics,'Toby', ... similarity=recommendations.sim_distance) [(3.5002478401415877, 'The Night Listener'), (2.7561242939959363, 'Lady in the Water'), (2.4619884860743739, 'Just My Luck')]
皆様のご意見、ご希望をお待ちしております。