Keras深度学习:入门、实战与进阶
上QQ阅读APP看书,第一时间看更新

2.3.3 数据拆分

除了上一小节在目标函数中引入正则化的方法外,也可以用对数据集进行拆分后建模的方法来防止模型过拟合,包括训练集、验证集、测试集的引入,K折交叉验证等。

1. 训练集、验证集、测试集的引入

在模型的训练过程中可以引入验证集策略来防止模型的过拟合,即将数据集分为3个子集:训练集(用来训练模型)、验证集(用来验证模型效果,帮助模型调优)和测试集(用来测试模型的泛化能力,避免模型过拟合)。该模型的训练过程如图2-12所示。

054-3

图2-12 三分数据训练示意图

我们可以在数据划分时一次性将原始数据划分为训练集、验证集和测试集;也可以将原始数据划分为训练集和测试集,而不划分验证集。比如深度学习在模型训练阶段,通过指定fit方法中参数validation_split的值,将训练集按照相应比例拆分出验证集来调优模型。

2. K折交叉验证

K折交叉验证是采用某种方式将数据集切分为k个子集,每次采用其中的一个子集作为模型的测试集,余下的k-1个子集用于模型训练;这个过程重复k次,每次选取不同的子集作为测试集,直到每个子集都测试过;最终将k次测试结果的均值作为模型的效果评价。显然,交叉验证结果的稳定性很大程度取决于k的取值。k常用的取值是10,此时称为10折交叉验证。下面给出10折交叉验证的示意图,如图2-13所示。

055-1

图2-13 10折交叉验证

K折交叉验证在切分数据集时有多种方式,其中最常用的一种方式是随机不放回抽样,即随机地将数据集平均切分为k份,每份都没有重复的样例。另一种常用的切分方式是分层抽样,即按照因变量类别的百分比划分数据集,使每个类别百分比在训练集和测试集中一样。