Mahout-recommendation
Mahout-推奨事項
この章では、*推奨と呼ばれる一般的な機械学習手法、そのメカニズム、およびMahout推奨を実装するアプリケーションの作成方法について説明します。
勧告
あなたが興味を持っているかもしれない特定の製品にあなたの注意を引き付けるために、Amazonがどのように推薦されたアイテムのリストを思いつくか疑問に思いました!
Amazonから「Mahout in Action」という本を購入するとします。
以下に示すように、選択した製品とともに、Amazonは関連する推奨アイテムのリストも表示します。
このような推奨リストは、*推奨エンジン*の助けを借りて作成されます。 Mahoutは、次のようないくつかのタイプの推奨エンジンを提供します。
- ユーザーベースのレコメンダー、
- アイテムベースのレコメンダー、および
- 他のいくつかのアルゴリズム。
Mahoutレコメンダーエンジン
Mahoutには、非分散型、非Hadoopベースの推奨エンジンがあります。 アイテムのユーザー設定を含むテキストドキュメントを渡す必要があります。 また、このエンジンの出力は、他のアイテムに対する特定のユーザーの推定設定になります。
例
モバイル、ガジェット、アクセサリーなどの消費財を販売するWebサイトを考えてみてください。 そのようなサイトにMahoutの機能を実装する場合は、推奨エンジンを構築できます。 このエンジンは、ユーザーの過去の購入データを分析し、それに基づいて新製品を推奨します。
推奨エンジンを構築するためにMahoutが提供するコンポーネントは次のとおりです。
- データ・モデル
- UserSimilarity
- アイテム類似性
- UserNeighborhood
- 推薦者
データストアからデータモデルが準備され、レコメンダーエンジンへの入力として渡されます。 推奨エンジンは、特定のユーザー向けの推奨を生成します。 以下に推奨エンジンのアーキテクチャを示します。
レコメンダーエンジンのアーキテクチャ
Mahoutを使用してリコメンダーを構築する
簡単なレコメンダーを開発する手順は次のとおりです。
ステップ1:DataModelオブジェクトを作成する
*PearsonCorrelationSimilarity* クラスのコンストラクターには、製品のユーザー、アイテム、および設定の詳細を含むファイルを保持するデータモデルオブジェクトが必要です。 サンプルデータモデルファイルは次のとおりです。
1,00,1.0
1,01,2.0
1,02,5.0
1,03,5.0
1,04,5.0
2,00,1.0
2,01,2.0
2,05,5.0
2,06,4.5
2,02,5.0
3,01,2.5
3,02,5.0
3,03,4.0
3,04,3.0
4,00,5.0
4,01,5.0
4,02,5.0
4,03,0.0
*DataModel* オブジェクトには、入力ファイルのパスを含むファイルオブジェクトが必要です。 以下に示すように、 *DataModel* オブジェクトを作成します。
DataModel datamodel = new FileDataModel(new File("input file"));
ステップ2:UserSimilarityオブジェクトを作成する
以下に示すように、 PearsonCorrelationSimilarity クラスを使用して UserSimilarity オブジェクトを作成します。
UserSimilarity similarity = new PearsonCorrelationSimilarity(datamodel);
ステップ3:UserNeighborhoodオブジェクトを作成する
このオブジェクトは、特定のユーザーのようなユーザーの「近傍」を計算します。 近隣には2つのタイプがあります。
- NearestNUserNeighborhood -このクラスは近傍を計算します 特定のユーザーに最も近い_n_ユーザーで構成されます。 「最近接」は、指定されたUserSimilarityによって定義されます。
- ThresholdUserNeighborhood -このクラスは近傍を計算します 特定のユーザーとの類似性が特定のしきい値以上であるすべてのユーザーで構成されます。 類似性は、指定されたUserSimilarityによって定義されます。
ここでは ThresholdUserNeighborhood を使用し、優先度の制限を3.0に設定しています。
UserNeighborhood neighborhood = new ThresholdUserNeighborhood(3.0, similarity, model);
ステップ4:リコメンダーオブジェクトの作成
*UserbasedRecomender* オブジェクトを作成します。 以下に示すように、上記で作成したすべてのオブジェクトをコンストラクターに渡します。
UserBasedRecommender recommender = new GenericUserBasedRecommender(model, neighborhood, similarity);
ステップ5:アイテムをユーザーに推奨する
*Recommender* インターフェースのRecommended()メソッドを使用して、ユーザーに製品を推奨します。 このメソッドには2つのパラメーターが必要です。 1つ目は、推奨事項を送信する必要があるユーザーのユーザーIDを表し、2つ目は、送信する推奨事項の数を表します。 * recommender()*メソッドの使用法は次のとおりです。
List<RecommendedItem> recommendations = recommender.recommend(2, 3);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
プログラム例
以下は、推奨を設定するためのプログラム例です。 ユーザーID 2のユーザーの推奨事項を準備します。
import java.io.File;
import java.util.List;
import org.apache.mahout.cf.taste.impl.model.file.FileDataModel;
import org.apache.mahout.cf.taste.impl.neighborhood.ThresholdUserNeighborhood;
import org.apache.mahout.cf.taste.impl.recommender.GenericUserBasedRecommender;
import org.apache.mahout.cf.taste.impl.similarity.PearsonCorrelationSimilarity;
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.UserBasedRecommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;
public class Recommender {
public static void main(String args[]){
try{
//Creating data model
DataModel datamodel = new FileDataModel(new File("data"));//data
//Creating UserSimilarity object.
UserSimilarity usersimilarity = new PearsonCorrelationSimilarity(datamodel);
//Creating UserNeighbourHHood object.
UserNeighborhood userneighborhood = new ThresholdUserNeighborhood(3.0, usersimilarity, datamodel);
//Create UserRecomender
UserBasedRecommender recommender = new GenericUserBasedRecommender(datamodel, userneighborhood, usersimilarity);
List<RecommendedItem> recommendations = recommender.recommend(2, 3);
for (RecommendedItem recommendation : recommendations) {
System.out.println(recommendation);
}
}catch(Exception e){}
}
}
次のコマンドを使用してプログラムをコンパイルします。
javac Recommender.java
java Recommender
次の出力が生成されます。
RecommendedItem [item:3, value:4.5]
RecommendedItem [item:4, value:4.0]