Ce dont vous avez besoin est un algorithme de clustering qui regrouperait automatiquement les utilisateurs similaires. La première difficulté que vous rencontrez est que la plupart des algorithmes de clustering s'attendent à ce que les éléments qu'ils regroupent soient représentés en tant que points dans un espace euclidien. Dans votre cas, vous n'avez pas les coordonnées des points. Au lieu de cela, vous pouvez calculer la valeur de la fonction "similarité" entre des paires d'entre eux.
Une bonne possibilité ici est d'utiliser spectral clustering, qui nécessite précisément ce que vous avez: une matrice de similarité. L'inconvénient est que vous devez toujours calculer votre fonction de compatibilité pour chaque paire de points, i. e. l'algorithme est O (n^2).
Si vous avez absolument besoin d'un algorithme plus rapide que O (n^2), vous pouvez essayer une approche appelée dissimilarity spaces. L'idée est très simple. Vous inversez votre fonction de compatibilité (par exemple en prenant sa réciproque) pour le transformer en une mesure de dissimilitude ou de distance. Ensuite, vous comparez chaque élément (utilisateur, dans votre cas) à un ensemble d'éléments prototypes et traitez les distances résultantes en tant que coordonnées dans un espace. Par exemple, si vous avez 100 prototypes, chaque utilisateur serait représenté par un vecteur de 100 éléments, i. e. par un point dans l'espace 100-dimensionnel.Vous pouvez ensuite utiliser n'importe quel algorithme de clustering standard, tel que K-means. La question est maintenant de savoir comment choisir les prototypes et combien en avez-vous besoin. Divers heuristiques ont été essayées, cependant, voici un dissertation qui soutient que le choix aléatoire des prototypes peut être suffisant. Il montre des expériences dans lesquelles l'utilisation de 100 ou 200 prototypes choisis au hasard a donné de bons résultats. Dans votre cas, si vous avez 1000 utilisateurs, et que vous en choisissez 200 pour être des prototypes, vous devrez évaluer votre fonction de compatibilité 200 000 fois, ce qui représente une amélioration d'un facteur 2,5 par rapport à chaque paire. Le véritable avantage, cependant, est que pour 1 000 000 d'utilisateurs, 200 prototypes seraient encore suffisants, et vous auriez besoin de faire 200 000 000 comparaisons, plutôt que 500 000 000 000 une amélioration d'un facteur 2500. Ce que vous obtenez est l'algorithme O (n) mieux que O (n^2), malgré un facteur constant potentiellement important.
juste corrigé une faute de frappe sur le voisin (ou voisin pour US?) Tag ... – VonC
Si vous venez avec quelque chose de brillant, vous pourriez gagner le prix Netflix - http://netflixprize.com/. –