calculate vote similarity using jaccard instead of cosine distance
This commit is contained in:
@@ -29,7 +29,7 @@ class PostVoteSimilarity
|
|||||||
|
|
||||||
PostVote.positive_user_ids.each do |uid|
|
PostVote.positive_user_ids.each do |uid|
|
||||||
posts1 = PostVote.positive_post_ids(uid)
|
posts1 = PostVote.positive_post_ids(uid)
|
||||||
score = calculate_with_cosine(posts0, posts1)
|
score = calculate_with_jaccard(posts0, posts1)
|
||||||
if score >= THRESHOLD
|
if score >= THRESHOLD
|
||||||
set << Element.new(uid, score)
|
set << Element.new(uid, score)
|
||||||
end
|
end
|
||||||
@@ -38,6 +38,16 @@ class PostVoteSimilarity
|
|||||||
set.sort.reverse.first(limit)
|
set.sort.reverse.first(limit)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def calculate_with_jaccard(posts0, posts1)
|
||||||
|
a = (posts0 & posts1).size
|
||||||
|
div = posts0.size + posts1.size - a
|
||||||
|
if div == 0
|
||||||
|
0
|
||||||
|
else
|
||||||
|
a / div.to_f
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def calculate_with_cosine(posts0, posts1)
|
def calculate_with_cosine(posts0, posts1)
|
||||||
a = (posts0 & posts1).size
|
a = (posts0 & posts1).size
|
||||||
div = Math.sqrt(posts0.size * posts1.size)
|
div = Math.sqrt(posts0.size * posts1.size)
|
||||||
|
|||||||
Reference in New Issue
Block a user