Mam dużą rzadką macierz użytkowników i przedmiotów, które lubią (rzędu 1 mln użytkowników i 100 000 przedmiotów, z bardzo niskim poziomem rzadkości). Badam sposoby, w jakie mogę na nim przeprowadzić wyszukiwanie kNN. Biorąc pod uwagę rozmiar mojego zbioru danych i niektóre wstępne testy, które przeprowadziłem, zakładam, że metoda, której użyję, będzie musiała być równoległa lub rozproszona. Rozważam więc dwie klasy możliwych rozwiązań: jedno, które jest albo dostępne (lub możliwe do wdrożenia w dość łatwy sposób) na pojedynczej maszynie wielordzeniowej, a drugie na klastrze Spark, tj. Jako program MapReduce. Oto trzy ogólne pomysły, które rozważałem:
- Zakładając metrykę podobieństwa cosinus, wykonaj pełne pomnożenie znormalizowanej macierzy przez jej transpozycję (zaimplementowaną jako suma produktów zewnętrznych)
- Korzystanie z mieszania wrażliwego na lokalizację (LSH)
- Zmniejszenie najpierw wymiarów problemu dzięki PCA
Byłbym wdzięczny za wszelkie przemyślenia lub porady dotyczące możliwych innych sposobów rozwiązania tego problemu.