我想使用 Kfold 交叉验证绘制 ROC 曲线。但是,scikit-learn
页面上给出的代码适用于StratifiedKfold
。因此,当我将StratifiedKfold
改变Kfold
时,它在情节中给了我None
结果。可能是什么问题?
示例代码位于ScikitLearn
我Kfold
更改了StratifiedKfold
,但它不起作用。
在切割折叠之前打乱数据:
cv = KFold(n_splits=6, shuffle=True)
解释:
StratifiedKFold
切割折叠,使每个折叠中的类比例与整个数据集中的类比例大致相同。 Kfold
不会这样做,只是按照样本在数据集中出现的顺序从样本中剪切折叠。因此,您可能会也可能不会在所有折叠中获得所有当前类。在这种情况下或Iris
数据集中,样本按类排序,这可以从目标y
中看到:
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
因此,在 6 折拆分的情况下,大多数时候你只能得到一个折叠类,并且整个模型训练中断。洗牌允许 KFold 在每次折叠中拾取两个类,并且一切正常。