#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);
}
};