第1章:机器学习概览
1. 在一个机器学习项目中, 你从训练集中采集数据, 然后将数据交给学习算法来计算。 如果算法是基于模型的,它会调整一些参数来将模型适配于训练集(即对训练集本身做出很好的预测),然后算法就可以对新的场景做出合理的预测。如果算法是基于实例的,它会记住这些样例,并根据相似度来对新的实例进行泛化。
2. 通常使用80%的数据进行训练,保留另外的20%来做测试。
3. 现在让我们假设线性模型的泛化能力更强, 但是你想要应用一些正则化来避免过度拟合。 问题又来了, 你要如何选择正则化超参数的值呢? 做法之一是使用100个不同的超参数值来训练100个不同的模型。 然后假设你由此找到了最佳的超参数值, 它生成的模型泛化误差最小, 比如仅仅5%。
然后你将这个模型运行在生产环境, 可是很不幸, 它并没有如预期那样工作, 反而产生了15%的误差。 这到底发生了什么?
问题出在你对测试集的泛化误差进行了多次度量, 并且调整模型和超参数来得到拟合那个测试集的最佳模型。 这意味着该模型对于新的数据不太可能有良好的表现。
常见的解决方案是再单独分出来一个保留集合, 称为验证集。 在训练集上, 使用不同的超参数训练多个模型, 然后通过验证集, 选择最好的那个模型和对应的超参数, 当你对模型基本满意之后, 再用测试集运行最后一轮测试, 并得到泛化误差的估值。(这里对《深度学习入门》里说到的用训练集来训练参数,用验证集来选择超参数做了更详细的解释)
为了避免验证集“浪费”太多的训练数据, 常见的技术是使用交叉验证:将训练集分成若干个互补子集, 然后每个模型都通过这些子集的不同组合来进行训练, 之后用剩余的子集进行验证。 一旦模型和超参数都被选定, 最终的模型会带着这些超参数对整个训练集进行一次训练, 最后再用测试集测量泛化误差。