知识图谱实战应用3-知识图谱中的电影推荐算法

大家好,我是微学AI,今天给大家讲一下知识图谱中的电影推荐算法。主要利用奇异值分解(SVD)算法进行应用。

一、奇异值分解(SVD)

SVD(奇异值分解)是一种常见的线性代数算法,用于将一个矩阵分解为三个矩阵的乘积。原来SVD的主要应用领域包括图像处理、信号处理、信息检索等。

给定一个矩阵A,SVD将其分解为U、S和V三个矩阵的乘积,可以表示为A=USV^T,其中U和V都是正交矩阵,S是一个对角矩阵,其中对角线上的元素称为奇异值。SVD可以将原始矩阵A分解成多个低秩矩阵的乘积,从而对高维数据进行降维和特征提取,例如图片的主题识别、用户偏好和相关性分析等应用。在推荐系统中,SVD可以用于处理稀疏用户-电影评分矩阵,通过分解矩阵来预测用户对未评分电影的喜好程度,并提供个性化的推荐列表。

 举一个例子说明:一个矩阵是如何进行奇异值分解的。矩阵A定义为:

二、利用SVD实现推荐算法

一个基于SVD的知识图谱的电影推荐算法的步骤:

构建知识图谱:为电影库中的每个电影创建一个节点,并为它们之间的相似关系创建有向边。相似性可以通过计算两个电影的共同观众数、评分差异、演员、导演、电影流派等因素来衡量。

推导用户向量:对于每个用户,基于他们观看的电影和对应的评分来构建一个向量,包括每个电影的得分或者未评分。

使用SVD分解用户向量:对于每个用户向量,我们可以应用SVD将其分解为三个独立的矩阵:U、S和V。

进行矩阵近似:基于SVD分解的结果,我们可以使用矩阵近似来填充用户未评分的电影得分。这可以通过将U、S和V乘起来得到一个新的矩阵。

应用SVD重构矩阵产生推荐列表:基于相似性衡量,我们可以根据计算出的矩阵来推荐给用户可能感兴趣的电影。我们可以将所有电影的向量与用户向量进行相似性计算,然后在最相似的电影中选择最高得分的电影作为推荐。

通过这个基于知识图谱和SVD的推荐算法,我们可以为每个用户提供个性化的电影推荐。这种方法不仅可以优化推荐系统的效率,而且可以结合许多不同的信息源来提高推荐的准确性和多样性。

三、代码实现部分

import pandas as pd
from surprise import Dataset, Reader
from surprise import SVD
from surprise.model_selection import train_test_split

# 读取数据
data = pd.read_csv('ratings.csv')

读取数据文件 ratings.csv,这个数据是整理好的,也可以从知识图谱中获取用户给某个电影id的评分,数据表格结构:

userId movieId rating
1 2 3.5
1 29 3.5
2 2 4
2 5 2.4
3 1 4.5
3 2 2.4
4 5 3.4
4 20 3.5
5 3 3.3
5 2 3.7
6 1 3.9
6 2 3.6
6 29 3.5
6 22 4.5

获取数据集:

# 设置reader
reader = Reader(rating_scale=(0, 5))

# 加载数据集
dataset = Dataset.load_from_df(data[['userId', 'movieId', 'rating']], reader)

# 划分数据集
trainset, testset = train_test_split(dataset, test_size=0.2)

# 训练模型
algo = SVD()
algo.fit(trainset)

# 预测评分
predictions = algo.test(testset)

# 为用户推荐电影
userId = 1
user_movies = data[data['userId'] == userId]['movieId']
user_unrated_movies = data[~data['movieId'].isin(user_movies)]['movieId']
user_unrated_movies = list(set(user_unrated_movies))[:10]
user_unrated_movies_with_pred = [(movieId, algo.predict(userId, movieId).est) for movieId in user_unrated_movies]
user_unrated_movies_with_pred.sort(key=lambda x: x[1], reverse=True)
top_n = user_unrated_movies_with_pred[:5]
print("Top 5 recommended movies for user", userId, ":", top_n)

为id为1的用户推荐以下电影:运行结果如下:

Top 5 recommended movies for user 1 : [(3, 3.7906799242225158), (1, 3.7335070393386838), (20, 3.645978328959462), (22, 3.600291294993506), (5, 3.4568901667773586)]

有什么问题和需要合作的请私信,后续更多人工智能相关知识呈现给大家!请持续关注!

猜你喜欢

转载自blog.csdn.net/weixin_42878111/article/details/129811307