交叉验证(cross-validation)是一种评估泛化性能(新数据能否正确预测)的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。如果只划分一次训练集和测试集,可能难以分类的样本都在测试集中,那么精度会低的离谱,相反,如果容易分类的样本都在测试集中,精度则会高的离谱,所以会导致模型并不能反映数据的真实情况。

k 折交叉验证
最常用的交叉验证是 k 折交叉验证(k-fold cross-validation),其中 k 是由用户指定的数字,通常取5 或10。在执行5 折交叉验证时,首先将数据划分为(大致)相等的5 部分,每一部分叫作折(fold)[1]。交叉验证通常会和寻优一起,即在不同的数据划分情况下,不同的参数情况下,模型的表现如何,对参数寻优,在最优参数下,模型对整个数据(不同数据划分)的表现如何就是交叉验证也称交叉测试。

使用第1 折作为测试集、其他折(2~5)作为训练集来训练第一个模型,并算出精度。共构建五个模型,最后对精度取平均值。
1 | from sklearn.model_selection import cross_val_score |
1 | from sklearn.model_selection import cross_val_score |
参考文章
- 1.安德里亚斯·穆勒, 莎拉·吉多. Python机器学习基础教程[M/OL]. 张亮, 译. 人民邮电出版社 ↩︎