机器学习中用来防止过拟合的方法有哪些

您正在使用IE低版浏览器,为了您的雷锋网账号安全和更好的产品体验,强烈建议使用更快更安全的浏览器
发私信给qqfly
导语:给《机器视觉与应用》课程出大作业的时候,正好涉及到这方面内容,所以简单整理了一下(参考 Hinton 的课程)。
同步到新浪微博
上海交通大学机器人所博士生,本科毕业于清华大学机械工程系,主要研究方向机器视觉与运动规划,个人微信公众号:Nao(ID:qRobotics)
当月热门文章
为了您的账户安全,请
您的邮箱还未验证,完成可获20积分哟!
您的账号已经绑定,现在您可以以方便用邮箱登录博客访问: 2188572
博文数量: 983
博客积分: 13195
博客等级: 上将
技术积分: 7285
注册时间:
C++,python,热爱算法和机器学习
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 其他平台
原文地址:
1.分类问题
判断一封邮件是否为垃圾邮件,判断肿瘤是良性的还是恶性的,这些都是分类问题。在分类问题中,通常输出值只有两个(一般是两类的问题,多类问题其实是两类问题的推广)(0叫做负类,1叫做正类)。给定一组数据,标记有特征和类别,数据如(x(i),y(i)),由于输出只有两个值,如果用回归来解决会取得非常不好的效果。
在良性肿瘤和恶性肿瘤的预测中,样本数据如下
上图是用线性归回得到的结果,那么可以选定一个阈值0.5,建立该模型后就可以预测:
如果训练数据是这样的
很明显,这样得到的结果是非常不准确的。线性回归中,虽然我们的样本输出数据都只有0和1,但是得到的输出却可以有大于1和小于0的,这不免有点奇怪。Logistic Regission的假设就是在0和1之间的。
2.Logistic Regression
我们希望的是模型的输出值在0和1之间,逻辑回归的假设,这个假设的推导在网易公开课的广义线性模型中有提到(分类的概率满足伯努利分布),这个以后再说
g(z)的函数图象是这样的一个S型曲线
现在只要假定,预测输出为正类的概率为H (x;theta)(因为根据该曲线,H是1的时候输出刚好是1),根据概率之和为1,可以得出如下式子
根据这个式子就可以来预测输出的分类了。和前面的线性回归一样,h(x)大于0.5的话,输出有更大的概率是正类,所以把它预测成正类。
从S型曲线可以看出,h(x)是单调递增的,如果h(x)>0.5则x*theta>0反之,x*theta0和x*theta<0分布在该直线的两侧,刚好可以把两类样本分开。
如果数据是下面这样的,很明显一条直线无法将它隔开
因此需要像多项式回归一样在x中添加一些feature,如
和前面一样y=theta0+theta1*x1+theta2*x2+theta3*x1^2+theta4*x2^2=0是一条曲线,y>0和y<0分布在该曲线两侧。得到了以上模型,只要用学习算法学习出最优的theta值就行了。
要学习参数theta,首先要确定学习的目标,即Cost Function。在线性回归中,我们选取的Cost Function是
使得每个样本点到曲线的均方误差最小,要注意Logistic Regission中,h(x)带入J中得到的一个函数不是Convex的,形状如这样
因此这样的一个J(theta)不能用梯度下降法得到最优值,因为有多个极值点。
由于这个文类问题中,两类的概率满足伯努利分布,所以
这两个式子可以写成
给定一些样本点,可以使用极大似然估计来估计这个模型,似然函数为:
这里要求L(theta)的最大值,所以在前面添个负号就变成了求最小值,就可以用梯度下降法求解了。
观察J的前后两项,都是单调函数,因此J是Convex函数,目标就是要最小化这个函数,因此可以用梯度下降法。
求偏导之后发现这个式子和线性回归中的那个式子的相同的,要注意的是这里的h(theta)和线性回归中的是不一样的,需要区分。这样就得到了逻辑回归的分类模型!
3.过拟合问题以及解决方法(Regularization)
下面三个例子中,二是拟合的比较好的,一中有着较大的MSE,不是很好的模型,这种情况叫做 under fit,第三种情况虽然准确得拟合了每一个样本点,但是它的泛华能力会很差,这种情况叫做overfit。
在LogisticRegression中,上面三种情况对应的就是
Underfit和Overfit是实践过程中需要避免的问题,那么如何避免过拟合问题呢?
第一种方法就是减少feature,上面的例子中可以减少x^2这样的多项式项。
第二种方法就是这里要介绍的Regularization,Regularization是一种可以自动减少对预测结果没有影响(或影响较小)的feature的方法。
在下面这个例子中,如果我们学习得到theta3和theta4都是0或者非常接近于0,那么x的三次方项和四次方项这两个feature可以忽略,而得到的模型就是左边这个。
方法就是在原来的J后面加上惩罚项lambda*theta^2,这个例子中
优化过程中就会使得theta3和theta4尽量小,从而加惩罚因子的这些feature对模型的影响越小。
加上lambda后面的惩罚项(regularization parameter),这样就得到了Regularization后的新的模型
这里惩罚项式从1开始到n的,没有把0加进去,事实上,把0加进去对结果的影响非常小。
还有一个就是惩罚项系数lambda的选取问题,如果lambda选取的过大,那么最后的theta会接近于0,那么分割的曲线就会接近于直线,从而导致underfit(因为如果lambda非常非常大,要得到和前面的(h-y)相当大小的数值theta里面的所有元素就要很小),如果lambda过小,就相当于没有惩罚项,就是overfit。
求偏导后,梯度下降法中的更新式就变成了
最后还要说一下,对convex函数的优化,matlab提供了相应的优化工具,你可以把它看成是一个黑盒,你只需要把你的Cost Function和初始的theta值给他,并告诉它你需要用到什么样的优化方法,他就会帮你优化。下面是具体的使用方法:
设置好选项,参数t会去调用你的costfunction,并用相应的你指定的方法优化相应的迭代次数。
总结:Logistic Regression和过拟合问题的解决方法是机器学习中非常重要的方法。貌似Google的搜索广告的摆放就是用了逻辑回归算法。
附fminunc的文档介绍
阅读(2863) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。机器学习:防止过拟合的方法
机器学习:防止过拟合的方法
算法:机器学习
在对模型进行训练时,有可能遇到训练数据不够,即训练数据无法对整个数据的分布进行估计的时候,或者在对模型进行过度训练(overtraining)时,常常会导致模型的过拟合(overfitting),即模型复杂度比实际数据复杂度还要高。
防止过拟合,主要从以下几方面着手:
模型参数:减少特征、权&#20540;衰减、Early stopping
数据集:数据集扩增(源头取数、复制数据&#43;随机噪声、重采样、分布估计)、验证数据(验证最小误差的迭代次数,常用交叉验证)
增加罚项:正则化方法、Dropout(修改神经网络本身结构)
下面具体介绍
1. 模型参数
减少特征:
人工选择,预留一些特征;利用算法选取一些比较好的特征。
权&#20540;衰减:
在每次迭代过程中以某个小因子降低每个权&#20540;,这等效于修改E的定义,加入一个与网络权&#20540;的总量相应的惩罚项。此方法的动机是保持权&#20540;较小,避免weight decay,从而使学习过程向着复杂决策面的反方向偏。
Early stopping:
对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient descent)学习算法。
Early stopping便是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合。&
一般的做法是,在训练的过程中,记录到目前为止最好的validation accuracy,当连续10次Epoch(或者更多次)没达到最佳accuracy时,则可以认为accuracy不再提高了。此时便可以停止迭代了(Early Stopping)。这种策略也称为“No-improvement-in-n”,n即Epoch的次数,可以根据实际情况取,如10、20、30……
数据集扩增:
在数据挖掘领域流行着这样的一句话,“有时候往往拥有更多的数据胜过一个好的模型”。
通俗得讲,数据机扩增即需要得到更多的符合要求的数据,即和已有的数据是独立同分布的,或者近&#20284;独立同分布的。一般有以下方法:
从数据源头采集更多数据复制原有数据并加上随机噪声重采样根据当前数据集估计数据分布参数,使用该分布产生更多数据等
验证数据:
一个最成功的方法是在训练数据外再为算法提供一套验证数据,应该使用在验证集合上产生最小误差的迭代次数。
交叉验证方法在可获得额外的数据提供验证集合时工作得很好,但是小训练集合的过度拟合问题更为严重。
k-fold交叉方法:
把训练样例分成k份,然后进行k次交叉验证过程,每次使用不同的一份作为验证集合,其余k-1份合并作为训练集合。
每个样例会在一次实验中被用作验证样例,在k-1次实验中被用作训练样例;每次实验中,使用上面讨论的交叉验证过程来决定在验证集合上取得最佳性能的迭代次数n*,然后计算这些迭代次数的均&#20540;,作为最终需要的迭代次数。
3.增加罚项
正则化方法:
L1正则是基于L1范数,即在目标函数后面加上参数的L1范数和项,即参数绝对&#20540;和与参数的积项,即:&
C=C0&#43;λn∑w|w|
其中C0代表原始的代价函数,n是样本的个数,λ就是正则项系数,权衡正则项与C0项的比重。后面那一项即为L1正则项。
L2正则是基于L2范数,即在目标函数后面加上参数的L2范数和项,即参数的平方和与参数的积项,即:&
C=C0&#43;λ2n∑ww2
其中C0代表原始的代价函数,n是样本的个数,与L1正则化项前面的参数不同的是,L2项的参数称了12,是为了便于计算以及公式的美感性,因为平方项求导有个2,λ就是正则项系数,权衡正则项与C0项的比重。后面那一项即为L2正则项。&
Dropout(修改神经网络本身结构):
在神经网络中,有一种方法是通过修改神经网络本身结构来实现的,其名为Dropout。该方法是在对网络进行训练时用一种技巧(trike),对于如下所示的三层人工神经网络:&
对于上图所示的网络,在训练开始时,随机得删除一些(可以设定为一半,也可以为1/3,1/4等)隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层神经元的个数不变,这样便得到如下的ANN:&
然后按照BP学习算法对ANN中的参数进行学习更新(虚线连接的单元不更新,因为认为这些神经元被临时删除了)。这样一次迭代更新便完成了。下一次迭代中,同样随机删除一些神经元,与上次不一样,做随机选择。这样一直进行瑕疵,直至训练结束。&
Dropout方法是通过修改ANN中隐藏层的神经元个数来防止ANN的过拟合。
参考文献:
我的热门文章
即使是一小步也想与你分享

我要回帖

 

随机推荐