1. 程式人生 > >Neo4j 做推薦 (10)—— 協同過濾(餘弦相似度)

Neo4j 做推薦 (10)—— 協同過濾(餘弦相似度)

餘弦距離:

Jaacard相似度對於比較電影很有用,實際上是比較兩組(型別、演員、導演等)。但是對於電影評級,每個關係都有一個我們可以考慮的權重。

餘弦相似度:

http://guides.neo4j.com/sandbox/recommendations/img/cosine.png

兩個使用者的餘弦相似度將告訴我們兩個使用者對電影的偏好有多相似。具有高餘弦相似度的使用者將具有類似的偏好。

根據餘弦相似度,找到與Cynthia Freeman 最相似偏好的使用者。

// Most similar users using Cosine similarity
MATCH (p1:User {name: "Cynthia Freeman"})-[x:RATED]->(m:Movie)<-[y:RATED]-(p2:User)
WITH COUNT(m) AS numbermovies, SUM(x.rating * y.rating) AS xyDotProduct,
SQRT(REDUCE(xDot = 0.0, a IN COLLECT(x.rating) | xDot + a^2)) AS xLength,
SQRT(REDUCE(yDot = 0.0, b IN COLLECT(y.rating) | yDot + b^2)) AS yLength,
p1, p2 WHERE numbermovies > 10
RETURN p1.name, p2.name, xyDotProduct / (xLength * yLength) AS sim
ORDER BY sim DESC LIMIT 100;