从测试集派生特征?

数据挖掘 机器学习 神经网络 训练 过拟合
2022-02-23 04:32:20

我有一个由某些用户完成的选择数据集(在 A、B 和 C 之间),我想训练一个神经网络来预测选择。我分为训练集和测试集。

一个实例由:[UserId, some features, choice]组成。选择是目标变量。同一用户可以有多个实例(具有不同的功能和选择)。

我的假设是同一个用户经常做出相同的选择,所以我想要一个描述选择“频率”的特征(例如,用户 1 选择 A 60% 的时间)。我可以从哪个数据集计算这个频率?

  • 我不能使用训练集,否则会过度拟合(频率=0,模型确定它从未在训练集中被选中)。
  • 我在不同时期没有额外的选择数据集(这将是理想的)。
  • 我可以从测试集中计算频率吗?这样,我实际上是在训练一个模型(在训练集上),基于不同时期(测试集)的频率,这就是我想要的。它是否过拟合了测试集中的表现?我认为不会,因为模型是在训练集上训练的。我的结果证实了两组的相似表现。
1个回答

我认为这个问题取决于你期望模型学习什么:

  • 如果模型应该“了解”它在训练期间看到的用户,即利用用户 ID 来推断特定用户的特定选择,那么我看不出添加这种频率特征的意义:模型已经“知道”这个用户倾向于做出什么样的选择,并且它应该只从训练集中知道它。缺点:对于在训练期间未见过的任何新用户/唯一用户,模型可能不得不回退到通用预测。
  • 如果不使用用户 ID(从功能中删除),那么我认为添加频率功能是有意义的。我认为这主要是一个特征工程问题:假设有 3 个特征表示到目前为止该用户选择了选项 A、B 和 C 的次数。计数是根据该用户可用的任何先前数据进行的。当然,这是假设可以在测试时计算相同的特性(等效地,在生产环境中)。

因此,在第二个选项中,特征存在于关于什么是训练集和什么是测试集的任何问题之前。但是它们引入了数据泄漏的潜在风险,所以我要做的是根据用户将训练集和测试集分开,即确保训练集和测试集中的用户不重叠。