转载自 谷海燕 https://blog.csdn.net/zhuanzhe117/article/details/82595958
下面这张经典的图展示了欠拟合(第一个)与过拟合(第三个)。
欠拟合 |
模型在训练集上学习的不够好,经验误差大,称为欠拟合。模型训练完成后,用训练数据进行测试,如果错误率高,我们就很容易发现模型还是欠拟合的。
解决办法:
- 增加训练次数。
- 添加其他特征项,例如,组合特征、泛化特征、相关性特征。
- 添加多项式特征,例如将线性模型通过添加二次项或者三次项使模型泛化能力更强。
- 减少正则化参数,正则化的目的是防止过拟合。
-
过拟合 当模型对训练集学习得太好的时候(学习数据集通性的时候,也学习了数据集上的特性,导致模型在新数据集上表现差,也就是泛化能力差),此时表现为经验误差很小,但泛化误差很大,这种情况称为过拟合。
解决办法:
- 正则化
正则化方法包括L0正则、L1正则和L2正则。
L0范数是指向量中非0的元素的个数。L1范数是指向量中各个元素绝对值之和,也叫“稀疏规则算子”(Lasso regularization)。两者都可以实现稀疏性。
L2范数是指向量各元素的平方和然后求平方根。可以使得W的每个元素都很小,都接近于0,但与L1范数不同,它不会让它等于0,而是接近于0。L2正则项起到使得参数w变小加剧的效果。 - 剪枝
剪枝是决策树中一种控制过拟合的方法,预剪枝通过在训练过程中控制树深、叶子节点数、叶子节点中样本的个数等来控制树的复杂度。后剪枝则是在训练好树模型之后,采用交叉验证的方式进行剪枝以找到最优的树模型。 - 提前终止迭代
主要是用在神经网络中的,在神经网络的训练过程中我们会初始化一组较小的权值参数,此时模型的拟合能力较弱,通过迭代训练来提高模型的拟合能力,随着迭代次数的增大,部分的权值也会不断的增大。如果我们提前终止迭代可以有效的控制权值参数的大小,从而降低模型的复杂度。 -
上面的几种方法都是操作在一个模型上 ,通过改变模型的复杂度来控制过拟合。另一种可行的方法是结合多种模型来控制过拟合。
- Bagging和Boosting
是机器学习中的集成方法,多个模型的组合可以弱化每个模型中的异常点的影响,保留模型之间的通性,弱化单个模型的特性。 - Dropout
是深度学习中最常用的控制过拟合的方法,主要用在全连接层处。在一定的概率上(通常设置为0.5,原因是此时随机生成的网络结构最多)隐式的去除网络中的神经元,但会导致网络的训练速度慢2、3倍,而且数据小的时候,Dropout的效果并不会太好。因此只会在大型网络上使用。 -
<script> (function(){ function setArticleH(btnReadmore,posi){ var winH = $(window).height(); var articleBox = $("div.article_content"); var artH = articleBox.height(); if(artH > winH*posi){ articleBox.css({ 'height':winH*posi+'px', 'overflow':'hidden' }) btnReadmore.click(function(){ if(typeof window.localStorage === "object" && typeof window.csdn.anonymousUserLimit === "object"){ if(!window.csdn.anonymousUserLimit.judgment()){ window.csdn.anonymousUserLimit.Jumplogin(); return false; }else if(!currentUserName){ window.csdn.anonymousUserLimit.updata(); } } articleBox.removeAttr("style"); $(this).parent().remove(); }) }else{ btnReadmore.parent().remove(); } } var btnReadmore = $("#btn-readmore"); if(btnReadmore.length>0){ if(currentUserName){ setArticleH(btnReadmore,3); }else{ setArticleH(btnReadmore,1.2); } } })() </script> </article>