Совместная фильтрация MLlib для создания рекомендаций Top N
Я искал способ генерации лучших рекомендаций для всех пользователей, использующих матричную факторизацию MLlib ALS, но остался безуспешной. Может ли кто-нибудь сказать мне, существует ли такой метод?
Вы можете использовать:
model.recommendProductsForUsers(int num)
Это доступно из искры 1.4 https://spark.apache.org/docs/latest/api/java/org/apache/spark/mllib/recommendation/MatrixFactorizationModel.html#recommendProductsForUsers(int)
Ваша структура выше правильная для использования Spark ALS. Но вы просите LOT кластера рекомендовать для всех пользователей - если у вас есть небольшой кластер для работы.
Вы должны сначала определить: как долго для ОДНОГО пользователя? Затем умножьте это на # пользователей - вы, вероятно, увидите, что вы слишком много спрашиваете.
Возможно, могут возникнуть проблемы с кластерами/субоптимальные параметры конфигурации и/или, как правило, недостаточно мощный кластер в сравнении с вашими требованиями.
вот мой нынешний подход, который кажется чрезвычайно медленным:
Iterator<Rating> it = ratings.toLocalIterator();
while (it.hasNext()) {
int user = it.next().user();
if (!userList.contains(user)) {
Rating[] rat = model.recommendProducts(user, 10);
for (Rating r : rat) {
list.add(user + "," + r.product() + "," + r.rating());
}
userList.add(user);
}
}
любой эффективный подход был бы весьма полезен.
Еще в рубрике
- Вопросы
- Matrix-factorization
- Совместная фильтрация MLlib для создания рекомендаций Top N