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

Rya*_*nch 6 mysql algorithm grails groovy

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

谢谢

Jul*_*les 14

这样做的标准方法是Jaccard相似性.如果A是第一个用户的目标集,而B是第二个用户的目标集,则Jaccard相似度为:

#(A intersect B)/#(A union B)
Run Code Online (Sandbox Code Playgroud)

这是他们共享的目标数除以两者共同投票的总数(计算他们只共享一次的目标).因此,如果第一个用户的目标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
Run Code Online (Sandbox Code Playgroud)

Jaccard相似度总是在0(他们没有目标)和1(他们有相同的目标)之间,所以你可以通过乘以100得到一个百分比.

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