ML之KG:基于自定义电影矩阵+知识图谱矩阵数据集利用基于知识图谱的推荐算法(基于匹配的相似度的方法)实现对用户进行Top电影推荐案例
ML之KG:基于自定义电影矩阵+知识图谱矩阵数据集利用基于知识图谱的推荐算法(基于匹配的相似度的方法)实现对用户进行Top电影推荐案例
目录
基于自定义电影矩阵+知识图谱矩阵数据集利用基于知识图谱的推荐算法(基于匹配的相似度的方法)实现对用户进行Top电影推荐案例
# 3.2、计算相关电影与用户历史行为中未观看的电影之间的相似度
基于自定义电影矩阵+知识图谱矩阵数据集利用基于知识图谱的推荐算法(基于匹配的相似度的方法)实现对用户进行Top电影推荐案例
设计思路
1、数据准备
首先,我们需要准备电影数据集和知识图谱数据集。
>> 电影数据集:包含电影的基本信息,如电影名称、导演、演员、类型、评分等等。我们可以从IMDB(互联网电影数据库)或者豆瓣电影等网站上爬取电影数据集。
>> 知识图谱数据集:包含电影之间的关系,如同一导演、同一演员、同一类型等等。我们可以使用OpenKG(开放知识图谱)等知识图谱构建工具来构建知识图谱数据集。
2、数据预处理
我们需要将电影数据集和知识图谱数据集进行预处理,将它们转化为适合推荐算法使用的格式。
>> 对于电影数据集:我们可以将其转化为一个电影-特征矩阵,其中每一行代表一个电影,每一列代表一个特征(如导演、演员、类型等),矩阵中的每一个元素代表该电影在该特征上的取值。
>> 对于知识图谱数据集:我们可以将其转化为一个电影-电影矩阵,其中每一行代表一个电影,每一列代表另一个电影,矩阵中的每一个元素代表两个电影之间的关系强度。
3. 推荐算法实现
我们可以使用基于知识图谱的推荐算法来实现电影推荐。该算法主要分为以下几个步骤:
(1)、找喜欢电影:根据用户的历史行为,如观看记录、评分记录等,找出用户喜欢的电影。
(2)、找相关电影:根据用户喜欢的电影,找出与之相关的电影,如同一导演、同一演员、同一类型等。
(3)、计算相似度:计算这些相关电影与用户历史行为中未观看的电影之间的相似度。
(4)、根据相似度,为用户推荐与其喜欢的电影相关的未观看电影。
# 1、定义数据集
使用电影-特征矩阵、电影-电影矩阵来表示电影数据集和知识图谱数据集
# 电影-特征矩阵
# 电影-电影矩阵
# 用户历史行为
import numpy as np
# ML之KG:基于自定义电影矩阵+知识图谱矩阵数据集利用基于知识图谱的推荐算法(基于匹配的相似度的方法)实现对用户进行Top电影推荐案例
# 1、定义数据集:使用电影-特征矩阵、电影-电影矩阵来表示电影数据集和知识图谱数据集
# 电影-特征矩阵
movie_features = np.array([
[1, 0, 0, 1, 0, 1],
[0, 1, 1, 0, 0, 1],
[1, 0, 0, 0, 1, 1],
[0, 1, 1, 1, 0, 0],
[0, 1, 0, 0, 1, 1],
[1, 0, 1, 1, 0, 0],
])
# 电影-电影矩阵
movie_similarity = np.array([
[1, 0.5, 0.2, 0.3, 0.4, 0.6],
[0.5, 1, 0.3, 0.2, 0.4, 0.5],
[0.2, 0.3, 1, 0.4, 0.5, 0.2],
[0.3, 0.2, 0.4, 1, 0.3, 0.1],
[0.4, 0.4, 0.5, 0.3, 1, 0.4],
[0.6, 0.5, 0.2, 0.1, 0.4, 1],
])
# 用户历史行为
user_behavior = np.array([1, 0, 0, 1, 0, 0])
# 3、模型训练与推理
# 3.1、找出用户喜欢的电影和与之相关的电影
找出与用户喜欢的电影相关的电影
liked_movies
[0 3]
related_movies
[0 1 2 3 4 5]
# 3.2、计算相关电影与用户历史行为中未观看的电影之间的相似度
similarity
[0.7 0.6 0.7 0.7]
# 3.3、根据相似度为用户推荐未观看电影
recommend_movies
[5 4 1 2]
# 3、模型训练与推理
# 3.1、找出用户喜欢的电影和与之相关的电影
liked_movies = np.where(user_behavior == 1)[0]
print('liked_movies \n',liked_movies)
# 找出与用户喜欢的电影相关的电影
related_movies = np.zeros((len(movie_features),))
for movie in liked_movies:
related_movies += movie_similarity[movie]
related_movies = np.where(related_movies > 0)[0]
print('related_movies \n',related_movies)
# 3.2、计算相关电影与用户历史行为中未观看的电影之间的相似度
not_watched_movies = np.where(user_behavior == 0)[0]
similarity = np.zeros((len(not_watched_movies),))
for i, movie in enumerate(not_watched_movies):
for j in related_movies:
similarity[i] += movie_similarity[movie][j] * user_behavior[j]
print('similarity \n',similarity)
# 3.4、根据相似度为用户推荐未观看电影
recommend_movies = not_watched_movies[np.argsort(similarity)[::-1]]
print('recommend_movies \n',recommend_movies)
相关文章
- 算法 时间复杂度概念及案例
- linux 恢复 raid5数据,Raid5数据恢复案例(raid阵列数据恢复方法)「建议收藏」
- 政府大数据应用案例,政府大数据治理方法[通俗易懂]
- commons-lang里面StringUtils方法说明以及案例
- 【愚公系列】2022年07月 Go教学课程 028-函数小结案例(通讯录)
- {Python}关于类属性、类方法和静态方法的综合案例
- 业务用例元模型-软件方法(下)第9章分析类图案例篇Part08
- 系统和系统实例-软件方法(下)第9章分析类图案例篇Part07
- 组织结构的建模-软件方法(下)第9章分析类图案例篇Part06-案例二-智能建模工具
- 软件方法(下)第9章分析类图案例篇Part05-案例二-智能建模工具
- 软件方法(下)第9章分析类图案例篇Part01
- VB实现按行读取文本文件的方法案例分享
- VB打开与保存txt文件的方法的案例分享
- C#实现UI控件输出日志的方法案例分享
- 热文回顾|【案例】国内首个微型挖掘机产线AGV柔性物流系统的规划与应用
- 性能测试案例与经验分享
- PyQt5可视化 7 饼图和柱状图实操案例 ①Qt项目的创建
- 【改善既有代码的设计】结合真实的代码案例场景,谈谈我的一些实施方法(RT-Thread技术论坛优秀文章)
- 智能合约DAPP系统,智能合约DAPP系统开发功能,智能合约DAPP流动性质押挖矿分红系统开发应用案例及源码
- 佛萨奇2.0波场链/币安链/马蹄链DAPP智能合约系统开发成功案例及源码交付
- 案例剖析:季度畅销榜、热门关键字等功能的开发实现
- 【CSS】浮动 ④ ( 浮动布局案例 - 电商布局模块 | 案例分析 | 布局测量摆放 | 浮动布局代码示例 )
- 【数字信号处理】线性常系数差分方程 ( 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 “ 线性时不变系统 “ 案例 | 使用递推方法证明 )
- 【数字信号处理】线性常系数差分方程 ( 根据 “ 线性常系数差分方程 “ 与 “ 边界条件 “ 确定系统是否是 “ 线性时不变系统 “ 案例二 | 修改边界条件 | 使用递推方法证明 )
- TiDB SQL调优案例之避免TiFlash帮倒忙
- linux防墙iptables详细介绍、配置方法与案例
- 排查Linux运维故障解析:案例精选与排查方法(linux运维故障案例)
- Linux系统实战:一步步掌握其真谛(linux系统案例精解)
- 使用Oracle存储过程实现数据查询(oracle存储过程案例)
- BPPAS与Oracle系统的集成案例研究(bppas oracle)
- 利用Redis搭建高效稳定项目实践(使用redis的项目案例)
- .NET中的异步编程-EAP/APM使用方法及案例介绍
- AndroidCheckBox的使用案例分析
- PHP中使用sleep造成mysql读取失败的案例和解决方法