Mahout RecommenderEvaluator с IDRescorer

#mahout #recommendation-engine #mahout-recommender

#mahout #механизм рекомендаций #mahout-рекомендатель

Вопрос:

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

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

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

Комментарии:

1. @DraganMilcevski большое вам спасибо за ваш ответ. Это не совсем то, что я искал, поскольку мой ‘CustomRescorer’ зависит от других параметров, таких как ‘new CustomRescorer (requestParams: Seq [String])’. Для всех остальных случаев ваш ответ может подойти.

2. Это тоже можно исправить. У вас будет customRescorrer в качестве переменной в вашем классе Recommender, и вы даже можете обновить его, установив новые значения, а затем, когда начнется процесс рекомендации, он будет использовать новый rescorer. Может быть, если вы отправите весь класс, я мог бы быть авелем, чтобы помочь вам.

Ответ №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));
 }
...
}
 

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

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

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

};