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