J'ai une grande matrice clairsemée d'utilisateurs et d'articles qu'ils aiment (de l'ordre de 1 million d'utilisateurs et de 100 000 articles, avec un très faible niveau de rareté). J'explore les façons dont je pourrais effectuer une recherche sur kNN. Compte tenu de la taille de mon jeu de données et de certains tests initiaux que j'ai effectués, je suppose que la méthode que j'utiliserai devra être parallèle ou distribuée. J'envisage donc deux classes de solutions possibles: l'une qui est soit disponible (ou implémentable d'une manière raisonnablement facile) sur une seule machine multicœur, l'autre sur un cluster Spark, c'est-à-dire en tant que programme MapReduce. Voici trois grandes idées que j'ai examinées:
- En supposant une métrique de similitude cosinus, effectuez la multiplication complète de la matrice normalisée par sa transposition (implémentée comme une somme de produits externes)
- Utilisation du hachage sensible à la localité (LSH)
- Réduire d'abord la dimensionnalité du problème avec un PCA
J'apprécierais toute réflexion ou conseil sur d'autres manières possibles de résoudre ce problème.