Базовый псевдокод для использования SVD с набором данных типа Movielens/Netflix

Я изо всех сил пытаюсь понять, как именно начать использовать SVD с набором данных типа MovieLens/Netflix для прогнозирования рейтинга. Я был бы очень признателен за любые простые образцы в python/java или базовый псевдокод задействованного процесса. Есть ряд документов/сообщений, в которых обобщается общая концепция, но я не уверен, как начать ее реализовывать, даже используя ряд предложенных библиотек.

Насколько я понимаю, мне нужно преобразовать исходный набор данных следующим образом:

Исходный набор данных:

    user    movie   rating
    1       43      3
    1       57      2
    2       219     4

Нужно повернуться, чтобы быть:

user        1   2
movie   43  3   0
        57  2   0
        219 0   4

На данный момент мне нужно просто внедрить эту матрицу в алгоритм SVD, предоставляемый доступными библиотеками, а затем (каким-то образом) извлечь результаты, или с моей стороны требуется дополнительная работа?

Некоторая информация, которую я прочитал:

http://www.netflixprize.com/community/viewtopic.php?id=1043
http://sifter.org/~simon/journal/20061211.html
http://www.slideshare.net/NYCPredictiveAnalytics/building-a-recommendation-engine-an-example-of-a-product-recommendation-engine
http://www.slideshare.net/bmabey/svd-and-the-netflix-dataset-presentation
.. и ряд других докладов

Некоторые библиотеки:
LingPipe(java)< br> Jama(java)
Pyrsvd(python)

Буду признателен за любые советы, особенно по базовому набору данных. Большое спасибо, Оли


person oli    schedule 14.03.2011    source источник


Ответы (2)


См. SVDRecommender в Apache Mahout. Ваш вопрос о формате ввода полностью зависит от того, какую библиотеку или код вы используете. Нет единого стандарта. На каком-то уровне, да, код будет строить какую-то внутреннюю матрицу. Для Mahout входными данными для всех рекомендателей, если они предоставляются в виде файла, является файл CSV со строками типа userID,itemID,rating.

person Sean Owen    schedule 15.03.2011
comment
Спасибо, Шон, выглядит действительно здорово. Я собираюсь попробовать это сегодня. - person oli; 15.03.2011

Набор данных: http://www.grouplens.org/node/73

SVD: почему бы просто не сделать это в SAGE, если вы не понимаете, как делать SVD? Wolfram alpha или http://www.bluebit.gr/matrix-calculator/ разложит матрица для вас, или это на Википедии.

person isomorphismes    schedule 14.03.2011
comment
Привет, Лао, очень ценю, что ты вернулся ко мне. Я должен был уточнить, что я использовал набор данных и сделал некоторое стандартное предсказание kNN, используя Пирсона/косинус для подобия, с подмножеством набора данных Movielens. Учитывая то, что я прочитал, SVD должен дать мне здесь лучшие результаты, поэтому я очень хотел реализовать его самостоятельно, но не уверен, какие шаги мне нужно предпринять, учитывая набор данных Movielens. Как вы предложили, я собираюсь поиграть с SAGE, чтобы понять, смогу ли я понять процесс от начала до конца; если бы у вас были какие-то грубые рекомендации о шагах, которые нужно предпринять, я был бы признателен. Спасибо, оли. - person oli; 15.03.2011