【发布时间】:2016-10-20 12:57:24
【问题描述】:
我使用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 实例”。
但是,我将尝试像上面那样生成 KFold,迭代训练折叠索引,修改它们,然后像这样手动定义 custom_cv:
custom_cv = zip(train_indices, test_indices)
【问题讨论】:
-
“将它们返回给 KFold 对象”是什么意思?你想完成什么?
-
KFold 将提供给 xgb.cv 的 XGBoost。在将 KFold 实例传递给 xgb 之前,我需要从训练折叠中删除某些索引。
-
我仍然不确定您所说的“将它们返回到 KFold 对象”是什么意思。
-
使用 KFold,我将训练数据拆分为训练数据和有效数据。我将把 KFold 实例传递给 XGBoost,它会在交叉验证期间使用它。但是,在我这样做之前,我只想从训练数据中排除一些特定的索引(不是有效数据)。另一种方法是使用 fpreproc,但它涉及修改 DMatrix 对象。希望澄清。如果有更好的方法可以从 KFold 拆分中排除某些指数,请告诉我。我将修改问题以澄清。
-
我对 XGBoost 不熟悉,但是如果您执行
kf_list = list(kf)之类的操作,它将返回一个元组列表,该列表将以与 KFold 对象相同的方式进行迭代,您可以删除从列表中的元组中获取您想要的索引。
标签: python scikit-learn cross-validation