[Deep-Learning-with-Python]机器学习基础 (2)

将数据分成K份,每份数据量相同。每次训练在K-1份数据上,在第i份数据上进行验证。最后将K个验证结果的平均值作为最后的评估结果。

image

打乱迭代K折验证

当数据量很小,但又想模型评估尽可能准确,可以采用这种方法。Kaggle比赛非常有用
多次使用K折验证,但在数据划分成K份时,先进行数据打乱。最终以多次运行K折验证的结果的平均数为准。相当于训练了P X K个模型(P是K折验证的迭代次数)----花销很大。

关键点

当选择评估方法时,需要留意:

数据代表性----训练集和测试集都具有数据代表性。比如:手写数字分类,如果前80%为训练集,后20%为测试集,但数据集按照类别排序,导致训练集为07,测试集为89,导致模型训练结果很差,但这种错误很常见。

时间维度----如果模型训练是依据过去数据预测将来(比如,天气预测),则不能随便打乱数据。

数据重复----如果数据集中部分数据有重复,打乱数据划分训练集和测试集会导数训练集和测试集中有部分数据重复。最终,模型在部分测试集上进行模型评估---结果虚高。确保验证集和测试集之间没有重合。

数据预处理,特征工程和特征学习

除了模型评估,在模型开发过程中,模型训练之前有一个问题必须要考虑---在将数据和标签送到模型训练之前,如何处理数据和标签?许多数据处理方式和特征工程是领域相关的,不同领域使用的技术有所区别。

数据预处理

数据预处理旨在将原始数据能更符合网络的输入格式要求。包括向量化、归一化、处理缺失值和特征抽取。

向量化

神经网络的输入和标签必须是浮点类型的张量(或者是整数类型的张量)。无论处理什么数据---声音、图片、文本,必须转换成张量形式----这一步叫数据向量化。

归一化

总体上,如果送到神经网络中的数据取值范围过大,模型的学习效果并不理想(比如说数据的取值比模型权重系数的初始值还大)。为了让模型训练更容易,数据应该满足:

取值范围小:通常应该在0~1之间;

数据同类:所有特征的取值范围相同。

处理缺失值

总体上,将缺失值以0填充(假设0并不是有意义),对于神经网络来说是可行的。然后模型会自动学习到0表示缺失值,然后会忽略0.
注意如果模型的训练数据没有缺失值,而测试集有缺失值,模型并不能学到忽略0取值。这种情况下,你应该手动生成有缺失值的训练样本:多次复制训练集,丢弃部分数据集中可能缺失的特征。

特征工程

特征工程:使用关于数据的先验知识和机器学习算法确保在数据送到模型之前对数据做变化,使最终算法工作效果更好。不能期望算法能从任意数据中学习。数据应该以有助于模型学习的方式表示。
在深度学习之前,特种工程是非常重要的,因为之前的机器学习算法没有足够大的假设空间--自己学习有用的特征。数据的表示对于算法的成功至关重要。
幸运的是,深度学习对特征工程的要求性没有那么高,因为神经网络能自动从数据中抽取有用的特征信息。但是特征工程对于深度学习仍然有帮助:

好的特征表示能让问题处理更加快捷、高效;

好的特征表示需要的数据量更小;当数据量过小时,特种工程显得格外重要。

过拟合和欠拟合

过拟合现象在每个机器学习问题中都会发生。学会避免过拟合对于掌握机器学习来说至关重要。
机器学习中的主要问题是模型优化和泛化能力之间的调和。优化---调整模型使得在训练数据上表现尽可能的好;泛化---训练模型在新数据上的表现尽可能好。我们可以调整模型获得很好的模型优化,但不能控制模型的泛化能力--只能根据模型在训练数据上的表现调整模型。
训练开始之后,优化能力和泛化能力是相互关联的:训练数据上的损失值减小,测试集上的损失也相应减小;这时候发生模型欠拟合---模型还没有学习到数据所有的知识。但是当循环多次以后,泛化能力停止提升,验证集上指标开始下降:模型发生过拟合----此时,模型开始学习数据中过于个性化的特征,但当新数据到来时会对预测产生误导作用。
为了避免模型学习训练数据中不相关、误导性的特征,最好的方法是准备更多的训练数据。训练数据越多,泛化能力越强。当数据收集困难时,调整数据的质量,对数据添加限制。如果模型能“记住”所有的数据,优化过程中强制关注更重要的数据特征上。
避免过拟合的过程叫做regularization正则化。下面介绍一些常见的正则化方法。

简化模型

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzggww.html