Що відбувається, коли ви застосуєте SVD до проблеми спільної фільтрації? Яка різниця між ними?


21

У процесі спільної фільтрації у нас є значення, які не заповнені. Припустимо, користувач не переглянув фільм, тоді ми мусимо поставити "na" туди.

Якщо я збираюсь взяти SVD цієї матриці, тоді мені потрібно ввести якесь число - скажімо 0. Тепер, якщо я розбиваю на матрицю, у мене є спосіб знайти подібних користувачів (з'ясувавши, хто з користувачів ближче один до одного в зменшений розмірний простір). Але сама передбачувана перевага - для користувача для елемента буде дорівнює нулю. (тому що це ми ввели у невідомих стовпцях).

Тому я застряг у проблемі спільної фільтрації проти SVD. Вони здаються майже однаковими, але не зовсім.

Яка різниця між ними і що відбувається, коли я застосую SVD до спільної проблеми фільтрації? Я це зробив, і результати здаються прийнятними з точки зору пошуку прилеглих користувачів, що чудово, але як?

Відповіді:


25

Гаразд, коли ви говорите SVD, імовірно, ви говорите про усічений SVD (де ви зберігаєте лише найбільші значення однини). Існує два різні способи розгляду усіченого SVD матриці. Одне - стандартне визначення:к

Хн×м=Uн×нΣн×мVТм×мUVΣккХХ~=U~н×кΣ~к×кV~Тк×м

кк

Х~=аrгмiнБ:rанк(Б)=кi,j(Хij-Бij)2

кк

кХijХ~ij


3

Схоже, існує багато підходів щодо того, як поводитися з відсутніми значеннями. Наступний документ з оглядом у Розділі 1.3 може стати хорошою відправною точкою.


0

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

Stumpy дякую за відповідь, хоча я думаю, що їй потрібно трохи уточнити. Особливо я маю на увазі це речення:

В основному ви шукаєте матрицю k-rank, яка мінімізує середньоквадратичну помилку у квадраті серед відомих записів оригінальної матриці.

По-перше - хіба найвищий ранг завжди мінімізував це чи фактично реконструював оригінальну матрицю X? По-друге - чому б ви брали лише відомі записи. Інтуїтивно це має сенс, але процедура насправді також підганяє порожні місця, які були замінені на кілька розумних цифр.

Мій підхід полягає в тому, щоб здійснити щось на зразок перехресної перевірки:

  1. Заповнюйте порожні місця 0 або засобами або іншим розумним числом.
  2. Замініть один з n відомих елементів на 0 або розумне число
  3. Провести реконструкцію SVD рангу k
  4. Перевірте значення відомого реконструйованого елемента.
  5. повторити для всіх можливих відомих елементів і обчислити MSE
  6. повторіть для всіх можливих k і виберіть той, що має найменший MSE.

1. Ви хочете вибрати низький k, щоб уникнути перевитрати (набагато нижче, ніж будь-які розміри X). Це в основному з тієї ж причини, що лінійна регресія є кращим вибором, ніж квінтіка для встановлення набору даних з 6 балів. 2. Ви не знаєте, якими повинні бути невідомі записи, тому ви не можете виміряти "стихійний MSE" через них. Моя процедура заповнює пропущені значення цифрами, які були отримані мінімізацією помилок проти відомих значень (і обмеженням того, що матриця повинна бути низько-ранговою).
Stumpy Joe Pete
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.