训练数据和测试数据

日期: 2018-11-12 10:36:23 人气: - 评论: 0

训练集里面的观测值构成了算法用来学习的经验数据。在监督学习问题中,每个观测值都由一个响应变量和若干个解释变量组成。

 

测试集是一个类似的观测值集合,用一些度量标准来评估模型的运行效果。需要注意的是,测试集的数据不能出现在训练集中。否则,很难评价算法是否从训练集中学到了归纳能力,或者仅仅只是简单的记录了结果。归纳很好的程序能够用新数据有效地完成任务。相反,一个通过记忆训练数据来学习复杂模型的程序,可能通过训练集准确预测响应变量的值,但是在处理新问题的时候由于没有归纳能力会预测失败。

 

训练集的记忆称为过度拟合(over-fitting)。一个记住了观测值的程序不一定能够很好的完成工作, 因为它在记忆关系和结果的时候,把噪声也同时记住了。平衡记忆能力与归纳能力,或者说是过度拟合与拟合不够,是许多机器学习算法面对的共同问题。后面的章节,我们会介绍正则化

regularization),可以用来减轻许多模型的过度拟合程度。

 

除了训练集和测试集,还有一个观测值集合称为验证集(validation  set hold-out  set),有时候需要用到it视频。验证集用来调整超参数(hyperparameters)变量,这类变量控制模型是如何学习的。这个 程序也通过测试集来评估其真实的效果,验证集的效果不能用于评估其真实的效果,由于程序参数已经用验证数据调整过了。通常会把监督学习的观测值分成训练、验证和测试集三部分。各部分的大小没有要求,按实际观测值的规模来定。一般把50%以上的数据作为训练集,25%的数据做测试集,  剩下的作为验证集。

 

 

有的训练集只包含几百个观测值,有的可能有几百万。随着存储成本越来越便宜,网络连接范围不断扩大,内置传感器的智能手机的普及,以及对隐私数据态度的转变都在为大数据新动力,千万甚至上亿级别的训练集成为可能。本书不会涉及这类需要上百个机器并行计算才能完成的任务,许多机器学习算法的能力会随着训练集的丰富变得更强大。但是,机器学习算法也有句老话放入的是垃圾,出 来的也是垃圾。一个学习了一大堆错误百出的教材的学生不会比只读一点好书的学生考得好。同

理,对一堆充满噪声、没有关联、或标签错误的数据进行学习的算法,也不会比只学习一小部分更有代表性的训练集的算法效果更好。

 

许多监督学习的训练集都是手工准备的,或者半自动处理。建一个海量监督数据集需要耗费许多资  源。好在scikit-learn有些数据集,可以让开发者直接验证自己的模型。在开发阶段,尤其是训练集不够的时候,交叉验证(cross-validation    )的方法可以用相同的数据对算法进行多次训练和检验。在交叉验证中,训练数据是分成N块的。算法用N-1块进行训练,再用最后一块进行测试。每块都被算 法轮流处理若干次,保证算法可以在训练和评估所有数据。下图就是5块数据的交叉验证方法:

图片1.png
 

 

 

数据集被等分成5块,从A标到E。开始的时候,模型用BE进行训练,在A上测试。下一轮,在A

CDE上训练,用B进行测试。依次循环,直到每一块都测试过。交叉验证为模型的效果评估提供 了比只有一个数据集更准确的方法。