训练测试拆分后不平衡数据的欠采样
Posted
技术标签:
【中文标题】训练测试拆分后不平衡数据的欠采样【英文标题】:Undersampling for imbalance data after train test split 【发布时间】:2020-09-09 13:17:40 【问题描述】:我是机器学习的新手,目前正在从事一个包含不平衡数据的项目。 我想使用随机欠采样来平衡数据。 我很困惑是否应该在测试训练拆分后进行欠采样,还是应该先进行欠采样,然后再进行训练测试拆分?
我的方法: 1. 我使用训练测试拆分得到:X_train、y_train 用于训练,X_test 和 y_test 用于测试。 2. 我将 X_train 和 y_train 组合成一个数据集并进行欠采样。 3. 欠采样后,基于F1分数进行交叉验证和模型选择,并使用X_test.,Y_test进行预测。
我的方法正确吗? 如果我错了,请纠正我。
【问题讨论】:
你能提供班级的比例吗?还有样本总数 看来这两种操作顺序对于它们各自的问题都是有意义的。您能告诉我们更多关于您要解决的问题吗?这限制了你的假设。 Class 0 : 50140, Class 1 : 4668。我想保留一个测试数据,它不是欠采样数据集的子集,用于检查模型的准确性。这就是我想做第一次训练测试拆分的原因,我将对训练数据进行欠采样并使用测试数据检查准确性。 【参考方案1】:让我们来看看你的方法:
我使用训练测试拆分得到:X_train、y_train 用于训练,X_test 和 y_test 用于测试。我将 X_train 和 y_train 组合成一个数据集并进行欠采样。
没错。任何重采样技术都应仅应用于训练集。这将确保测试集反映现实。在这样的测试集上获得的模型性能将很好地估计您的模型的泛化能力。如果对整个数据集执行重采样,您的模型的性能将过于乐观。
欠采样后,我基于F1进行交叉验证和模型选择
如果没有代码,很难理解究竟做了什么,但您似乎已经对已经重新采样的火车数据进行了交叉验证。这是错误的,在交叉验证期间应该对每个测试折叠进行欠采样。让我们考虑一下 3 倍 CV 的做法:
-
火车套装分为 3 折。 2 折用于训练,1 用于测试。
您对这 2 个折叠应用重新采样,训练您的模型,然后估计未触及的 1 折叠的性能。
重复步骤 1-2,直到每个折叠都用作测试集。
因此,您应该做的是: 1. 在训练和测试上拆分数据。 2. 在您的火车上执行 CV。仅在测试折叠上应用欠采样。 3. 在 CV 的帮助下选择模型后,对您的训练集进行欠采样并训练分类器。 4. 估计在未触及的测试集上的性能。
【讨论】:
1.在训练和测试上拆分数据。 2. 在您的火车上执行 CV。仅在测试折叠上应用欠采样。 3. 在 CV 的帮助下选择模型后,对您的训练集进行欠采样并训练分类器。 4. 估计在未触及的测试集上的性能。可以说,拆分后我的数据集是:X_train、Y_train 和 X_test、Y_test。现在,在第 2 步:我应该对 X_train、Y_train 3 执行 CV。选择分类器后,我将对 X_train、Y_train 进行欠采样,然后进行训练。 4. 然后我使用 X_test 进行预测并估计性能。请纠正我。以上是关于训练测试拆分后不平衡数据的欠采样的主要内容,如果未能解决你的问题,请参考以下文章