Совместная фильтрация MLlib для создания рекомендаций Top N

45
5

Я искал способ генерации лучших рекомендаций для всех пользователей, использующих матричную факторизацию MLlib ALS, но остался безуспешной. Может ли кто-нибудь сказать мне, существует ли такой метод?

спросил(а) 2015-01-19T08:07:00+03:00 4 года, 10 месяцев назад
3
Решение
56

Вы можете использовать:

model.recommendProductsForUsers(int num)

Это доступно из искры 1.4 https://spark.apache.org/docs/latest/api/java/org/apache/spark/mllib/recommendation/MatrixFactorizationModel.html#recommendProductsForUsers(int)

ответил(а) 2015-09-10T00:52:00+03:00 4 года, 2 месяца назад
Еще 2 ответа
32

Ваша структура выше правильная для использования Spark ALS. Но вы просите LOT кластера рекомендовать для всех пользователей - если у вас есть небольшой кластер для работы.

Вы должны сначала определить: как долго для ОДНОГО пользователя? Затем умножьте это на # пользователей - вы, вероятно, увидите, что вы слишком много спрашиваете.

Возможно, могут возникнуть проблемы с кластерами/субоптимальные параметры конфигурации и/или, как правило, недостаточно мощный кластер в сравнении с вашими требованиями.

ответил(а) 2015-02-27T00:33:00+03:00 4 года, 9 месяцев назад
33

вот мой нынешний подход, который кажется чрезвычайно медленным:

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

любой эффективный подход был бы весьма полезен.

ответил(а) 2015-01-20T06:38:00+03:00 4 года, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема