0

基本的な映画レコメンデーション システムを構築したい。検索したところ、apache mahout が見つかりました。いくつかの方法を使用しましたが、それらの結果をどのように使用できるかわかりません。

import java.io.File;
import java.io.IOException;
import org.apache.mahout.cf.taste.common.TasteException;
import org.apache.mahout.cf.taste.eval.RecommenderBuilder;
import org.apache.mahout.cf.taste.eval.RecommenderEvaluator;
import org.apache.mahout.cf.taste.impl.eval.RMSRecommenderEvaluator;
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.PearsonCorrelationSimilarity;
import org.apache.mahout.cf.taste.impl.similarity.TanimotoCoefficientSimilarity;
import org.apache.mahout.cf.taste.model.DataModel;
import org.apache.mahout.cf.taste.neighborhood.UserNeighborhood;
import org.apache.mahout.cf.taste.recommender.Recommender;
import org.apache.mahout.cf.taste.similarity.UserSimilarity;

public class error {

  public  static double evaluate(DataModel model){
    RecommenderEvaluator evaluator = new RMSRecommenderEvaluator();
    RecommenderBuilder builder = new RecommenderBuilder() {

        @Override
        public Recommender buildRecommender(DataModel model) throws TasteException {
            UserSimilarity similarity = new TanimotoCoefficientSimilarity(model);
            UserNeighborhood neighborhood = new NearestNUserNeighborhood(50, similarity,        model);
            return new GenericUserBasedRecommender(model, neighborhood, similarity);
        }
    };

    double score = 0;
    try {

        score = evaluator.evaluate(builder, null, model, 0.7, 1.0);
    } catch (TasteException e) {
    }
    System.out.println(score);
    return score;
}
public static void main(String[] args) throws IOException, TasteException {
     DataModel model = new FileDataModel(new File("u1.base"));
    evaluate(model);
}

}

そしてこのような結果

Şub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO: ファイル u1.base の FileDataModel を作成していますŞub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter info INFO: ファイル情報の読み取り中... Şub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter 情報情報: 読み取り行: 80000 Şub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter 情報情報: 943 人のユーザーを処理しましたŞub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter info 情報: FileDataModel[dataFile:C:\Users\HydrojaN\Documents\NetBeansProjects\JavaApplication1\u1.base] 0.7 を使用して評価を開始します Şub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter 情報情報: 943 人のユーザーが処理されました Şub 03, 2014 2:06:44 PM org.slf4j.impl.JCLLoggerAdapter 情報 INFO: 941 人のユーザーの評価が開始されました06:44 PM org.slf4j.impl.JCLLoggerAdapter 情報情報:4 スレッドで 941 タスクの開始タイミング Şub 03, 2014 2:06:45 PM org.slf4j.impl.JCLLoggerAdapter info INFO: 推奨ごとの平均時間: 193ms Şub 03, 2014 2:06:45 PM org.slf4j.impl. JCLLoggerAdapter 情報 INFO: 使用メモリ量: 86MB / 276MB

1.0364950141746245

Şub 03, 2014 2:07:49 PM org.slf4j.impl.JCLLoggerAdapter info INFO: Evaluation result: 1.0364950141746245 BUILD SUCCESSFUL (合計時間: 1 分 5 秒)

4

2 に答える 2

0

評価を行いたいですか、それともレコメンデーションを使用したいですか。上記のコードを使用して、データ セットに対するアルゴリズム (推奨アルゴリズムと一緒に類似度測定) の効率を評価しています。レコメンダーが生成している結果を使用したい場合は、次の簡単なコードを使用できます。

class RecommenderExample { 

      public static void main(String[] args) throws Exception {
            DataModel model = new FileDataModel (new File("u1.base"));

            UserSimilarity similarity = new TanimotoCoefficientSimilarity(model);
            UserNeighborhood neighborhood = new NearestNUserNeighborhood(50, similarity,        model);

            Recommender recommender = new GenericUserBasedRecommender (model, neighborhood, similarity);

            List<RecommendedItem> recommendations = recommender.recommend(1, 1);

            //Print the results
            for (RecommendedItem recommendation : recommendations) {
                 System.out.println(recommendation);
             }
    }
}

いずれにせよ、最適なアルゴリズムを選択するには評価が必要ですが、最後にアイテムをユーザーに推奨したい場合は、このような同様のコードを使用できます。

Mahout の詳細については、Mahout in Actionという本を参照してください。

于 2014-02-04T09:28:36.613 に答える
0

Mahout メーリング リストで Mahout の回答を得るのが常に簡単になります。

とはいえ、単純なレコメンダーを作成するために、Mahout API 自体をあまり操作する必要はありません。私が提案するのは、recommender の検索乱用スタイルを使用することです。この方法では、Mahout ジョブを実行してログを分析し、それらのログを Solr や Elastic Search などの検索エンジンにインポートします。この検索エンジンは、レコメンデーションとして機能します。

詳細については、 http://www.youtube.com/watch?v=fWR1T2pY08Yを参照してください。

于 2014-02-04T00:31:10.903 に答える