机器学习算法中的模型选择与假设评估

版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/WangQYoho/article/details/78990144

在掌握了机器学习算法后,接下来就需要对算法进行选择,在不同的问题下选择最合适的算法和模型进行处理。要知道在碰到不同的问题时应当走哪条解决方案,选择对了尝试的方向,才能够尽快的达到最优的解同时保证最优的性能。这篇文章就简要介绍一下碰到常规问题时如何解决,这些都是经验结论,在应对一些基础问题时一般都可以起到一定作用。

一、写在前面

首先需要了解大体上应当如何处理这类问题。当我们在预测时碰到问题,得到了较大的误差时,往往可以采用下面的方法:

  • 增加训练样本
  • 减小特征数量
  • 尝试其它额外的特征
  • 尝试特征的多项式组合
  • 调整惩罚系数
当我们需要对假设进行评估时,需要注意一个假设在训练样本上可能具有很小的误差,但是它依旧可能是不准确的(比如过拟合的情况下)。因此在需要评估假设时,往往会把给的训练集样本进行分割,一个经验值是按照7:3的比例将数据集分割为训练集(training set)和测试集(test set)。因此新的训练和测试过程应该按照如下的步骤:

  1. 根据样本学习得到Θ,同时最小化Jtrain(Θ) ;
  2. 计算测试集的误差Jtest(Θ)

如何计算测试集误差呢?对于线性回归而言Jtest(Θ)=12mtestmtesti=1(hΘ(x(i)test)y(i)test)2,对于逻辑回归而言,往
往会统计出现错误分类的例数,可以按照下面的来计算error:


然后再统计平均测试误差,如下式:

上式告诉了我们在这次的分类中对于测试集部分数据出现了多少误分类的情况。
二、模型选择与集合划分
如果你想确定对于一个问题最合适的多项式应该是几次,应该选择何种特征来进行构造学习算法,或者说如何选择正则化参数lambda,这就涉及到模型选择问题;在前面也提到了,为了能够判断当前模型的优劣,需要对数据集进行划分。下面围绕这两点来展开。
首先对于模型选择而言,对于一个问题,我们会假设多种可能合适的模型,比较简单的一种划分数据集方式是两段式,即训练集合测试集,用训练集的数据对其进行训练使其训练集误差达到最小,此时每种模型都可以得到一组模型参数,用当前的训练结果预测测试集数据,得到测试集误差,选择表现最优的模型参数和模型来作为我们最终选定的。之后需要评估当前模型的泛化误差(generalization error),有一种做法是将通过在测试集的误差做为泛化误差,但是这样其实并不十分准确,因此引出了下面的数据集划分方式。
在上面讲到的划分基础上,在常用的情况中一般会加入一个(交叉)验证集(cross validation set)。经过这种划分方式,数据集被划分成了三个部分,分别是训练集、验证集和测试集,且比例一般为60%,20%,20%。通过训练集得到多个模型对应的模型参数,然后计算在对应验证集上的验证集误差,选择最优的结果对应的模型参数和模型;在计算泛化误差时,使用测试集的数据计算。这种划分和计算方式比较有说服力。

三、方差(variance)诊断和偏差(bias)诊断
当运行一个算法时,如果这个算法表现不理想,多半是欠拟合或者过拟合的问题。欠拟合即高偏差,过拟合即高方差,二者都会影响算法的表现。下图直观展示了随着多项式次数变高,验证集误差和训练集误差的变化趋势。

Jcv >> Jtrain时通常为过拟合;Jcv和Jtrain都很高且近似相等,则可能为欠拟合。
为了能够避免过拟合的问题,常用的方式是通过增加惩罚项或者降维的方式来做,那么如何选择合适的惩罚系数来做正则化(regularization)需要好好尝试,如果惩罚系数过小则不能到达惩罚的效果,依旧会出现过拟合的问题;反之如果惩罚系数过大那么会出现所有被惩罚的系数都非常接近于0的现象,即最后会导致欠拟合。所以在实际中,会通过设置一系列的步长,尝试最合适的惩罚系数。
画出验证集误差和训练集误差与惩罚系数lambda的关系图,分析可以得到,在lambda较小的时候,由于有过拟合的情况出现,因此Jtrain很小,Jcv很大;随着lambda变大,Jtrain会逐渐变大,Jcv会先变小经过一个最小值(最优点)后再变大,最后变成欠拟合的情况。

四、学习曲线(learning curves)
绘制学习曲线非常有用,也许你想检查你的学习算法,运行是否一切正常,或者你希望改进算法的表现或效果,那么学习曲线就是一种很好的工具,可以用学习曲线来判断一个算法是否具有偏差或者方差的问题。
下图是高偏差(欠拟合)情况下的学习曲线:

当训练样本很低时,Jtrain很小Jcv很大,随着N增加二者逐渐逼近且而这都会稳定在一个较高的error水平;在这种情况下增加训练样本是没有意义的,这种学习曲线表示多项式次数过高,惩罚系数过大;
下图是高方差(过拟合)情况下的学习曲线:

当训练样本很低时,Jtrain很小Jcv很大,随着N增加二者逐步靠近,但是二者之间的距离依旧很大;在这种情况下增加训练样本可以优化算法结果的,这种学习曲线表示多项式次数过低,惩罚系数过小,样本量太小。
展开阅读全文

没有更多推荐了,返回首页