如何通过索引定制sklearn交叉验证迭代器?

2024-06-01 06:23:04 发布

您现在位置:Python中文网/ 问答频道 /正文

Custom cross validation split sklearn类似,我想为GridSearchCV定义自己的拆分,为此我需要自定义内置的交叉验证迭代器。

我想把我自己的一组用于交叉验证的火车测试索引传递给GridSearch,而不是让迭代器为我确定它们。我浏览了sklearn文档页面上可用的cv迭代器,但找不到。

例如,我想实现这样的东西 数据有9个样本 对于2倍的简历,我创建了自己的一套训练测试指标

>>> train_indices = [[1,3,5,7,9],[2,4,6,8]]
>>> test_indices = [[2,4,6,8],[1,3,5,7,9]]
                 1st fold^    2nd fold^
>>> custom_cv = sklearn.cross_validation.customcv(train_indices,test_indices)
>>> clf = GridSearchCV(X,y,params,cv=custom_cv)

什么可以像customcv那样工作?


Tags: test定义customtrainfoldsklearn交叉cv
2条回答

实际上,交叉验证迭代器就是:迭代器。它们在每次迭代时都会返回一组训练/测试折叠。这应该对你有用:

custom_cv = zip(train_indices, test_indices)

另外,对于你提到的具体情况,你可以

import numpy as np
labels = np.arange(0, 10) % 2
from sklearn.cross_validation import LeaveOneLabelOut
cv = LeaveOneLabelOut(labels)

观察list(cv)产生

[(array([1, 3, 5, 7, 9]), array([0, 2, 4, 6, 8])),
 (array([0, 2, 4, 6, 8]), array([1, 3, 5, 7, 9]))]

实际上,上面的解决方案将每一行作为一个折叠返回,我们真正需要的是:

    [(train_indices, test_indices)] # for one fold

    [(train_indices, test_indices), # 1stfold
    (train_indices, test_indices)] # 2nd fold etc

相关问题 更多 >