0

我正在尝试根据用户的评分为用户实施推荐系统。我认为是最常见的一种。我读了很多书,并入围了 Surprise,这是一个基于 python-scikit 的推荐系统。

虽然能够导入数据并运行预测,但它并不完全符合我的要求。

现在我所拥有的:我可以传递 user_id、item_id 和评级,并获得该用户给出我通过的评级的概率。

我真正想做的事情:传递一个 user_id,然后根据数据获取该用户可能会高度喜欢/评价的项目列表。

from surprise import Reader, Dataset    
from surprise import SVD, evaluate

# Define the format
reader = Reader(line_format='user item rating timestamp', sep='\t')
# Load the data from the file using the reader format
data = Dataset.load_from_file('./data/ecomm/e.data', reader=reader)    

# Split data into 5 folds
data.split(n_folds=5)

algo = SVD()

# Retrieve the trainset.
trainset = data.build_full_trainset()
algo.fit(trainset)

//Inputs are: user_id, item_id & rating.
print algo.predict(3, 107, 1)

数据文件中的示例行。

第一列是 user_id,第二列是项目 id,第三列是评分,然后是时间戳。

196 242 3   881250949
186 302 3   891717742
22  377 1   878887116
244 51  2   880606923
166 346 1   886397596
298 474 4   884182806
115 265 2   881171488
253 465 5   891628467
305 451 3   886324817
6   86  3   883603013
4

1 回答 1

1

您需要遍历item_id 单个的所有可能值user_id并预测其评级。然后,您收集评价最高的项目以推荐给该用户。

但请确保user_id,item_id对不在训练数据集中。类似这个功能的东西在这里

build_anti_testset

返回可在 test() 方法中用作测试集的评级列表。

Ratings是所有不在trainset中的ratings,即用户u已知,item i已知,但是ratingrui不在trainset中的所有ratings。由于 rui 是未知的,它要么被填充值替换,要么被假定为等于所有评级 global_mean 的平均值。

之后,您可以将这些对传递给test()orpredict()方法并收集评分,并从该数据中为特定用户获取前 N 个推荐。

这里给出了一个例子:

于 2018-10-10T09:54:51.540 回答