我有一个不 balancer 的数据集,所以我有一个过采样策略,我只在训练数据时应用 . 我想使用像 GridSearchCV
或 cross_val_score
这样的scikit-learn类来探测或交叉验证我的估算器上的一些参数(例如SVC) . 但是我看到你要么传递cv折叠的数量,要么传递标准的交叉验证生成器 .
我想创建一个自定义cv生成器,所以我得到并分层5折并仅过滤我的训练数据(4倍)并让scikit-learn通过我的估计器的参数网格查看并使用剩余的折叠进行验证 .
提前致谢 .
4 回答
交叉验证生成器返回一个长度为
n_folds
的可迭代,其中每个元素都是一个2元组的numpy 1-d数组(train_index, test_index)
,其中包含该交叉验证运行的测试和训练集的索引 .因此,对于10倍交叉验证,您的自定义交叉验证生成器需要包含10个元素,每个元素包含一个包含两个元素的元组:
该运行的训练子集的索引数组,覆盖了90%的数据
该运行的测试子集的索引数组,覆盖10%的数据
我正在研究一个类似的问题,我为我的数据的不同折叠创建了整数标签 . 我的数据集存储在Pandas数据框
myDf
中,其中交叉验证标签的列为cvLabel
. 我构建自定义交叉验证生成器myCViterator
如下:Scikit-Learn提供了一个解决方法,使用他们的Label k-fold迭代器:
要在过采样的情况下使用此迭代器,首先,您可以在数据框中创建一个列(例如
cv_label
),该列存储每行的索引值 .然后,您可以应用过采样,确保在过采样中复制
cv_label
列 . 此列将包含过采样数据的重复值 . 您可以从这些标签创建单独的系列或列表,以便以后处理:请注意,在运行交叉验证器/分类器之前,您需要从数据框中删除此列 .
将数据分成要素(不包括
cv_label
)和标签后,创建LabelKFold
迭代器并运行所需的交叉验证功能:我有一个类似的问题,这个快速的黑客正在为我工作:
这个上采样(有替换)的少数类为 balancer 的
(k-1)
-折叠训练集,但是让测试集不 balancer . 这似乎与sklearn.model_selection.GridSearchCV以及需要CV生成器的其他类似类一起使用 .