文章目录
划分测试集
如果把所有的数据都拿去训练模型,最后测试的时候模型会在已有数据上拟合的非常好,因为我们算法的目的就是找到一个使代价函数值尽可能小的模型,但此时很可能出现过拟合的情况。对于比较简单的模型,我们还可以通过画图直接观察曲线是否过拟合,但这种方法对于更多特征值的情形无能为力。因此,我们需要保留一些数据作为训练好的模型的测试。通常,我们将 70 % 70\% 70%的数据用于训练模型,其余 30 % 30\% 30%用来测试(最好在选取之前随机打乱所有数据),观察训练后的模型在测试集上是否也有良好的表现,即较低的代价函数值(测试时的代价函数不一定与训练时相同,尤其是对于分类问题)。
有些时候,我们有多个模型(编号 k = 1 , 2 , ⋯ , K k=1,2,\cdots,K k=1,2,⋯,K),我们要从中选择一个我们认为最好的模型。
一种做法是,将所有模型先用训练集训练,再用测试集测试,选用在测试集表现最佳(代价函数值最低)的模型。看起来似乎很合理,但其实这种方式有失偏颇。
划分验证集
上面的方法之所以不合理,是因为我们通过测试集后选择模型其实也是一个拟合的过程,只不过我们拟合的是一个抽象的参数 k k k,即模型种类。所以我们选择的 k k k就是在测试集上表现很好的参数,但这并不意味着在面对更泛化的数据时该模型一定会比其他模型表现更好,这个过程同样有过拟合的风险。
因此,我们再划分出一部分数据,称为(交叉)验证集。验证集就用来“拟合”参数 k k k,通过了验证集以后,我们在把模型放到测试集中运行,通过代价函数判断该模型是否过拟合。
一般而言,训练集、验证机、测试集的比例为 6 : 2 : 2 6:2:2 6:2:2。