在上一节中我们看到,结合网格搜索进行k折交叉验证,通过超参数值的改动对机器学习模型进行调优,这是一种有效提高机器学习模型性能的方法。如果要在不同机器学习算法中做出选择,则推荐另外一种方法——嵌套交叉验证,在一项对误差估计的偏差情形研究中,Varma和Simon给出了如下结论:使用嵌套交叉验证,估计的真实误差与在测试集上得到的结果几乎没有差距[1]。
在嵌套交叉验证的外围循环中,我们将数据划分为训练块及测试块;而在用于模型选择的内部循环中,我们则基于这些训练块使用k折交叉验证。在完成模型的选择后,测试块用于模型性能的评估。下图通过5个外围模块及2个内部模块解释了嵌套交叉验证的概念,这适用于计算性能要求比较高的大规模数据集。这种特殊类型的嵌套交叉验证也称为5×2交叉验证(5×2 cross-validation):
借助于scikit-learn,我们可以通过如下方式使用嵌套交叉验证:
代码返回的交叉验证准确率平均值对模型超参调优的预期值给出了很好的估计,且使用该值优化过的模型能够预测未知数据。例如,我们可以使用嵌套交叉验证方法比较SVM模型与简单的决策树分类器;为了简单起见,我们只调优树的深度参数:
在此可见,嵌套交叉验证对SVM模型性能的评分(97.8%)远高于决策树的(90.8%)。由此,可以预期:SVM是用于对此数据集未知数据进行分类的一个好的选择。
[1] A.Varma and R.Simon.Bias in Error Estimation When Using Cross-validation for Model Selection.BMC bioinformatics,7(1):91,2006.