2010-04-24 501 views
6

我目前正在使用User对象 - 每个对象都有许多目标对象。目标对象不是用户特定的,也就是说,用户可以共享相同的目标。我试图设计一种方式来计算两个用户之间的“相似度百分比”(即考虑到他们共享多少个目标以及他们不共享多少个目标)有没有人有过这种类型的情况?如果这有帮助,我在使用Grails和Mysql。计算数据集之间相似性百分比的有效方法

谢谢

回答

13

这样做的标准方法是Jaccard相似性。如果A是一组第一用户的目标和B是集合的所述第二用户的目标,Jaccard相似是:

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

这是他们共享由票的总数除以目标数两人在一起(计算他们只共享一次的目标)。因此,如果第一个用户拥有的目标A = {1,2,3}和第二用户具有目标B = {2,4},然后它是这样的:

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

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

的Jaccard相似总是0之间(它们不共享的目标)和1(它们具有相同的目标),这样你就可以通过乘以100。

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

+0

完美工作得到的百分比,非常感谢你 – RyanLynch 2010-04-24 23:45:39