2012-11-30 10 views
1

我下面的代碼示例如下:Mahout中GenericRecommenderIRStatsEvaluator的非法精度?

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:非法精度:NaN 爲什麼會發生這種情況?我找到了一些與here相關的內容,但它發佈在2009年 ,無法解釋我的困惑。

+0

你能解釋一下我@Sean歐文 –

回答

4

最終,錯誤意味着無法計算精度或召回率,這是因爲測試數據集太小以至於無法進行有意義的測試。我認爲這不夠,但是將0.5更改爲1.0,並將閾值從4降低到3.

IllegalArgumentException只是一個不應該出現的整形錯誤。它剛剛在SVN中修復。但它會告訴你,精確度和召回率是不確定的。

+0

是的,它是固定在SVN,0.7之後?對於這個測試,沒有培訓百分比的概念。最終的arg只是控制整個數據集的多少個樣本。 –

+0

感謝您在mahout上的工作,我從您的設計中學到了很多東西。 –

0

非常感謝肖恩..這是你的建議的變更後的工作:

IRStatistics stats = evaluator.evaluate(recommenderBuilder, null, 
             model, null, 3, 4, 1.0);