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

相似度量是用于生成个性化推荐的重要件,些推荐允量化两个目的相似程度(或者我稍后会看到,两个用偏好的相似程度)。

https://i-blog.csdnimg.cn/blog_migrate/6c6bac14a9b7eccd499adc6d70d5e7cb.png

Jaccard指数是01之间的数字,表示两组的相似程度。

  1. 两个相同集合的Jaccard指数是1.
  2. 如果两个集合没有公共元素,则Jaccard索引为0.
  3. 通过将两个集合的交集的大小除以两个集合的并集来计算Jaccard

我们可以计算电影类型集的Jaccard指数,以确定两部电影的相似程度。

哪些电影是跟《盗梦空间》基于Jaccard指数最相似的?

MATCH (m:Movie {title: "Inception"})-[:IN_GENRE]->(g:Genre)<-[:IN_GENRE]-(other:Movie)
WITH m, other, COUNT(g) AS intersection, COLLECT(g.name) AS i
MATCH (m)-[:IN_GENRE]->(mg:Genre)
WITH m,other, intersection,i, COLLECT(mg.name) AS s1
MATCH (other)-[:IN_GENRE]->(og:Genre)
WITH m,other,intersection,i, s1, COLLECT(og.name) AS s2

WITH m,other,intersection,s1,s2

WITH m,other,intersection,s1+filter(x IN s2 WHERE NOT x IN s1) AS union, s1, s2

RETURN m.title, other.title, s1,s2,((1.0*intersection)/SIZE(union)) AS jaccard ORDER BY jaccard DESC LIMIT 100

分析:

1. 首先查询出电影盗梦空间和与它流派相关性的电影集other

2. count(g) 其实就是电影盗梦空间和电影集other 的流派交集的数量(共同的流派)

3. s1+filter(x IN s2 WHERE NOT x IN s1) AS union  此 union 即是s1 和 s2 的并集(集合s1 加上 s2中不包含s1 的那部分)

4. ((1.0*intersection)/SIZE(union)) AS jaccard  根据上面的Jaccard指数公式计算所得的指数。

运行结果如下:

 

我们可以将这个相同的方法应用于电影的所有特征(如流派、演员、导演等):

MATCH (m:Movie {title: "Inception"})-[:IN_GENRE|:ACTED_IN|:DIRECTED]-(t)<-[:IN_GENRE|:ACTED_IN|:DIRECTED]-(other:Movie)
WITH m, other, COUNT(t) AS intersection, COLLECT(t.name) AS i
MATCH (m)-[:IN_GENRE|:ACTED_IN|:DIRECTED]-(mt)
WITH m,other, intersection,i, COLLECT(mt.name) AS s1
MATCH (other)-[:IN_GENRE|:ACTED_IN|:DIRECTED]-(ot)
WITH m,other,intersection,i, s1, COLLECT(ot.name) AS s2

WITH m,other,intersection,s1,s2

WITH m,other,intersection,s1+filter(x IN s2 WHERE NOT x IN s1) AS union, s1, s2

RETURN m.title, other.title, s1,s2,((1.0*intersection)/SIZE(union)) AS jaccard ORDER BY jaccard DESC LIMIT 100

 

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
这个Python期末大作业是一个基于协同过滤算法的电影推荐系统,采用了neo4j数据库来存储和查询电影数据。协同过滤算法是一种利用用户的历史行为和兴趣来进行推荐的方法,它可以根据用户的喜好和其他用户的相似度推荐用户可能感兴趣的电影。 这个电影推荐系统的实现包括以下几个步骤:首先,通过爬虫从网上获取电影的相关信息,比如电影的名字、导演、演员、类型等等,并将这些信息存储到neo4j数据库中。然后,根据用户的历史行为和评分数据,计算用户之间的相似度,并将相似度的结果也存储到数据库中。接下来,当用户登录系统并选择了一个电影,系统会根据用户喜欢的电影类型和其他用户的相似度,从数据库中查找可能感兴趣的电影,并进行推荐。 通过采用neo4j数据库,这个电影推荐系统可以更高效地存储和查询大数据的电影信息和用户数据。neo4j是一个图数据库,它的存储结构和图的结构相似,可以更好地支持复杂的关系型数据的存储和查询。同时,neo4j也提供了丰富的查询语言和API,方便我们实现各种复杂的查询和推荐算法。 总而言之,这个基于协同过滤算法的电影推荐系统使用了neo4j数据库来存储和查询电影数据,通过分析用户的历史行为和其他用户的相似度来进行推荐,可以更好地满足用户的个性化需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员imHou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值