Mahout RecommenderEvaluator с IDRescorer

Я использую RecommenderEvaluator для оценки эффективности рекомендаций Mahout. В настоящее время я пытаюсь улучшить результаты рекомендаций с помощью IDRescorer, который будет выполнять некоторую постобработку искомых элементов.

RecommenderEvaluator evaluator = 
    new AverageAbsoluteDifferenceRecommenderEvaluator();
double evaluation = evaluator.evaluate(builder, myModel, 0.9, 0.9);

Есть ли способ в Mahout указать RecommenderEvaluator использовать мой пользовательский IDRescorer?


person kikulikov    schedule 24.06.2014    source источник
comment
@DraganMilcevski большое спасибо за ваш ответ. Это не совсем то, что я искал, поскольку мой «CustomRescorer» зависит от других параметров, таких как «новый CustomRescorer (requestParams: Seq [String])». Для всех остальных случаев ваш ответ может подойти.   -  person kikulikov    schedule 08.07.2014
comment
Есть способ исправить и это. У вас будет переменная customRescorrer в вашем классе Recommender, и вы даже можете обновить ее, установив новые значения, а затем, когда процесс рекомендации начнется, он будет использовать новый rescorer. Может быть, если ты пришлешь весь класс, я смогу тебе помочь.   -  person Dragan Milcevski    schedule 01.08.2014


Ответы (1)


Вы можете создать собственную реализацию класса Recommender

class CustomRecommender implements Recommender{
....
public List<RecommendedItem> recommend(long userID, int howMany) throws TasteException {
 IDRescorer rescorer = new CustomResorer();
 return delegate.recommend(userID, howMany, rescorer);
 }
 public List<RecommendedItem> recommend(long userID, int howMany, IDRescorer rescorer) throws TasteException {
    return delegate.recommend(userID, howMany, rescorer);
 }
 public float estimatePreference(long userID, long itemID) throws TasteException {
   IDRescorer rescorer = new CustomResorer();
   return (float) rescorer.rescore( itemID, delegate.estimatePreference(userID, itemID));
 }
...
}

Здесь, даже если рекомендация вызывается без оценщика, вы включите ее в методы recommend и estimatePreference.

И затем, когда вы создадите RecommenderBuilder, вы создадите экземпляр своего рекомендателя:

RecommenderBuilder recommenderBuilder = new RecommenderBuilder() {
   @Override
   public Recommender buildRecommender(DataModel model) throws TasteException {
    Similarity similarity = new ...             
    return new CustomRecommender(model, similarity);                    
   }

};
person Dragan Milcevski    schedule 25.06.2014