0

對不起,我是推薦系統的新手,但我用apache mahout lib寫了幾行代碼。那麼,我的數據集非常小,500x100與8102細胞已知。RMSE太小。推薦系統

因此,我的數據集實際上是來自「Yelp商業評級預測」競爭的Yelp數據集的一個子集。我只拿到了評級最高的100家餐廳,然後吸納了500位最活躍的顧客。

我創建了SVDRecommender,然後我評估了RMSE。結果約爲0.4 ...爲什麼它很小?也許我只是不明白的東西,我的數據集不是很稀疏,但後來我嘗試了更大,更稀疏的數據集和RMSE變得更小(約0.18)!有人能解釋我這種行爲嗎?

DataModel model = new FileDataModel(new File("datamf.csv")); 
final RatingSGDFactorizer factorizer = new RatingSGDFactorizer(model, 20, 200); 
final Factorization f = factorizer.factorize(); 


RecommenderBuilder builder = new RecommenderBuilder() { 
      public Recommender buildRecommender(DataModel model) throws TasteException { 
       //build here whatever existing or customized recommendation algorithm 
       return new SVDRecommender(model, factorizer); 
      } 
     }; 


RecommenderEvaluator evaluator = new RMSRecommenderEvaluator(); 
     double score = evaluator.evaluate(builder, 
       null, 
       model, 
       0.6, 
       1); 

System.out.println(score); 

回答

0

RMSE是通過查看預測評級與他們隱藏的地面事實來計算的。因此,稀疏數據集可能只有很少的隱藏評級來預測,或者您的算法可能無法預測許多隱藏評級,因爲與其他評級沒有關聯。這意味着即使您的RMSE較低(「更好」),您的覆蓋率也會很低,因爲您並未預測很多項目。

還有一個問題:RMSE完全依賴於數據集。在具有星級評分0.5至5.0星的MovieLens等級數據集中,通常約0.9的RMSE。但在另一個有0.0到1.0點的數據集中,我觀察到的RMSE約爲0.2。看看你的數據集的屬性,看看0.4是否合理。