【机器学习】如何改进机器学习的性能?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hemk340200600/article/details/85259087

当我们的模型出现了过拟合,或者欠拟合的情况,如何处理?

验证模型

由于在训练样本中得到的训练误差,是不能够用来作为实际的泛化误差的,因此我们分割样本为训练集和测试集,在训练集上训练模型,在测试集上计算测试误差。在模型选择的过程中,我们通过比较不同模型的测试误差,选出一个测试误差最低的模型。然而这样也不能够公平地说明我们的模型推广到一般情况下的效果,因为我们选择了一个能够最好地拟合测试集的模型,使用这个测试集来评价我们的模型,因此就显得很不公平了。为了解决这种情况,提出了交叉验证

交叉验证

分割样本为训练集,验证集和测试集,定义训练误差验证误差以及测试误差。在训练过程中,使用验证集验证效果。选出最合适的模型后,再使用测试集进行测试,得到模型的泛化误差。

多项式次数d

当d较小时,训练误差比较大,此时验证误差会比较大。随着d的增大,训练误差不停下降,最终变得很小。而验证误差在d刚开始开始增加时会下降,直到某个值之后又会上升。
当训练误差和验证误差都比较大,并且两者相近时,此时算法存在欠拟合(高偏差)的情况。
当训练误差较低,但是验证误差却远大于训练误差时,此时算法存在过拟合(高方差)的情况。

正则化项 λ \lambda

在使用正则化时,对于训练集,验证集和测试集都不添加正则化项,而只是使用平方误差进行计算。
正则化项的选择: λ = 0 , 0.01 , 0.02 , 0.04 , . . . 10 \lambda=0,0.01,0.02,0.04,...10
λ \lambda 比较小时,训练误差往往比较小,此时验证误差处于较大的情况(高方差),说明算法过拟合。
λ \lambda 比较大时,训练误差往往比较大,此时验证误差同时处于较大的情况(高偏差),说明算法欠拟合。

样本数量m

样本数量m的选择,当m比较小时,我们的模型能够很好地拟合,甚至完美,因此训练误差很小,但此时我们的验证误差和测试误差都会很高,因为此时我们的模型并不能够很好地泛化到其他样本上。
当m比较大时,训练误差会变大,但此时验证误差和测试误差都会比较小,此时模型能够较好地拟合验证集和测试集的数据。
在欠拟合情况下,随着m的增大,验证误差会不停下降直至平缓,而训练误差不停上升直至平缓,最终两者都处于较高的水平。这也说明了一种情况,当我们的模型欠拟合的时候,增大m并不能够改变什么。
在过拟合情况下,随着m的增大,训练误差会随着增大,但是总体上还是比较小的水平,而验证误差会比较大,它跟训练误差之间有很大的差距。如果我们继续增大m,验证误差会持续下降,因此在这种情况下增大m是有意义的。

总结

欠拟合改进方法:增加feature,减少lambda
过拟合改进方法:增加样本数,引入正则化,减少feature,增加lambda

猜你喜欢

转载自blog.csdn.net/Hemk340200600/article/details/85259087
今日推荐