在推荐系统中将数据集拆分为训练集和测试集

我已经实现了一个基于矩阵分解技术的推荐系统。我想对其进行评估。

我想使用All-but-one协议的10折交叉验证(https://ai2-s2-pdfs.s3.amazonaws.com/0fcc/45600283abca12ea2f422e3fb2575f4c7fc0.pdf)。

我的数据集结构如下:

user_id,item_id,rating1,1,21,2,51,3,02,1,5...

我感到困惑的是如何拆分数据,因为我不能将某些三元组(用户,项目,评分)放入测试集中。例如,如果我选择三元组(2,1,5)放入测试集,而这是用户2唯一的评分,那么就不会有关于这个用户的其他信息,训练好的模型也无法为他预测任何值。

考虑到这种情况,我应该如何进行拆分呢?


回答:

你的基本逻辑是完全正确的:如果一个类别中只有一个观测值,你必须将其包含在训练集中,这样模型在这个类别中才有任何有效性。

然而,将输入数据分成这些类别取决于各种观测值之间的相互作用。你能否识别出像你提到的“唯一评分”这样的数据类别?当你发现其他小类别时,你也需要确保在你的训练数据中有足够的这些观测值。

不幸的是,这个过程很难自动化。大多数一次性应用只能从数据中手动挑选这些观测值,然后按照正常的分组分配其他观测值。这确实存在一个问题,即特殊情况在训练集中被过度代表,这可能会在训练模型时对正常情况有所影响。

你有能力在遇到后续数据时调整模型吗?这通常是处理稀疏输入类别的最佳方式。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注