首页 > 其他分享 >实现基于内容的电影推荐系统—代码实现

实现基于内容的电影推荐系统—代码实现

时间:2024-04-07 23:11:38浏览次数:26  
标签:similarity 实现 代码 电影 movies 相似 data

引言

昨日在读论文的过程中讲到,要实现一种基于内容的推荐算法,那么今天他来了。

今天的算法实现基于Python的pandas数据处理第三方包和机器学习第三方包sklearn,关于sklearn的详细信息可以点击这里查看,关于pandas的详细信息可以点击这里查看

代码实现

import pandas as pd  # 导入数据处理包,pandas
from sklearn.feature_extraction.text import TfidfVectorizer  # TfidfVectorizer转换文本为特征向量
from sklearn.metrics.pairwise import cosine_similarity  # cosine_similarity计算余弦相似度

# 1. 数据预处理
data = pd.read_csv("movies.csv")  # 读取名为"movies.csv"的CSV文件,并将其存储在名为data的Pandas DataFrame中。

# 2. 特征工程
# 这段代码选择了一些特征("NAME"、"ACTORS"、"DIRECTORS"、"GENRES"),
# 并将它们组合成一个新的特征列"FEATURES"。使用apply函数和lambda表达式,
# 将每一行的这些特征值转换为字符串,并使用空格将它们连接起来。
selected_features = ["NAME", "ACTORS", "DIRECTORS", "GENRES"]
data["FEATURES"] = data[selected_features].apply(lambda x: ' '.join(x.astype(str)), axis=1)

# 3. 构建推荐模型
# 这段代码创建了一个TfidfVectorizer对象,并使用它对特征列"FEATURES"进行拟合转换。
# fit_transform方法将文本数据转换为TF-IDF特征矩阵,并将结果存储在features_matrix变量中。
tfidf = TfidfVectorizer()
features_matrix = tfidf.fit_transform(data["FEATURES"])

# 4. 用户输入特征
# 这行代码定义了用户的特征值。在这个示例中,用户特征值是一个字符串,包含了用户的偏好或兴趣。
# user_feature = "流浪地球 吴京/刘德华/李雪健/沙溢 郭帆 科幻/冒险/灾难"

# 5. 计算相似度
# 这行代码将用户特征值转换为特征矩阵。使用transform方法,根据之前拟合的TF-IDF向量化器,将用户特征值转换为与训练数据相同的特征表示。
user_feature_matrix = tfidf.transform([user_feature])
# 这行代码计算用户特征与每个电影特征之间的余弦相似度。使用cosine_similarity函数,
# 将用户特征矩阵和电影特征矩阵作为输入,计算它们之间的相似度。flatten方法将结果展平为一维数组。
similarity_scores = cosine_similarity(user_feature_matrix, features_matrix).flatten()

# 6. 获取相似电影推荐
# 这行代码根据相似度分数对电影进行排序,并返回排序后的索引。
# argsort函数返回按相似度分数升序排列的索引,然后使用切片操作[::-1]将其反转,得到按相似度分数降序排列的索引。
similar_movies_indices = similarity_scores.argsort()[::-1]  # 按相似度降序排列的索引

# 这行代码根据排序后的索引选择前5个电影作为推荐电影。使用iloc函数,根据索引选择对应的电影数据,并将结果存储在recommended_movies变量中。
recommended_movies = data.iloc[similar_movies_indices[:5]]  # 推荐前5个相似电影

# 7. 打印推荐结果
print("推荐电影:")
# 这段代码打印推荐电影的名称和相似度分数。使用iterrows函数遍历recommended_movies中的每一行,然后打印电影名称和对应的相似度分数。
for idx, movie in recommended_movies.iterrows():
     print(movie["NAME"], "- 相似度:", similarity_scores[idx])

其他信息

此外,有的小伙伴可能问我数据集从哪下载,这里给出下载地址,本程序所使用的数据集为大数据集,里面包含十万多条数据,如果训练时间太慢或者内存不够用,可以选取其中小的数据集。

我所使用到的数据集已经上传到云盘,需要的可以下载.链接:https://pan.baidu.com/s/10k5_LSL0H6HtCtODFMZIvg?pwd=2024 提取码:2024 --来自百度网盘超级会员V1的分享)
也可以去我的github地址下面下载,里面除了豆瓣影评以外,还有慕课评论等数据,整理不易,如果感觉可以请点个start哦。

结尾

好了,今天的分享就到这了,下次再见喽。

标签:similarity,实现,代码,电影,movies,相似,data
From: https://www.cnblogs.com/wephilos/p/18119956

相关文章

  • 基于Spring Boot的校园网上店铺的设计与实现
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、其他案例七、源码获取作者介绍:✌️大厂全栈码农|毕设实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️作者博客:曾几何时​​​​​​​......
  • 使用MySQL驱动方式实现读写分离
    前言MySQL在5.1.X版本之后增加了对multi-host的支持,我们可以使用它来实现读写分离。正常的jdbc连接格式为jdbc:mysql://ip:3306/testdb?characterEncoding=UTF-8multi-host的jdbc连接格式为jdbc:mysql:replication://ip:3306,ip:3307,ip:3308/testdb?useUnicode=t......
  • 恶意代码之静态分析【第四辑】
    防病毒系列22年很想学习的恶意代码分析,今天又翻到了这本书,还是被书中的第一个故事所吸引…一个公司反复被黑客攻击后,作为安全工程师的你只能告诉老板说要聘请外部安全专家来解决这个问题,这很难保住饭碗,如果有足够的智慧可以马上学习《恶意代码分析实战》,让你可以轻松应对......
  • 观察下面的代码,假设a的值为01000,则b的结果为()。
    inputsigned[4:0]a;outputsigned[4:0]b;assignb=a>>>1;选项:A、00100B、01100C、00010D、01010答案:A解析:对于有符号数来说:若符号位为1,使用>>>,高位补1;若符号位为0,使用>>>,高位补0;对于无符号数来说,无论最高位是什么,使用>>>,高位都补0。易错点:有符号(signed)、无符......
  • 大数据设计基于Hadoop技术下的校园二手交易系统的设计与实现
    一、项目介绍  在新冠疫情下,校园二手交易系统主要是用JAVA开发的。系统根据B/S架构设计,选用springboot框架开发,Hadoop技术,编码由Eclipse撰写,形成的数据储存在MySQL数据库中,服务器应用Tomcat。系统分成管理员控制模块和学生模块。管理员可以审批学生、物品分类、物品信息......
  • 基于YOLOv8v7v6v5和LPRNet的中文车牌识别系统(深度学习代码+UI界面实现+训练数据集)
    摘要:之前的中文车牌识别系统升级到v2.0版本,本文详细介绍使用深度学习实现的高效中文车牌识别系统完整代码,包括训练过程、原理介绍、模型对比、系统设计等部分。采用了最新的YOLOv8、YOLOv7、YOLOv6、YOLOv5目标检测算法进行车牌检测定位,并应用LPRNet识别车牌字符,另外支持车牌颜......
  • std::format 如何实现编译期格式检查
    C++20的std::format是一个很神奇、很实用的工具,最神奇的地方在于它能在编译期检查字符串的格式是否正确,而且不需要什么特殊的使用方法,只需要像使用普通函数那样传参即可。#include<format>inta=1;std::strings1=std::format("a:{}",a);//OKstd::strings2=s......
  • PHP代码审计——Day6-Frost Pattern
    漏洞解析classTokenStorage{publicfunctionperformAction($action,$data){switch($action){case'create':$this->createToken($data);break;case'delete':......
  • 微服务集成Spring Cloud Zipkin实现链路追踪并集成Dubbo
    1、什么是ZipKinZipkin是一个根据Google发表的论文“Dapper”进行开源实现的分布式跟踪系统。Dapper是Google公司内部的分布式追踪系统,用于生产环境中的系统分布式跟踪。Google在其论文中对此进行了解释,他们“构建了Dapper,以向Google开发人员提供有关复杂分布式系统行为......
  • 基于YOLOv8/v5和ByteTrack的多目标检测计数与跟踪系统(深度学习代码+UI界面实现+训练数
    摘要:之前的多目标检测与跟踪系统升级到现在的v2.0版本,本博客详细介绍了基于YOLOv8/YOLOv5和ByteTrack的多目标检测计数与跟踪系统。该系统利用最新的YOLOv8和YOLOv5进行高效目标检测,并通过ByteTrack算法实现精确的目标跟踪,适用于多种场景如人群监控、交通流量分析等。系统设计......