计算数据集之间相似性百分比的有效方法

时间:2010-04-24 23:09:02

标签: mysql algorithm grails groovy

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

由于

1 个答案:

答案 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得到一个百分比。

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