引言
昨日在读论文的过程中讲到,要实现一种基于内容的推荐算法,那么今天他来了。
今天的算法实现基于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