交叉验证法:K折交叉验证解决过拟合
交叉验证(Cross-validation)多次选择测试集做评估,有效避免了随机性带来的误差。而且交叉验证不需要选择验证集,这样就避免了数据的浪费,使训练集中有足够的样本数量。
交叉验证最基本的方法是 K折交叉验证(K-fold Cross Validation),原理如图 1 所示。

图1:交叉验证,白色是训练集,黑色是测试集
交叉验证唯一的缺点就是计算代价相对较高。实现交叉验证可以调用 Scikit 中提供的 cross_val_score 辅助函数,实例如下。
从验证结果可以得出每次迭代的分数,可以看到最低得分只有 0.86,而最高的分数是 1。
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
交叉验证最基本的方法是 K折交叉验证(K-fold Cross Validation),原理如图 1 所示。

图1:交叉验证,白色是训练集,黑色是测试集
K折交叉验证法过程
K 折交验证去具体过程如下所示:- 第1步,将原始数据随机分为k份。
- 第2步,每次挑选其中k-1份作为训练集,剩余的1份作为测试集进行训练。
- 第3步,循环第 2 步 k 次,这样每一份都会被作为测试集。
- 第4步,计算 k 组测试集评估结果的平均值作为模型的最终得分。
交叉验证唯一的缺点就是计算代价相对较高。实现交叉验证可以调用 Scikit 中提供的 cross_val_score 辅助函数,实例如下。
#导入相关模块 In [1]: from sklearn import datasets ...: from sklearn import neighbors ...: from sklearn.model_selection import cross_val_score #导入相关数据集 In [2]: iris = datasets.load_iris() #创建knn分类器对象 In [3]: knn = neighbors.KNeighborsClassifier(3) #对分类器进行交叉验证 In [4]: scores = cross_val_score(knn, iris['data'], iris['target'], cv=10) #查看验证结果 In [5]: scores Out[5]: array([1. , 0.93333333, 1. , 0.93333333, 0.86666667, 1. , 0.93333333, 1. , 1. , 1. ]) #查看均值 In [6]: scores.mean() Out[6]: 0.9666666666666666 #查看标准差 In [7]: scores.std() Out[7]: 0.04472135954999579
从验证结果可以得出每次迭代的分数,可以看到最低得分只有 0.86,而最高的分数是 1。
声明:《Python系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。