嵌套交叉验证的使用


14

Scikit Learn的“模型选择”页面提到了嵌套交叉验证的使用:

>>> clf = GridSearchCV(estimator=svc, param_grid=dict(gamma=gammas),
  ...                    n_jobs=-1)  
>>> cross_validation.cross_val_score(clf, X_digits, y_digits)

并行执行两个交叉验证循环:一个由GridSearchCV估计器设置gamma,另一个由cross_val_score来测量估计器的预测性能。所得分数是对新数据的预测分数的无偏估计。

据我了解,clf.fit将原生使用交叉验证来确定最佳伽玛值。在那种情况下,为什么我们需要使用上面给出的嵌套cv?该说明提到嵌套的cv会生成预测分数的“无偏估计”。难道不是clf.fit吗?

另外,我无法从该cross_validation.cross_val_score(clf, X_digits, y_digits)过程中获得clf最佳估计。您能告诉我该怎么做吗?

Answers:


18

C

GC Cawley和NLC Talbot,模型选择中的过拟合和性能评估中的后续选择偏差,《机器学习研究期刊》,2010年。11,第2079-2107页,2010年7月。(http://jmlr.org/papers/volume11/cawley10a/cawley10a.pdf

可以在本文中找到带有说明性示例和实验评估的偏见的原因,但本质上,关键是,如果以任何方式使用性能评估标准对模型进行选择,则这些选择基于(i)真正改善了泛化性能,并且(ii)在其上评估性能评估标准的特定数据样本的统计特性。换句话说,产生偏差是因为调整超参数时可能(太容易)过度拟合交叉验证误差。


5

使用保持测试集可以clf.fit产生一个无偏估计,而使用嵌套交叉验证可以cross_val_score产生几个无偏估计。嵌套交叉验证的优点是可以使用算法尚未看到的数据更好地评估真实性能。更好的评估,因为您获得了例如嵌套cv的三个测试分数,而不仅仅是一个。

关于最佳估计的第二个问题的答案是,当前(v0.14)无法使用嵌套cv获得拟合模型的参数cross_val_score。见我的答案在这里用一个例子。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.