1

train.csv トレーニング セットと Precision メトリックを使用して、Apache Mahout でレコメンダー システム エバリュエーターを作成しています。私の質問は、エバリュエーターによって生成されたものではなく、固定されたテスト セットを使用することは可能ですか?

より具体的には、UserId のリストを含む test.csv ファイルがあり、これらに対して推奨事項を提供し、Precision メトリックで結果を評価したいと考えています。これは、変更されることのないこの固定されたユーザー セットに対してのみです。彼らの評価はファイル train.csv にあり、私はそれを使用してアルゴリズムをトレーニングし、他のすべてのユーザーの評価も含まれています。

この機能を追加したいコードも投稿します。

    RandomUtils.useTestSeed(); 
    DataModel model = new FileDataModel(new File("files/train.csv"));
    RecommenderIRStatsEvaluator evaluator = new GenericRecommenderIRStatsEvaluator();

    RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {

        public Recommender buildRecommender(DataModel model) throws TasteException {
            //Here I build my recommender system
            //return ...
        }
    };

    IRStatistics stats = evaluator.evaluate(recommenderBuilder, null, model, null, 5,
            4/*relevance Threshold*/, 1); 


    System.out.println(stats.getPrecision());
4

1 に答える 1

0

したがって、クロスバリデーションのゴールド スタンダード テスト データが必要です。トレーニングとテストに分かれています。反復可能なテストが必要です。これは非常に理にかなっています。

Mahout エバリュエーターは、渡されたものからテスト データとトレーニング データをランダムに選択することに基づいて分割を行います。固定の RNG シードを渡すと、エバリュエーターはまったく同じテスト セットとトレーニング セットを選択します。これはまさにあなたが尋ねたものではありませんが、再現可能な CV テストを取得する 1 つの方法です。

それ以外の場合は、エバリュエーターをハックして、事前に計算されたテスト/トレーニング セットを使用する必要があります。

私が使用する精度メトリックは、UI で計算または表示する数値など、いくつかの推奨事項での平均精度 (MAP) です。これは、Mahout Evaluator には組み込まれていません。

これをすべて正しく行うには、Evaluator をハックします。

ところで、絶対的なシンプルさが最高の設計基準でない限り、私はそのレコメンダーを使用しません。最新の Mahout レコメンダーは、Solr や Elasticsearch などの検索エンジンを使用してクエリされるモデルを構築します。これらは信じられないほど柔軟でスケーラブルです。

ここで説明されている新しい方法: http://mahout.apache.org/users/recommender/intro-cooccurrence-spark.html この方法に関するいくつかのブログ投稿: http://occamsmachete.com/ml/

この方法では、train.csv でトレーニングし、test.csv のユーザー履歴を使用してクエリを作成します。MAP を使用してすべてのクエリの精度を計算します。新しい方法ではクエリに検索エンジンを使用するため、スケーラブルなサービスも利用できます。

于 2014-11-11T17:27:18.017 に答える