
202
|
第
5
章
5.2.2
参数过拟合的风险与验证集
看到这个结果,我们可能忍不住要报告,我们找到了一个在数据集上精度达到
97%
的模
型。然而,这种说法可能过于乐观了(或者就是错的),其原因如下:我们尝试了许多不
同的参数,并选择了在测试集上精度最高的那个,但这个精度不一定能推广到新数据上。
由于我们使用测试数据进行调参,所以不能再用它来评估模型的好坏。我们最开始需要将
数据划分为训练集和测试集也是因为这个原因。我们需要一个独立的数据集来进行评估,
一个在创建模型时没有用到的数据集。
为了解决这个问题,一种方法是再次划分数据,这样我们得到
3
个数据集:用于构建模型
的训练集,用于选择模型参数的验证集(开发集),用于评估所选参数性能的测试集。图
5-5
给出了这
3
个集合的图示:
In[19]:
mglearn.plots.plot_threefold_split()
图 5-5:对数据进行 3 折划分,分为训练集、验证集和测试集
利用验证集选定最佳参数之后,我们可以利用找到的参数设置重新构建一个模型,但是要
同时在训练数据和验证数据上进行训练。这样我们可以利用尽可能多的数据来构建模型。
其实现如下所示:
In[20]:
from sklearn.svm import SVC
# 将数据划分为训练+验证集与测试集
X_trainval, X_test, y_trainval, y_test = train_test_split(
iris.data, iris.target, random_state=0)
# ...