Neo4j

Neo4j 做推荐 (12)—— 协同过滤(基于邻域的推荐)

2019-08-18  本文已影响0人  程序员imHou

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

Neo4j 做推荐 (1)—— 基础数据

Neo4j 做推荐 (2)—— 基于内容的过滤

Neo4j 做推荐 (3)—— 协同过滤

Neo4j 做推荐 (4)—— 基于内容的过滤(续)

Neo4j 做推荐 (5)—— 基于类型的个性化建议

Neo4j 做推荐 (6)—— 加权内容算法

Neo4j 做推荐 (7)—— 基于内容的相似度量标准

Neo4j 做推荐 (8)—— 协同过滤(利用电影评级)

Neo4j 做推荐 (9)—— 协同过滤(人群的智慧)

Neo4j 做推荐 (10)—— 协同过滤(皮尔逊相似性)

Neo4j 做推荐 (11)—— 协同过滤(余弦相似度)

Neo4j 做推荐 (12)—— 协同过滤(基于邻域的推荐)

上一篇 下一篇

猜你喜欢

热点阅读