2010-04-24 7 views
6

Je travaille actuellement avec des objets Utilisateur - chacun d'eux ayant plusieurs objets Objectif. Les objets Objectif ne sont pas spécifiques à l'utilisateur, c'est-à-dire que les utilisateurs peuvent partager le même objectif. J'essaie de trouver un moyen de calculer un «pourcentage de similarité» entre deux utilisateurs ... (c'est-à-dire en tenant compte du nombre de buts qu'ils partagent ainsi que du nombre de buts qu'ils ne partagent pas) Quelqu'un at-il de l'expérience? situation? J'utilise Grails avec Mysql si cela est utile.Méthode efficace pour calculer un pourcentage de similarité entre les ensembles de données

Merci

Répondre

13

La méthode standard pour le faire est la similitude Jaccard. Si A est l'ensemble des objectifs du premier utilisateur et B est l'ensemble des objectifs du deuxième utilisateur, la similitude Jaccard est:

#(A intersect B)/#(A union B) 

Ceci est le nombre de buts qu'ils partagent divisé par le nombre total de votes les deux ont ensemble (en comptant les buts qu'ils partagent une seule fois). Donc, si le premier utilisateur a des objectifs A = {1,2,3} et le second utilisateur a des objectifs B = {2,4} alors il est la suivante:

A intersect B = {2} 
A union B = {1,2,3,4} 

#(A intersect B)/#(A union B) = 1/4 

La similitude Jaccard est toujours entre 0 (ils partager pas d'objectifs) et 1 (ils ont les mêmes objectifs), de sorte que vous pouvez obtenir un pourcentage en multipliant par 100.

http://en.wikipedia.org/wiki/Jaccard_index

+0

travaillé parfaitement, merci beaucoup – RyanLynch

Questions connexes