列车测试分割后不平衡数据的欠采样

sar*_*ika 4 machine-learning resampling train-test-split

我正在做一个数据不平衡的项目。我想使用随机欠采样来平衡数据。我很困惑是否应该在测试列车分割后进行欠采样,或者我应该先进行欠采样,然后再进行列车测试分割?

我的方法:

  1. 我使用训练测试分割来获取:X_train、y_train 用于训练,X_test 和 y_test 用于测试。
  2. 我将 X_train 和 y_train 组合成一个数据集并进行欠采样。
  3. 欠采样后,我根据 F1 分数进行交叉验证和模型选择,并使用 X_test.,Y_test 进行预测。

我的做法正确吗?如果我错了,请纠正我。

小智 6

让我们来看看你的方法:

我使用训练测试分割来获取:X_train、y_train 用于训练,X_test 和 y_test 用于测试。我将 X_train 和 y_train 组合成一个数据集并进行欠采样。

这是正确的。任何重采样技术都应仅应用于训练集。这将确保测试集反映现实。在此类测试集上获得的模型性能将是对模型泛化能力的良好估计。如果对整个数据集执行重采样,您的模型的性能将过于乐观。

欠采样后,我进行了基于F1的交叉验证和模型选择

如果没有代码,很难理解到底做了什么,但似乎您已经对已经重新采样的训练数据进行了交叉验证。这是错误的,在交叉验证期间应该在每个测试折叠上进行欠采样。让我们考虑一下 3 倍 CV 应该如何完成:

  1. 火车组分为 3 部分。2 次用于训练,1 次用于测试。
  2. 您对这 2 个折叠应用重采样,训练模型,然后估计未受影响的 1 个折叠的性能。
  3. 重复步骤 1-2,直到每次折叠都用作测试集。

因此,您应该做的是: 1. 将训练数据和测试数据分开。2. 对您的列车组执行 CV。仅在测试折叠上应用欠采样。3. 在 CV 的帮助下选择模型后,对训练集进行欠采样并训练分类器。4. 估计未受影响的测试集上的性能。