在推荐系统的惊喜包中,如何为给定用户打印出推荐的电影?



对于许多算法,例如SVD,现成的内置函数是:

  1. predictions = algo.fit(trainset).test(testset)-- 打印测试集的预测评分分数(因此对于用户已经给出评分的电影(

  2. predictions = algo.predict(uid, iid)-- 预测UID的IID评分

但是如何为用户打印top N推荐的电影(即使该用户尚未看过/给出某些电影的评级(。我试过了:"algo.fit(trainset).test(data)"但它给了我错误?

我也尝试使用 KNN 惊讶地打印用户的k nearest neighbors在惊喜包示例中,它有 u.item 文件,但如果我想使用自己的数据(一个包含 uid、iid 和评级的表(,如何计算用户和项目的"raw id"

此代码片段共享自 Surprise 文档常见问题解答,可能会有所帮助。

from collections import defaultdict
from surprise import SVD
from surprise import Dataset

def get_top_n(predictions, n=10):
"""Return the top-N recommendation for each user from a set of predictions.
Args:
predictions(list of Prediction objects): The list of predictions, as
returned by the test method of an algorithm.
n(int): The number of recommendation to output for each user. Default
is 10.
Returns:
A dict where keys are user (raw) ids and values are lists of tuples:
[(raw item id, rating estimation), ...] of size n.
"""
# First map the predictions to each user.
top_n = defaultdict(list)
for uid, iid, true_r, est, _ in predictions:
top_n[uid].append((iid, est))
# Then sort the predictions for each user and retrieve the k highest ones.
for uid, user_ratings in top_n.items():
user_ratings.sort(key=lambda x: x[1], reverse=True)
top_n[uid] = user_ratings[:n]
return top_n

# First train an SVD algorithm on the movielens dataset.
data = Dataset.load_builtin('ml-100k')
trainset = data.build_full_trainset()
algo = SVD()
algo.fit(trainset)
# Than predict ratings for all pairs (u, i) that are NOT in the training set.
testset = trainset.build_anti_testset()
predictions = algo.test(testset)
top_n = get_top_n(predictions, n=10)
# Print the recommended items for each user
for uid, user_ratings in top_n.items():
print(uid, [iid for (iid, _) in user_ratings])

最新更新