Neo4j 做推薦 (12)—— 協同過濾(基於鄰域的推薦)
阿新 • • 發佈:2018-11-16
kNN——K近鄰
現在我們有了一種基於偏好查詢類似使用者的方法,下一步是允許每個k個最相似的使用者投票選擇應該推薦的專案。
主要有:
“與我的電影最相似的電影中有10個使用者是誰?他們評價的電影有多高,我還沒看過呢?”
使用Pearson相似度的kNN電影推薦
MATCH (u1:User{name:"Cynthia Freeman"})-[r:RATED]->(m:Movie) WITH u1,avg(r.rating) AS u1_mean MATCH (u1)-[r1:RATED]-> (m:Movie)<-[r2:RATED]-(u2) WITH u1, u1_mean, u2, COLLECT({r1:r1,r2:r2}) AS level WHERE size(level)> 10 MATCH (u2)-[r:RATED]->(m:Movie) WITH u1,u1_mean,u2,avg(r.rating)AS u2_mean,level UNWIND level AS r WITH sum((r.r1.rating-u1_mean) * r.r2.rating-u2_mean))AS nom, sqrt(sum((r.r1.rating - u1_mean)^ 2)* sum((r.r2.rating - u2_mean)^ 2))AS denom, u1,u2 WHERE denom <> 0 WITH u1,u2,nom / denom AS pearson ORDER BY pearson DESC LIMIT 10 MATCH(u2)-[r:RATED]->(m:Movie)WHERE NOT EXISTS((u1)-[:RATED]->(m)) return m.title,SUM(pearson * r.rating) AS score ORDER BY score DESC LIMIT 25