Что происходит, когда вы применяете SVD к проблеме совместной фильтрации? Какая разница между двумя?

21

В совместной фильтрации у нас есть значения, которые не заполняются. Предположим, что пользователь не смотрел фильм, тогда мы должны добавить туда «na».

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

Так что я застрял с проблемой совместной фильтрации против SVD. Они кажутся почти одинаковыми, но не совсем.

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

Джейсон
источник

Ответы:

25

Хорошо, когда вы говорите SVD, вероятно, вы говорите об усеченном SVD (где вы сохраняете только самых больших единичных значений). Есть два разных взгляда на усеченный SVD матрицы. Одним из них является стандартное определение:К

ИксN×мзнак равноUN×NΣN×мВTм×мUВΣККИксИкс~знак равноU~N×КΣ~К×КВ~TК×м

Это все прекрасно и просто (и легко реализовать в R или Matlab), но это не имеет смысла, когда речь идет о матрицах с пропущенными значениями. Тем не менее, есть интересное свойство -truncated СВДА - Это лучшие -рангу приближения к оригиналу! То есть:КК

Икс~знак равноaрграмммяNВ:рaNК(В)знак равноКΣя,J(ИксяJ-ВяJ)2

Это свойство легко обобщить на случай отсутствия значения. По сути, вы ищете матрицу -rank, которая минимизирует среднеквадратичную среднеквадратичную ошибку для известных элементов исходной матрицы. То есть, когда вы тренируете систему, вы игнорируете все пропущенные значения. (Советы о том , как вы могли бы на самом деле идти о поиске -рангу приближения, здесь есть некоторые места , чтобы посмотреть).КК

Затем, как только вы придумаете подходящее «близкое» приближение -rank к оригиналу, вы используете его для заполнения пропущенных значений. То есть, если отсутствует, вы заполняете . Тада! Теперь вы сделали.КИксяJИкс~яJ

Пупси Джо Пит
источник
3

Кажется, что существует множество подходов к тому, как бороться с пропущенными значениями. Следующая статья с обзором в разделе 1.3 может быть хорошей отправной точкой.

d_ijk_stra
источник
0

Мне нужно больше репутации, чтобы комментировать ответ Стампи Джо Пита, поэтому я публикую это как ответ.

Глупое спасибо за ответ, хотя я думаю, что оно нуждается в небольшом уточнении. В частности, я имею в виду это предложение:

По сути, вы ищете матрицу k-ранга, которая минимизирует среднеквадратичную среднеквадратичную ошибку для всех известных элементов исходной матрицы.

Во-первых, разве высший ранг не минимизирует это или фактически восстанавливает исходную X-матрицу? Во-вторых - почему вы берете только известные записи. Интуитивно это имеет смысл, но на самом деле процедура также подгоняет пустые места, которые были заменены некоторыми разумными числами.

Мой подход заключается в проведении чего-то вроде перекрестной проверки:

  1. Заполните пустые места нулями или средствами или другим разумным числом.
  2. Замените один из n известных элементов на 0 или разумное число
  3. Провести реконструкцию СВД ранга k
  4. Проверьте значение известного реконструированного элемента.
  5. повторить для всех возможных известных элементов и рассчитать MSE
  6. повторите для всех возможных k и выберите тот с самым низким MSE.
Кароль Прзыбылак
источник
1. Вы хотите выбрать низкий k, чтобы избежать переобучения (намного ниже, чем какие бы то ни было размеры X). Это в основном по той же причине, по которой линейная регрессия является лучшим выбором, чем квинтика, для подбора набора данных из 6 точек. 2. Вы не знаете, какими должны быть неизвестные записи, поэтому вы не можете измерить «поэлементную MSE» через них. Моя процедура заполняет пропущенные значения числами, которые были получены путем минимизации ошибки по сравнению с известными значениями (и ограничения на то, что матрица должна иметь низкий ранг).
Stumpy Джо Пит