1.1 训练数据和测试数据
训练集里面的观测值构成了算法用来学习的经验数据。在监督学习问题中,每个观测值都由一个响应变量和若干个解释变量组成。
测试集是一个类似的观测值集合,用一些度量标准来评估模型的运行效果。需要注意的是,测试集的数据不能出现在训练集中。否则,很难评价算法是否从训练集中学到了归纳能力,或者仅仅只是简单的记录了结果。
除了训练集和测试集,还有一个观测值集合称为验证集(validation set或 hold-out set),有时候需要用到。验证集用来调整超参数(hyperparameters)变量,这类变量控制模型是如何学习的。这个程序也通过测试集来评估其真实的效果,验证集的效果不能用于评估其真实的效果,由于程序参数已经用验证数据调整过了。通常会把监督学习的观测值分成训练、验证和测试集三部分。各部分的大小没有要求,按实际观测值的规模来定。一般把50%以上的数据作为训练集,25%的数据做测试集,剩下的作为验证集。
什么 是交叉验证?在开发阶段,尤其是训练集不够的时候,交叉验证(cross-validation )的方法可以用相同的数据对算法进行多次训练和检验。在交叉验证中,训练数据是分成N块的。算法用N-1块进行训练,再用最后一块进行测试。每块都被算法轮流处理若干次,保证算法可以在训练和评估所有数据。下图就是5块数据的交叉验证方法:
数据集被等分成5块,从A标到E。开始的时候,模型用B到E进行训练,在A上测试。下一轮,在A,C,D和E上训练,用B进行测试。依次循环,直到每一块都测试过。交叉验证为模型的效果评估提供了比只有一个数据集更准确的方法。