我意识到这可以被认为是这个问题的重复,在训练集和测试集中使用同一个人的样本是否被认为是数据泄漏?,其中规定“测试数据不应以任何方式与训练数据相关联”,以防止数据泄露。但是,如果无法在火车和测试集中拆分数据集,并且它们之间没有任何联系,我应该如何继续?
我的数据集包含 839 个时间序列样本,我想根据 14 个类对其进行分类。然而,这是一个不平衡的数据集,如图1所示。数据集由 16 名志愿者的录音组成。不幸的是,对于其中一些课程,数据仅适用于一些志愿者。图2显示,对于某些班级,只有一名特定志愿者的数据可用。在图中,数字给出了可用于该特定类别的样本的志愿者数量。
我想使用单独的测试集验证我的机器学习模型。我最初的想法是将一名志愿者的数据留给测试集。但如上所述,这是不可能的,因为对于两个班级,只有一名志愿者提供数据。我能想出的第二个最佳方法是将来自一名志愿者的数据(其中有 4 个类别中的 12 个可用样本)与两个少数类别的选定几个样本放在一起,这些样本不存在于这个特定的样本中志愿者。这意味着我的测试集将包含 14 个类中的 12 个与训练集完全分离的样本。其他 2 个班级的测试集样本将来自训练模型的同一志愿者(因为这些班级只有一名志愿者的数据可用)。
如上所述,我知道这会引入某种形式的数据泄漏。是否有一个不会引入数据泄漏的好选择(除了添加更多数据)?如果不是,sklearn 的 StratifiedKFold 方法是否是验证我的模型的好选择?(使用 StratifiedKFold 我将使用管道以便仅对折叠的训练部分执行预处理。)
对于这个特定案例的数据泄漏,我真的很高兴得到答案和更多解释。