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