网站首页 > 技术文章 正文
我们知道,不管是发生欠拟合还是过拟合,对应的hypothesis function都不是我们想要的target function,那么给你一个hypothesis function,我们该如何判断是否存在欠拟合、过拟合?
欠拟合、过拟合的判断
很简单,我们可以将training set、test set分别作用在hypothesis function中,并观察对应的准确率(accuracy:预测正确的样本个数/样本总量)
- 如果training set中,accuracy很低,则存在欠拟合;否则,不存在欠拟合
- 不存在欠拟合的情况下,如果test set中accuracy很低,则存在过拟合
欠拟合比较好理解,而且比较容易解决,我们就先看下欠拟合的原因及解决方法。
欠拟合原因及解决方法
我们先思考一下:为什么会存在欠拟合?
对于欠拟合,很好理解,可能原因如下:
- hypothesis function复杂度过低
- 机器学习算法所用参数不合适,比如梯度下降算法中learning rate过大....
- .......
那么该如何解决欠拟合呢?
其实我们的hypothesis function从一开始都是欠拟合,然后再一点点的改进,改进方法有:
- 使用更复杂的hypothesis function
- 调整算法中的参数
- ....
过拟合的原因及解决方法
导致过拟合的原因就比较多了,具体如下:
- training set中数据量太少
- hypothesis function模型过于复杂
- training set中存在噪声
- ....
过拟合是无法完全避免的,我们只能尽量的减少过拟合,方法如下:
- 数据增强(Data augmentation)
- early stopping
- dropout
- 正则化 regularization
- 数据增强 data augmentation
有人曾经说过:有时候,训练模型并不是由于算法好才赢的,而是由于拥有了海量的数据才赢的。
在机器学习领域,数据的重要性不言而喻,特别是在深度学习中,更多的训练数据,意味着能够用更深的网络,从而训练出更好的模型。
如果我们可以收集到大量的数据,那当然最好不过了,可有时候,收集更多的数据意味着要耗费更多的人力物力,这时候可以对已有数据做一些改动,从而增大数据集。
- early stopping
early stopping即提前终止,比如在梯度下降算法中,迭代若干次后,提前终止迭代算法,从而防止过拟合。
Early stopping方法的具体做法是,在每一个Epoch结束时(一个Epoch集为对所有的训练数据的一轮遍历)计算validation data的accuracy,当accuracy不再提高时,就停止训练。
这种做法很符合直观感受,因为accurary都不再提高了,在继续训练也是无益的,只会提高训练的时间。那么该做法的一个重点便是怎样才认为validation accurary不再提高了呢?
并不是说validation accuracy一降下来便认为不再提高了,因为可能经过这个Epoch后,accuracy降低了,但是随后的Epoch又让accuracy又上去了,所以不能根据一两次的连续降低就判断不再提高。一般的做法是,在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30……
- dropout
dropout是神经网络中的一种技巧,在讲到神经网络时,我们再讲解
- 正则化 regularization
讲正则化之前,我们先看下什么样的hypothesis function容易导致过拟合。
下图是一个二分类的逻辑回归问题,现有两个hypothesis function,如果是你,你会选择哪一个作为target function?
我们先分析下上面两个hypothesis function(黑色曲线、绿色曲线):
- 黑色的曲线,存在一定的bias,但该曲线更“简单”、更“光滑”
- 绿色的曲线,不存在bias,但是该曲线更“复杂”
如果是你,你会选哪一条曲线? “简单”还是“复杂”?
奥卡姆选择了“简单”的曲线。
这就是著名的"奥卡姆剃刀原理”:如果你有两个原理,它们都能解释观测到的事实,那么你应该使用简单的那个,直到发现更多的证据。
奥卡姆剃刀原理告诉我们,相对于绿色曲线(没有bias、"复杂"),黑色曲线(low bias,"简单")的泛化能力会更强。
正则化的方法就是在cost function中加上一个正则化项,尽量减小每一个参数θ,从而使hypothesis function尽量"简单"。
根据正则化项的不同,正则化分为L1正则化、L2正则化
L1正则化
L1正则化项为:全部参数绝对值的和,再乘以λ/n。具体cost function如下(λ称为正则化系数):
我们以梯度下降算法为例,看下L1正则化项对参数更新的影响:
我们可以看到,与原始cost function相比,加了L1正则化项后
- 当θ为正时,sgn(θ)>0,则更新后θ变小
- 当θ为负时,sgn(θ)<0,则更新后θ变大
因此,加了L1正则化项后,参数θ尽可能为0,相当于减小了曲线的复杂度,防止过拟合。
L1正则化求得的参数会有更多的“0”(即容易获得”稀疏“的解),如果某一个参数为"0",那么该特征(feature)就对机器学习没有贡献,因此,L1正则化是一种嵌入式的特征选择方法
L2正则化
L2正则化对应的cost function如下(λ称为正则化系数):
我们以梯度下降算法为例,看下L2正则化项对参数θ更新的影响:
可以看到,L2正则化的效果也是减小参数θ。
L1和L2正则化的区别:
- L1会趋向于产生少量的特征,而其他特征的参数都是0
- L1会选择更多的特征,但这些特征的参数都接近于0
用的较多的正则化方法为L2正则化,大家有兴趣,可以使用L2正则化,将其应用在线性回归、逻辑回归中。
猜你喜欢
- 2024-10-11 一篇值得收藏的ML数据预处理原理与实践文章
- 2024-10-11 机器学习-常用回归算法归纳(全网之最)!错过损失一个亿!
- 2024-10-11 向量范数在机器学习中的应用:你真的了解吗?
- 2024-10-11 06-人人都懂的人工智能:正则化技术防止模型过拟合
- 2024-10-11 为什么反物质如此稀少?对称性告诉你答案
- 2024-10-11 算法岗面试「完整脉络」梳理:手推公式、通用问题、常见算法
- 2024-10-11 L2正则化为什么能够使得模型更简单?是因为这
- 2024-10-11 稀疏位图算法RoaringBitmap 稀疏图是指零元素非常少的矩阵
- 2024-10-11 机器学习——线性回归 线性回归教程
- 2024-10-11 PyTorch(八)——梯度下降、优化器、偏差方差与正则化
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)