2013-02-18 99 views
1

我正在使用布爾值,嘗試評估Mahout中的推薦引擎。我的問題是關於選擇評估函數的「正確」參數。提前爲冗長的帖子道歉。在Mahout中解釋基於項目的推薦器的evaluate()函數的參數

IRStatistics evaluate(RecommenderBuilder recommenderBuilder, 
         DataModelBuilder dataModelBuilder, 
         DataModel dataModel, 
         IDRescorer rescorer, 
         int at, 
         double relevanceThreshold, 
         double evaluationPercentage) throws TasteException; 

1)你能想到在以下兩個參數必須被使用的示例的:對於double relevanceThreshold可變

- DataModelBuilder dataModelBuilder 
- IDRescorer rescorer 

2),I中設置的值GenericRecommenderIRStatsEvaluator.CHOOSE_THRESHOLD,但是,我想知道是否可以通過設定不同的價值來建立「更好」的模式。

3)在我的項目中,我需要推薦每個用戶最多10個項目。這是否意味着爲變量int at設置一個大於10的值是沒有意義的?

4)鑑於如果我不得不等待大量建模,​​我不打擾,將變量double evaluationPercentage設置爲1是否是一個好習慣?你能想到任何情況下1不會給出最佳模型嗎? 5)爲什麼只要建議的數量(即變量int at)增加(我通過實驗證明),爲什麼精度/回憶(注意我在處理布爾數據)會增加?

6)spiting of both testing and training tests在mahout內發生了什麼,我怎麼能改變這個百分比(除非基於項目的建議不是這種情況)?

回答

2

準確的建議本身並不能保證推薦系統的用戶獲得有效且令人滿意的體驗,因此測量只應作爲參考點。也就是說,理想情況下,真正的用戶會根據您設置的基線(如隨機推薦)使用您的系統,並進行A/B測試,並查看哪一個具有更好的性能。但這可能很麻煩而且不太實際。

N推薦的精確度和召回率對於推薦者來說並不是一個很好的指標。你最好使用像AUC度量(曲線下面積)

  1. 看一看一個象夫在行動書的例子(link
  2. 讓Mahout中選擇一個門檻是好的,但它會更計算成本很高
  3. 是的,如果您提出10條建議,則評估爲10會產生很多意義
  4. 取決於數據的大小。如果使用100%(即1.0)足夠快,我會使用它。但是,如果您確實使用了不同的(少),我強烈建議您在測試時使用RandomUtils.useTestSeed();,以便您知道每次評估時都會以相同的方式完成抽樣。 (不要在生產中使用它)
  5. 不確定。取決於你的數據是怎樣的。但通常如果精度增加,召回會減少,反之亦然。見F1 Score(也可從Mahout IRStatistics獲得)
  6. 對於IRStatistics,我不完全確定它發生在哪裏(或者它是否發生)。注意到它甚至不需要進行培訓和測試。儘管某處可能存在默認設置。如果我是你,我會通過Mahout代碼並找出答案。
相關問題