Python scikit学习交叉验证不平衡数据的欠采样
如何在scikit learn中为交叉验证生成随机折叠 假设我们有一个类的20个样本,另一个类的80个样本,我们需要生成N个训练集和测试集,每个训练集的大小为30,在每个训练集中,我们有50%的第一类和50%的第二类 我找到了这个讨论()但我不知道如何获得折叠。理想情况下,我认为我需要这样一个功能:Python scikit学习交叉验证不平衡数据的欠采样,python,machine-learning,scikit-learn,Python,Machine Learning,Scikit Learn,如何在scikit learn中为交叉验证生成随机折叠 假设我们有一个类的20个样本,另一个类的80个样本,我们需要生成N个训练集和测试集,每个训练集的大小为30,在每个训练集中,我们有50%的第一类和50%的第二类 我找到了这个讨论()但我不知道如何获得折叠。理想情况下,我认为我需要这样一个功能: cfolds = np.cross_validation.imaginaryfunction( [list(itertools.repeat(1,20)), list(itertools.repea
cfolds = np.cross_validation.imaginaryfunction(
[list(itertools.repeat(1,20)), list(itertools.repeat(2,80))],
n_iter=100, test_size=0.70)
我遗漏了什么?在scikit中,没有直接的方法可以使用欠采样进行交叉验证,但有两种解决方法: 一, 使用
StratifiedCrossValidation
实现交叉验证,每个折叠中的分布反映了数据的分布,然后,您可以通过class_weight
参数实现分类器中的不平衡减少,该参数可以使auto
和欠采样/过采样类与其计数成反比,也可以传递带有显式权重的字典
二,
编写自己的交叉验证例程,使用它应该非常简单 分层DCV是一个不错的选择,但您可以使其更简单:
就这些。又快又好用 为什么不直接使用
random.sample()
?出于同样的原因,我们有所有其他交叉验证功能!?您可以定义自己的交叉验证生成器:它应该是一个对象,具有返回N
的\uuu len\uuu
和生成N
对列表(训练索引,测试索引)
。谢谢@larsmans,这正是我需要的。