第二章 利用用户行为数据
实验设计和算法评测
数据集
-
采用 GroupLens 提供的 MovieLens 数据集介绍和评测各种算法。
- MovieLens 数据集有3个不同的版本,选用中等大小的数据集。
- 该数据集包含6000多用户对4000多部电影的100万条评分。
- 该数据集是一个评分数据集,用户可以给电影评5个不同等级的分数(1~ 5分)。
-
研究隐反馈数据集中的 TopN 推荐问题,忽略数据集中的评分记录。也就是说,TopN推荐的任务是预测用户会不会对某部电影评分,而不是预测用户在准备对某部电影评分的前提下会给电影评多少分。
实验设计
- 协同过滤算法的离线实验一般如下设计。
-
首先,将用户行为数据集按照均匀分布随机分成 M 份(取 M=8),挑选一份作为测试集,将剩下的 M-1 份作为训练集。
-
然后在训练集上建立用户兴趣模型,并在测试集上对用户行为进行预测,统计出相应的评测指标。
-
为了保证评测指标并不是过拟合的结果,需要进行 M 次实验,并且每次都使用不同的测试集。
-
然后将 M 次实验测出的评测指标的平均值作为最终的评测指标。
# 下面的 Python 代码描述了将数据集随机分成训练集和测试集的过程: def SplitData(data, M, k, seed): test = [] train = [] random.seed(seed) for user, item in data: if random.randint(0, M) == k: test.append([user, item]) else: train.append([user, item]) return train, test
- 每次实验选取不同的 k k k( 0 ≤ k ≤ M − 1 0≤ k≤ M-1 0≤k≤M−1)和相同的随机数种子 seed,进行 M 次实验就可以得到 M 个不同的训练集和测试集,然后分别进行实验,用M次实验的平均值作为最后的评测指标。
- 这样做主要是防止某次实验的结果是过拟合的结果(over fitting),但如果数据集够大,模型够简单,为了快速通过离线实验初步地选择算法,也可以只进行一次实验。
-
评测指标
-
对用户 u u u 推荐 N N N 个物品(记为 R ( u