用于交叉验证的不平衡数据的scikit-learn欠采样



如何在scikit-learn中生成随机折叠以进行交叉验证?

假设我们有一个类的 20 个样本,另一个类有 80 个样本,我们需要生成 N 个训练集和测试集,每个训练集的大小为 30,在每个训练集中,我们有 50% 的类 1 和 50% 的类 2。

我找到了这个讨论(https://github.com/scikit-learn/scikit-learn/issues/1362),但我不明白如何获得折叠。理想情况下,我认为我需要这样的函数:

cfolds = np.cross_validation.imaginaryfunction(
[list(itertools.repeat(1,20)), list(itertools.repeat(2,80))], 
n_iter=100, test_size=0.70)

我错过了什么?

没有直接的方法可以在scikit中使用欠采样进行交叉验证,但有两种解决方法:

1.

使用 StratifiedCrossValidation 实现交叉验证,每个折叠中的分布反映了数据的分布,然后您可以通过 class_weight 参数实现分类器的不平衡减少,该参数可以采用与计数成反比的auto和欠采样/过采样类,或者您可以传递具有显式权重的字典。

阿拉伯数字。

编写你自己的交叉验证例程,使用熊猫应该非常简单。

StratifiedCV 是一个不错的选择,但你可以让它更简单:

  1. 对与 1 类相关的数据运行随机抽样(您需要选择 15/20 样本)
  2. 2 类相同 (15/80)
  3. 重复100次或您需要多少。

就这样。快速可行!

相关内容

  • 没有找到相关文章

最新更新