Найближчі сусіди шукають дуже високі розмірні дані


17

Я маю велику розріджену матрицю користувачів та елементів, які їм подобаються (порядку 1М користувачів та 100К елементів, із дуже низьким рівнем розрідженості). Я вивчаю способи, за допомогою яких я міг би здійснювати пошук kNN на ньому. Враховуючи розмір мого набору даних та деякі початкові тести, які я виконував, я припускаю, що метод, який я буду використовувати, повинен бути або паралельним, або розподіленим. Тому я розглядаю два класи можливих рішень: один, який доступний (або реалізований досить розумно) на одній багатоядерній машині, інший на кластері Spark, тобто як програма MapReduce. Ось три широкі ідеї, які я розглянув:

  • Припускаючи метрику подібності косинусу, виконайте повне множення нормованої матриці на її транспонирование (реалізується як сума зовнішніх добутків)
  • Використання чутливого до місцеподібного хешування (LSH)
  • Спочатку зменшення розмірності проблеми з PCA

Буду вдячний за будь-які думки чи поради щодо можливих інших способів вирішити цю проблему.


1
Я щойно досліджував цю область і написав допис у блозі про те, що знайшов. Я використовував LSH, але я думаю, що рівень моїх розрядів був вищим, ніж ви шукаєте. tttv-engineering.tumblr.com/post/109569205836/…
Філіп Перл

Відповіді:


15

Я сподіваюся, що наступні ресурси можуть отримати додаткові ідеї щодо вирішення проблеми:

1) Дослідницький документ "Ефективні K-найближчі сусіди приєднатись до алгоритмів високих розмірних даних" : http://arxiv.org/abs/1011.2807

2) Проектний документ класу "Система рекомендацій на основі спільної фільтрації" (Стенфордський університет): http://cs229.stanford.edu/proj2008/Wen-RecommendationSystemBasedOnCollaborativeFiltering.pdf

3) Проект конкурсу на премію Netflix ( заснований на k-NN ) : http://cs.carleton.edu/cs_comps/0910/netflixprize/final_results/knn/index.html

4) Дослідницький документ "Хаби в космосі: популярні найближчі сусіди у великих розмірних даних" про явище прокляття розмірності та його відношення до машинного навчання , загалом, і алгоритму k-NN , зокрема: http://jmlr.org /papers/volume11/radovanovic10a/radovanovic10a.pdf

5) Програмне забезпечення для розрідженої класифікації k-NN (безкоштовне, але, схоже, не є відкритим кодом - може уточнити у авторів): http://www.autonlab.org/autonweb/10408.html

6) Кілька дискусійних тем у StackOverflow :

7) Зверніть увагу на GraphLab , паралельну структуру з відкритим кодом для машинного навчання ( http://select.cs.cmu.edu/code/graphlab ), яка підтримує паралельне кластеризацію за допомогою MapReduceмоделі: http: //select.cs.cmu. edu / code / graphlab / clustering.html

Ви також можете перевірити мою відповідь тут на Data Science StackExchange на рідкісної регресії на наявність посилань на відповідні Rпакети та CRAN Task Viewсторінки: /datascience//a/918/2452 .


4

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


1

Ви повинні використовувати: PySparNN , недавню реалізацію Facebook у python, який криваво швидко. Він також простий у використанні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.