我使用SKlearn KFold如下:
kf = KFold(10000, n_folds=5, shuffle=True, random_state=88)
但是,我想从训练折叠中排除某些指数(仅限)。怎么能实现这一目标?谢谢。
我想知道是否可以使用sklearn.cross_validation.PredefinedSplit来实现这一目标吗?
更新:KFold实例将与XGBoost一起用于xgb.cv的 folds 参数。 Python API here声明折叠应该是" KFold或StratifiedKFold实例"。
但是,我将尝试按上述方式生成KFolds,迭代列车折叠索引,修改它们,然后手动定义custom_cv,如下所示:
custom_cv = zip(train_indices, test_indices)
答案 0 :(得分:0)
如果你想从训练集中删除索引,但是如果它们在测试集中就没问题,那么这种方法就可以了:
kf_list = list(kf)
这将返回一个元组列表,这些元组可以与KFold实例相同的方式迭代。然后,您可以根据需要简单地修改索引,并且您的KFold实例将保持不变。您可以将KFold对象视为整数数组,表示索引,以及允许您动态生成折叠的方法。
这是源代码,非常简单,对于如何实现迭代器协议的重要部分:
https://github.com/scikit-learn/scikit-learn/blob/51a765a/sklearn/cross_validation.py#L254
def _iter_test_indices(self):
n = self.n
n_folds = self.n_folds
fold_sizes = (n // n_folds) * np.ones(n_folds, dtype=np.int)
fold_sizes[:n % n_folds] += 1
current = 0
for fold_size in fold_sizes:
start, stop = current, current + fold_size
yield self.idxs[start:stop]
current = stop