我已经实现了基于矩阵分解技术的推荐系统.我想评估它.
我想使用All-but-one协议(https://ai2-s2-pdfs.s3.amazonaws.com/0fcc/45600283abca12ea2f422e3fb2575f4c7fc0.pdf)进行10倍交叉验证.
我的数据集具有以下结构:
user_id,item_id,rating
1,1,2
1,2,5
1,3,0
2,1,5
...
考虑如何分割数据让我感到困惑,因为我不能在测试集中添加一些三元组(用户,项目,评级).例如,如果我选择测试集的三元组(2,1,5)并且这是用户2所做的唯一评级,则不会有关于此用户的任何其他信息,并且训练的模型将不会预测任何他的价值观.
考虑到这种情况,我应该如何进行拆分?
最佳答案 你的基本逻辑是完全正确的:如果你在一个类中只有一个观察,你必须在模型的训练集中包含那个在该类中具有任何有效性的观察.
但是,将输入划分为这些类取决于各种观察之间的相互作用.您能否识别出数据类别,例如您提到的“唯一评级”问题?当您找到其他小班时,您还需要确保在训练数据中有足够的观察结果.
不幸的是,这是一个自动化的过程.大多数一次性应用程序只需从数据中手工挑选这些观察结果,然后按正常分区分配其他应用程序.这确实存在一个问题,即特殊情况在训练集中过度表示,这可能会在训练模型时略微偏离正常情况.
您是否有能力在遇到以后的数据时调整模型?这通常是处理稀疏输入类的最佳方法.