模型训练时,需要对模型进行调整以达到最优的效果。影响模型效果的常见因素与方式有:交叉验证、超参数、提前停止(正则化),过拟合、欠拟合、Bootstrap以及Bagging。
一、交叉验证
一轮交叉验证包括将数据样本划分为互补的子集,对一个子集(称为训练集)进行训练,并对另一个子集(称为验证集或测试集)验证分析。为了增加稳定性,使用数据不同的划分区域执行多轮交叉验证,并且获取多次结果的平均值作为最终结果。
交叉验证常见方法有:
1、Leave-P-Out 交叉验证:Leave-P-Out 交叉验证(LPOCV)使用样本中的某几项
当做测试集,从样本中选取某几项的可能种类称为P值。举个例子,当我们有四个数据点,而我们要将其中的两个数据点当做测试集。
2、Leave-one-out 交叉验证:即当p=1时的Leave-P-Out 交叉验证。LOOCV也可以
看做是KFold交叉验证,其中K=N。
正则化解决过拟合
3、k折交叉验证:K-Fold 交叉验证会将数据集分成K个部分,其中一个单独的样本作为测试集,而其余K-1个样本作为训练集。交叉重复验证K次,每个子集都会作为测试集,对模型进行测试。最终平均K次所得到的结果,最终得出一个单一的模型。
二、超参数
模型超参数对模型是一个非常重要的影响因素,常见的超参数优化方法分类有:网格搜索,随机搜索和基于梯度的优化。
1、网格搜索
传统的超参数优化方法是网格搜索或参数扫描,即通过学习算法的超参数空间的人工指定子集进行穷举搜索。网格搜索算法必须以一些性能指标为指导,通常通过在训练集上
的交叉验证或在一个外置验证集上的评估来衡量。
2、随机搜索
由于网格搜索是一种穷举遍历的笨重方法,因此提出了几种备选方法。特别是,在高维空间中,对参数设置采样固定次数的随机搜索比穷举搜索更有效。
3、基于梯度优化
对于特定的学习算法,可以根据超参数计算梯度,然后使用梯度下降优化超参数。这些技术的第一次应用是集中在神经网络上。这些方法被扩展到其他模型,如支持向量机或逻辑回归。
三、提前停止(正则化)
在机器学习中,提前停止是一种正则化形式,用于在用迭代方法(例如梯度下降)训练学习器时避免过度拟合。 这种方法更新了学习器,使其更好地适合每次迭代的训练数据。 这提高了学习器在训练集之外的数据上的表现。 但是,提高学习器对训练数据的适应性是以增加的泛化误差为代价的。 提前停止规则提供了在学习器开始过度训练之前可以运行多少次迭代的指导。提前停止规则已经在许多不同的机器学习方法中使用,理论基础不尽相同。
Early stopping方法的具体做法是,在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data的accuracy,当accuracy不再提高时,就停止训练。这种做法很符合直观感受,因为accurary都不再提高了,在继续训练也是无益的,只会提高训练的时间。那么该做法的一个重点便是怎样才认为validation accurary不再提高了呢?并不是说validation accuracy一降下来便认为不再提高了,因为可能经过这个Epoch 后,accuracy降低了,但是随后的Epoch又让accuracy又上去了,所以不能根据一两次的连续降低就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的val
idation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30……四、过拟合
当使用一个机器学习模型训练时,在训练集上误差比较小,但是测试集上的误差很大,我们可以称为过拟合数据。为了解决过拟合,可以尝试删除一些特征,降低模型自由度以及增加数据等。
1、删除特征
有些算法有内置的特征选择。 您可以通过删除不相关的输入特性来手动改进它们的通用性。一种有趣的方法是通过描述每个特性是如何融入模型的。如果很难证明一些特性的存在合理性,说明这些特征是没必要的。
2、降低模型自由度
在机器学习中,自由度可以指模型中的参数数量,例如线性回归模型中的系数数量或深度学习神经网络中的权重数量。
其中值得关注的地方在于,如果机器学习模型中存在过多的自由度(即模型参数),那么这个模型将会过拟合训练集,这是统计学上的普遍认识。可以通过使用正则化技术来克服这种问题,比如正则化线性
回归,以及深度学习神经网络模型中常用的各种正则化手段。
3、增加数据
我们在使用训练数据训练模型,通过这个模型对将来的数据进行拟合,而在这之间又一个假设便是,训练数据与将来的数据是独立同分布的。即使用当前的训练数据来对将来的数据进行估计与模拟,而更多的数据往往估计与模拟地更准确。因此,更多的数据有时候更优秀。
五、欠拟合
欠拟合是指模型不能在训练集上获得足够低的误差。换句换说,就是模型复杂度低,模型在训练集上就表现很差,没法学习到数据背后的规律。欠拟合基本上都会发生在训练刚开始的时候,经过不断训练之后欠拟合应该不怎么考虑了。但是如果真的还是存在的话,可以通过增加网络复杂度或者在模型中增加特征,这些都是很好解决欠拟合的方法。
六、Bootstrap
什么是 Bootstrap方法(Bootstrap Method)
Bootstrap 是一种统计学的方法去估计一个样本(sample的翻译,不知道对不对,population是总体集合,
比较难获得)的参数。下面举一个例子,如何去估计一个样本的 平均值 mean。我们做了100次试验,获得了100个观察值。传统的方法是直接用所有数据统计整体的平均值:
mean(x) = 1/100 * sum(x)
我们知道,样本的数量比较少,只有100个,这个估计值总是会存在错误的。如何改进这个错误?以下Bootstrap估计过程:
从100个观察值中,随机抽样1000个观察值(我们可以重复抽取相同的样本值)作为一个新的子样本集合(sub-sample)。
每个新的子样本(1000个观察值)都可以获得一个新的平均值。
用所有子样本的平均值作为这个数据的平均值。
例如我们获得三个新的平均值 2.3, 4.5 和 3.3,这个新的平均值估计是3.367。
七、Bagging
从训练集从进行子抽样组成每个基模型所需要的子训练集,对所有基模型预测的结果进行综合产生最终
的预测结果,至于为什么叫bootstrap aggregation,因为它抽取训练样本的时候采用的就是bootstrap的方法!
很多基于树(classification and regression trees, CART)的预测方法都很不稳定,随着训练数据一点变化,会导致最终结果很大的变化,换句话说很
sensitive。
类似的,我们的创建很多子样本(sub-samples),训练CART模型
在一个新的数据集预测的时候,我们取每个模型的平均值。
举个例子,假设我们预测的结果为blue, blue, red, blue 和 red,这样我们可以说最终的预测结果为blue,因为blue出现的次数最多。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论