我目前正在使用User对象-每个对象都有许多目标对象。目标对象不是特定于用户的,也就是说,用户可以共享同一目标。我正在尝试一种方法来计算两个用户之间的“相似性百分比” ...(即,考虑到他们共享多少个目标以及他们不共享多少个目标)是否有人有过使用这种类型的经验情况?如果有帮助,我可以在Mysql中使用Grails。
谢谢
最佳答案
执行此操作的标准方法是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
关于mysql - 计算数据集之间相似度百分比的有效方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2706499/