交叉验证
所谓交叉验证即k折交叉验证。即,将数据集大致均分为k份,每次选择一份作为测试集,其它k-1份作为训练集训练模型,并在测试集上验证其精度,最后可以计算这k-fold测试集上的精度的平均值。总之是,是一个改良的评估模型的方法。
网格搜索
首先选取心仪的参数。如,若想训练一个SVM模型,那么参数C和gamma是可以调节的,假定心仪的参数序列对于C和gamma均是[0.001, 0.01, 0.1, 1, 10, 100]
,那么可以开一个朴素的二重循环使用每个参数训练模型。
验证集
使用网格搜索每次循环设定的参数训练出一个模型之后,不能直接在测试集上评估当前参数下模型的性能,而应该在验证集上评估。原因是任何根据测试集精度所做的选择都会将测试集的信息泄漏到模型中。 因此,再从训练集中划分出验证集,在网格搜索的二重循环中对模型在验证集上评估,以得到最佳的参数。
网格搜索 + 交叉验证
省略了手动划分测试集的部分,因为k-fold交叉验证会自动划分k次验证机进行交叉验证。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split, cross_val_score
iris = load_iris()
from sklearn.svm import SVC
import numpy as np
X_trainval, X_test, y_trainval, y_test = train_test_split(iris.data, iris.target, random_state=0)
X_train, X_valid, y_train, y_valid = train_test_split(X_trainval, y_trainval, random_state=1