Изменить: я попробовал отдельное приложение Spark (вместо PredictionIO), и мои наблюдения остались прежними. Так что это не проблема PredictionIO, но все же сбивает с толку.
Я использую PredictionIO 0.9.6 и шаблон Recommendation для совместной фильтрации. Рейтинги в моем наборе данных — это числа от 1 до 10. Когда я впервые обучил модель со значениями по умолчанию из шаблона (используя ALS.train
), прогнозы были ужасными, по крайней мере, субъективно. Оценки варьировались до 60,0 или около того, но рекомендации казались совершенно случайными.
Кто-то предположил, что ALS.trainImplicit
работает лучше, поэтому я соответственно изменил src/main/scala/ALSAlgorithm.scala
:
val m = ALS.trainImplicit( // instead of ALS.train
ratings = mllibRatings,
rank = ap.rank,
iterations = ap.numIterations,
lambda = ap.lambda,
blocks = -1,
alpha = 1.0, // also added this line
seed = seed)
Сейчас оценки намного ниже (ниже 1,0), но рекомендации соответствуют личным оценкам. Намного лучше, но тоже запутанно. PredictionIO определяет разницу между явным и неявным следующим образом:
явное предпочтение (также называемое «явной обратной связью»), такое как «рейтинг», присвоенный элементу пользователями. неявные предпочтения (также называемые «неявными отзывами»), такие как «просмотр» и «покупка» истории.
а также:
По умолчанию в шаблоне рекомендаций используется
ALS.train()
, что предполагает явные значения рейтинга, которые пользователь оценил элементу.
Документация неверна? Я по-прежнему считаю, что явная обратная связь подходит для моего варианта использования. Может быть, мне нужно адаптировать шаблон с ALS.train
, чтобы получить полезные рекомендации? Или я просто что-то не так понял?