Как использовать алгоритм Apache Spark ALS (чередование наименьших квадратов) с ограниченными значениями рейтинга

Я пытаюсь использовать ALS, но в настоящее время мои данные ограничены информацией о том, что пользователь купил. Итак, я пытался заполнить ALS из Apache Spark с рейтингом, равным 1 (один), когда пользователь X купил элемент Y (и только такую ​​информацию я предоставил этому алгоритму).

Я пытался изучить это (разделил данные для обучения/тестирования/проверки) или пытался просто изучить все данные, но в конце концов я получил прогноз с очень похожими значениями для любой пары пользователь-элемент (значения дифференцированы на 5-м или 6-м место после запятой вроде 0,86001 и 0,86002).

Я думал об этом, и, может быть, это потому, что я могу поставить только оценку, равную 1, поэтому ALS нельзя использовать в такой экстремальной ситуации?

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

Конечно, я менял такие параметры, как итерации, лямбда, ранг.


person Adrian    schedule 11.02.2015    source источник


Ответы (1)


В этом случае ключ в том, что вы должны использовать trainImplicit, который игнорирует значение Rating. В противном случае вы просите его предсказать рейтинги в мире, где все оценивают все на 1. Правильный ответ всегда равен 1, поэтому все ваши ответы похожи.

person Sean Owen    schedule 11.02.2015
comment
Спасибо, Шон, я проверю это и предоставлю информацию, как это работает. - person Adrian; 12.02.2015
comment
Я получил RMSE где-то рядом с 0,193 для очень наивного обучения (все данные были в поезде и в тесте). Кроме того, предсказания различаются, и в какой-то момент кажется, что он устанавливает правильные отношения. Что для меня интересно, так это то, что я получил намного лучший RMSE с высокой альфой - например, 10 или 50. Большое спасибо за помощь! - person Adrian; 12.02.2015
comment
В этом случае вы не можете использовать RMSE. Это не то, что он минимизирует. - person Sean Owen; 12.02.2015
comment
Шон, как я могу проверить, правильно ли я выбираю параметры (в данный момент я создаю приложение, поэтому я не могу просто проверить его в производственной среде)? Я думал, что прогноз в данном случае равен уверенности и предположил, что если уверенность близка к единице, то почти наверняка этот предмет будет куплен (по крайней мере, так я это понимаю). - person Adrian; 12.02.2015
comment
Результат не является вероятностью, если вы это имеете в виду. Значения обычно находятся в [0,1], но не всегда. Вы можете использовать такую ​​метрику, как AUC, для оценки модели. Настройка гиперпараметров обычно заключается в том, чтобы просто попробовать множество комбинаций. Объявление: мы написали книгу о множестве подобных случаев использования MLlib, включая настройку гиперпараметров с помощью ALS. shop.oreilly.com/product/0636920035091.do - person Sean Owen; 12.02.2015
comment
Шон прочитал упомянутый абзац и обнаружил, что Spark реализует AUC. У меня проблемы с его использованием - создал новый вопрос: ‹a href=stackoverflow.com/questions/28529923/›. Если у вас будет время, посмотрите на это (я видел вашу реализацию, но, возможно, лучше использовать прямую реализацию искры - у меня будет большой объем данных, и может быть лучше использовать код, который напрямую поддерживается - что ты думаешь?). Еще бы хорошо понять, как пользоваться той реализацией искры ;) - person Adrian; 15.02.2015