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

余弦距离:

Jaacard相似度对于比较电影很有用,实际上是比较两组(类型、演员、导演等)。但是对于电影评级,每个关系都有一个我们可以考虑的权重。

余弦相似度:

余弦相似性公式

两个用户的余弦相似度将告诉我们两个用户对电影的偏好有多相似。具有高余弦相似度的用户将具有类似的偏好。

根据余弦相似度,找到与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;

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

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

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

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

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

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

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

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

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

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

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

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

你可能感兴趣的:(Neo4j 做推荐 (11)—— 协同过滤(余弦相似度))