1

以下のコード例に従っています。

    RandomUtils.useTestSeed();
    DataModel model = new FileDataModel(new File(file));
    RecommenderIRStatsEvaluator evaluator = new GenericRecommenderIRStatsEvaluator();
    RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {
        public Recommender buildRecommender(DataModel model)
                throws TasteException {
            UserSimilarity similarity = new PearsonCorrelationSimilarity(
                    model);
            UserNeighborhood neighborhood = new NearestNUserNeighborhood(2,
                    similarity, model);
            return new GenericUserBasedRecommender(model, neighborhood,
                    similarity);
        }
    };
    IRStatistics stats = evaluator.evaluate(recommenderBuilder, null,
            model, null, 4, 4, 0.5);
    System.out.println(stats.getPrecision());
    System.out.println(stats.getRecall());

ファイル内のデータは次のとおりです。

 1,101,5.0
 1,102,3.0
 1,103,2.5
 2,101,2.0
 2,102,2.5
 2,103,5.0
 2,104,2.0
 3,101,2.5
 3,104,4.0
 3,105,4.5
 3,107,5.0
 4,101,5.0
 4,103,3.0
 4,104,4.5
 4,106,4.0
 5,101,4.0
 5,102,3.0
 5,103,2.0
 5,104,4.0
 5,105,3.5
 5,106,4.0

上記のコードをデータ ファイルで実行すると、

java.lang.IllegalArgumentException: Illegal precision: NaN どうしてこうなったの? ここに関連するものを見つけましたが、2009 年に投稿されたものであり、私の混乱を説明することはできません。

4

2 に答える 2

4

最終的に、エラーは適合率または再現率を計算できなかったことを意味します。これは、テストデータセットが非常に小さいため、意味のあるテストが不可能だったためです。十分ではないと思いますが、0.5から1.0に変更し、しきい値を4から3に下げてください。

これIllegalArgumentExceptionは、発生してはならない単なる見た目のバグです。少し前にSVNで修正されました。しかし、それは、適合率と再現率が未定義であることを示します。

于 2012-11-30T15:28:35.283 に答える
0

どうもありがとうショーン..提案された変更後に機能しています:

IRStatistics stats = evaluator.evaluate(recommenderBuilder, null,
                                        model, null, 3, 4, 1.0);  
于 2015-11-09T11:28:40.117 に答える