我有一个不平衡的分类问题。
我首先将我的数据划分为训练集(数据集 A)和测试集(数据集 B)。
然后,我使用 R 包ROSE同时对数据集 A 中的多数类进行欠采样,并对少数类进行过采样。这产生了一个平衡集(数据集 C),它的行数与数据集 A 一样多。
我已经在数据集 C 上训练了我的模型并计算了训练AUC。我现在想使用 k 折交叉验证来估计(即不使用数据集 B)测试AUC。我应该如何最好地做到这一点?
我有一个不平衡的分类问题。
我首先将我的数据划分为训练集(数据集 A)和测试集(数据集 B)。
然后,我使用 R 包ROSE同时对数据集 A 中的多数类进行欠采样,并对少数类进行过采样。这产生了一个平衡集(数据集 C),它的行数与数据集 A 一样多。
我已经在数据集 C 上训练了我的模型并计算了训练AUC。我现在想使用 k 折交叉验证来估计(即不使用数据集 B)测试AUC。我应该如何最好地做到这一点?
测试 AUC 是您在预测保留的测试集(数据集 B)后找到的 AUC。
您已将数据集拆分为 A = 训练集和 B = 测试集。然后,您在数据集 A 上使用了下采样(这是有问题的,但我不会深入讨论)来获得您所说的数据集 C。然后您应该在数据集 C 上训练分类器并评估其在数据集 B 上的性能。
如果您指的是验证集(即不是测试集 = 数据集 B),那么您需要做的事情如下:将数据集拆分为 A = 外部训练,B = 测试。然后,再次将 A 拆分为 C = 内部训练,D = 验证。对数据集 C 下采样,仅在 C 上训练分类器,然后在 D 上进行验证。一旦优化到 D,然后下采样 A,在 A 上重新训练分类器(使用与 C 和 D 完全相同的模型构建过程),以及在 B 上报告您最终的、无偏的性能度量。如果 AUC 分数不稳定,请重复整个过程,以获得对最终模型性能的更多估计。
由于您的数据不平衡,因此我强烈建议您在创建验证集和测试集时进行分层抽样。
交叉验证通常在训练数据集上完成,而不是在测试集上测量计算的方法。
如果您想对训练数据集使用 5 折交叉验证,这意味着您的训练数据集将被分成 5 个部分并在 4 部分数据上进行训练,而在其余部分上进行 5 次测试。来自 1 部分的预测(5 次)将用于计算所选度量作为交叉验证分数。
ROSEpackage 貌似没有提供交叉验证功能,但是你可以自己编写函数来实现:
for( i in 1:5){
train on 80% data
predict on 20% data and save prediction
}