如何在推荐系统中拆分训练/测试

数据挖掘 机器学习 数据集 推荐系统
2021-09-15 07:49:21

我正在使用 MovieLens10M 数据集,预测用户评分。如果我想公平地评估我的算法,我应该如何拆分我的训练数据和测试数据?

默认情况下,我相信数据被分成训练集和测试集,其中“测试”包含以前在训练集中看不到的电影。如果我的模型要求每部电影在训练集中至少看过一次,我应该如何拆分数据?我应该对所有数据取除 N 之外的每个用户的评分,并评估我在保留的 NxUser_num 评分上的表现吗?

1个回答

Leave-one-out交叉验证可能是解决这个问题的最直接的方法。如果您碰巧使用的模型需要大量时间来训练,那么将 n% 排除在外可能更合适。

该方法包括消除一个已知评级并尝试预测它。如果要删除 n% 的评分,只需随机选择它们,而不是选择每个用户评分的特定数量。并保持 n 非常小 - 大约 10% 或更少。

这是推荐系统交叉验证方法的一个很好的处理方法,协作推荐系统的评估方法一般来说:

Holdout 是一种将数据集分成两部分的方法:训练集和测试集。这些集合可以有不同的比例。在推荐系统的设置中,分区是通过从所有(或部分)用户中随机选择一些评级来执行的。选择的评分构成测试集,而其余的评分是训练集。这种方法也称为留空法。在 [17] 中,Sarwar 等人。将数据集分成 80% 的训练数据和 20% 的测试数据。在 [18] 中,选择了训练和测试之间的几个比率(从 0.2 到 0.95,增量为 0.05),并且对于每个比率,使用不同的训练和测试集重复实验十次,最后取平均结果。在 [13] 中,测试集由 10% 的用户制作:测试集中每个用户的 5 个评分被保留。

留一法是在留一法中设置k=1得到的一种方法。给定一个活跃用户,我们依次保留一个评分项目。学习算法在剩余数据上进行训练。保留元素用于评估预测的正确性,并对所有评估的结果进行平均,以计算最终的质量估计。这种方法有一些缺点,如过拟合和计算复杂度高。该技术适用于评估模型对已注册为系统成员的用户的推荐质量。卡里皮斯等人。[10] 通过为每个用户随机选择一个非零条目和剩余的条目进行训练,采用了简单版本的留一法创建测试集。在 [7] 中,Breese 等人。

保留方法的一个简单变体是 m 折交叉验证。它包括将数据集划分为 m 个独立的折叠(使折叠不重叠)。反过来,每个折叠仅使用一次作为测试集,其余折叠用于训练模型。根据[20] 和[11],建议的折叠数为10。该技术适用于评估新用户(即不属于模型的用户)加入系统时模型的推荐能力。通过选择合理的折叠数,我们可以计算均值、方差和置信区间。

希望这可以帮助!