直接使用交叉验证评估超参数
将数据拆分成n份,其中一份作为测试集,剩余的作为训练集,每一份逐次作为测试集,最终得到n个模型,和n个评分,
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.svm import SVC
iris = load_iris()
svc = SVC(kernel='linear')
cross_val_score(svc, iris.data, iris.target, cv=3)
Out[6]: array([1. , 1. , 0.98])
这只能得到一个分数,并不会得到一个模型,如果对这3个分数取均值,意义为超参数kernel='linear'
训练出来的模型的分数,它是一种评估超参数优劣的方法,
相对于Train-Test的拆分方法的优点在于这个分数是在整体数据上测试得到,而且又避免了直接使用全部数据训练,再用一部分评估造成评估分数失真的问题。
在网格搜索中应用CV
在GridSearch中使用cv, cv的作用还是用来评估超参数的最终得分,而非评估模型的最终得分,所以GridSearch最终输出的结果是每一组超参数的分数,用不用CV输出结果都是
每一组超参数的分数,而不会输出一个模型,只有当设置refit=True
时,GridSearch会用最优的参数重新训练一个模型作为其属性best_estimator_
。
留出法+CV
留出一份数据集作为测试,剩下的数据集作为CV分割,模型最终以测试集的评估为准,使用GridSearch得出最优的参数,再用整个训练集训练,再用测试集评估。