我目前正在使用User对象 - 每个对象都有许多Goal对象。目标对象不是用户特定的,即用户可以共享相同的目标。我试图设计一种方法来计算两个用户之间的“相似性百分比”...(即考虑他们共享多少目标以及他们不共享多少目标)有没有人有这种类型的经验情况?如果有帮助,我正在使用Grails和Mysql。
由于
答案 0 :(得分:14)
执行此操作的标准方法是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得到一个百分比。