5

Я пытаюсь из алгоритм совместной фильтрации, реализованный в Спарк и бегу в следующем выпуске:Спарк MLLib Collaborative Filtering с новым пользователем

Пусть я тренируюсь модель со следующими данными:

u1|p1|3 
u1|p2|3 
u2|p1|2 
u2|p2|3 

Теперь, если я протестировать его со следующими данными:

u1|p1|1 
u3|p1|2 
u3|p2|3 

Я никогда не видел каких-либо оценок для пользователя «u3», по-видимому, потому, что пользователь не отображается в обучающих данных. Это из-за проблемы с холодным запуском? У меня сложилось впечатление, что этот вопрос будет применяться только к новому продукту. В этом случае я ожидал предсказание для «u3», так как «u1» и «u2» в данных обучения имеют схожую информацию о рейтинге с «u3». Является ли это различием между совместными фильтрами на основе моделей и на основе памяти?

+0

Вы могли обучаться с пользователем и продуктом как нецелые? Когда я пытаюсь тренироваться в этом формате, я получаю сообщение об ошибке: Rating, (int (self.user), int (self.product), float (self.rating)) – jKraut

+0

Похоже, мы сталкиваемся с аналогичными проблемами: как прогнозировать новых пользователей, не переучивая всю модель? –

ответ

1

Я предполагаю, что вы говорите об алгоритме ALS?

«u3» не является парой вашего учебного набора, и поэтому ваша модель ничего не знает об этом пользователе. Все, что мог, возможно, вернуть средний рейтинг всем пользователям.

Заглядывая в Spark 1.3.0 Код Scala: MatrixFactorizationModel, возвращенный ALS.train(), пытается найти пользователя и продукт в векторе признаков, когда вы позвоните predict(). Я получаю NoSuchElementException, когда пытаюсь предсказать рейтинг неизвестного пользователя. Это просто реализовано именно так.

+0

Спасибо. Это то, о чем я думал. Существуют ли другие алгоритмы совместной фильтрации, которые MLLib поддерживает помимо ALS? –

+0

ALS, по-видимому, является единственным алгоритмом Spark 1.3.0: https://spark.apache.org/docs/latest/mllib-guide.html – stholzm

Смежные вопросы