2010-04-24 18 views
6

Actualmente estoy trabajando con objetos de usuario, cada uno de los cuales tiene muchos objetos Goal. Los objetos Goal no son específicos del usuario, es decir, los usuarios pueden compartir el mismo objetivo. Estoy intentando diseñar una forma de calcular un "porcentaje de similitud" entre dos usuarios ... (es decir, teniendo en cuenta la cantidad de objetivos que comparten y la cantidad de objetivos que no comparten) ¿Alguien tiene experiencia con este tipo de ¿situación? Estoy usando Grails con Mysql si eso es útil.Forma efectiva de calcular un porcentaje de similitud entre los conjuntos de datos

Gracias

Respuesta

13

La forma estándar de hacerlo es la similitud de Jaccard. Si A es el conjunto de objetivos del primer usuario y B es el conjunto de objetivos del segundo usuario, la similitud de Jaccard es:

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

Este es el número de goles que la acción dividido por el número total de votos los dos tienen juntos (contando objetivos que comparten solo una vez). Así que si el primer usuario tiene objetivos A = {1,2,3} y el segundo usuario tiene objetivos B = {2,4}, entonces es la siguiente:

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

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

La similitud Jaccard es siempre entre 0 (que compartir no goles) y 1 (tienen los mismos objetivos), para que pueda obtener un porcentaje multiplicándolo por 100.

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

+0

funcionaba perfectamente, muchas gracias – RyanLynch

Cuestiones relacionadas