如何应用ML的建议-下
正则化与过拟合(highvariance)和欠拟合(highbias)的关系-部分(五)
ML的诊断方法-部分(六)
如何采取下一步-部分(七)
部分(五)
从图中可以看出,正则化项可以用来影响模型函数对数据是否过拟合,正则化项的本意是防止过拟合的,但是对于前面的lamuda的正确的选取却很重要,对于第一个坐标系来说,因为lamuda太大,导致正则化项很小,即在训练后会使得theta(1)~theta(n)都趋向于0,而只有一个参数theta(0),使得决策线(此处举例的是线,而非面)成为了一个常量函数,严重欠拟合;而对于lamuda很小的时候,相当于正则化项不存在(可以近似这么认为),那么还是依然处于过拟合状态。所以lamuda的正确的选取,对于具体的数据集来说是非常重要的,当然这是模型的属性,而非数据集的属性。
首先,我们假设没有正则化项,先计算在train,validation和test上的错误:
,然后选取不同的lamuda,比如0;0.02;0.04;0.06;.......10;10.24等,通过对不同的lamuda的选取然后带入有正则化的损失函数,求出不同lamuda对应的参数theta集,
如图,在通过有正则化项求出的theta 然后在带入没有正则化项的误差函数中,通过在train和validation上的不同表现来找到最合适的那个lamuda。蓝线表示Jtrain的变化,粉红色表示Jcv的变化,因为最初是没有lamuda的,所以在train上是处于拟合最好,也就是过拟合状态,随着lamuda的增大,开始朝着欠拟合状态发展, 而在validation上的变化显示,开始因为过拟合,所以显示高方差状态,即Jcv是很大的,在后面当lamuda很大的时候,是欠拟合状态,在validation上的表现依然是很差,所以找出那个中间项(个人考虑,那是不是不需要计算Jtrain,直接计算Jcv岂不是省事情?)其实这里只是为了说明一
个状况而已,因为在前面步骤中找到合适的lamuda然后求出相应的theta参数集,而在现实实验中,有可能第一次没有正则化项的对应的参数刚好就是理想的参数时,就不需要正则化项了,所以还是需要将Jtrain和Jcv都计算出来,然后进行相对应的比较,(即这个图是个理想图,而我们遇到的有可能只是图的一部分,所以没法确定是哪一部分,因为有可能有的参数完全不需要正则化项就能不是过拟合状态。)
部分(六)
对于开始说的如何对ML进行诊断,这部分给了一些答案,首先看图:
对于样本数量m来说,当m很小的时候,比如m=1,2,3,4的时候,右上角的图可以看出,模型可以轻松的进行拟合没有任何困难,这使得Jtrain可以直接达到0的状态,但是当m越来越大的时候,模型已经不能以Jtrain=0的状态进行拟合了,这就如左边的大坐标图所示,随着m的变大,Jtrain会变得越来越大,因为数据量越多,而模型处在一个有限拟合的状态,这时候其实也可以说是欠拟合了,但是对于Jcv来说,恰恰相反,因为m很小的时候,模型中的参数学习到的原始数据中的表征信息不是很多,所以无法对外来的数据进行预测,所以模型对于新样本的预测能力很差,随着m的增大,模型的参数越来越能够表示数据中隐藏的表征的信息,也就是这个模型越来越能够代表这些数据,这时候对于外来的样本,即
测试样本来说,他的预测能力就越来越好,所以有如图Jcv的趋势所示。
当你的模型处于欠拟合状态时:
如图所示,假设你的模型是欠拟合的,那么Jtrain随着m的增加会呈现图中粉红色曲线的趋势,假设在平坦的部分的时候m小于5,即m=5的情况下,Jtrain已经稳定,那么再多的数据也无法将Jtrain增加(这里认为m已经考虑到所有情况的数据,而后面的数据所产生的Jtrain都在之前的范围内,所以无法增加新的误差,)即如图所示,右下角的图,m增多的情况下,样本都在模型欠拟合状态中,而且,对于图中的例子来说,这时候的直线已经是最理想的直线模型(暂时没考虑其他非直线模型的情况下,即当前模型)而这时候Jcv开始如图中所示是很大的,随着m的增大,能够很好的学习数据的表征信息来进行预测,但是当模型趋于稳定的时候,已经无法将Jcv降得更低。为什么Jtrain会等于Jcv??是因为这里的模型在对于任何数据都是这种欠拟合的状态,在过少的参数和过多的样本的情况下,模型在train集和validation上的表现都是相似的,所以他们最后会趋于相等。
当你的模型处于过拟合状态时:
,这次假设你的模型是一个过拟合模型,产生的模型函数能够很好的拟合数据,对于右图中m=5 和m很大时,模型都能够很好的拟合,这时候随着m很小开始往m很大方向发展时,你发现你的Jtrain从小变大,开始有趋于平稳的趋势,而Jcv如上面欠拟合状况一样,开始很大,随着训练得到的参数的好转,能够表现更好的数据表征,但是当你数据训练结束时发现两者的差距都很大,表现在图中就是那个黑线所示,有很大的gap,而这时候,增加足够多的样本会变得有必要,会使得模型能够拟合更多的数据,如图中黑线右边部分所示,Jtrain和Jcv会趋于相交,但是最终如果增加过多的数据,那么就会如欠拟合所示会达到趋于稳定,最好相等的情况,那时候这个模型已经无法表现更多数据的表征,那么就会变得欠拟合起来。(此处考虑,那是不是不同的数据集,有着不同合适的模型,那对于真实的自然界来说,数据量无穷无尽,岂不是任何的模型最后都会趋于欠拟合状态?但是也有可能当自然状态下所有的数据的表征都能够很好的被捕捉,增加的新的自然界样本只是与之前的数据重复罢了,那么对于模型来说,并未增加新的样本。至少对于科研所使用的不同数据集来说,的确得考虑过拟合和欠拟合状态。)
部分(七)
现在可以回到部分(一)中的几种策略了:
正如ng注释的一样,对于欠拟合(high bias)和过拟合(high variance)的状态,都有着不同的策略,选错了下一步该做什么,那么就无异于浪费时间。
ng很好的在最后的时候回到了NN来进行讲解:
这里的cheaper和expensive是相对而言的,当你面对一个数据集,选择的网络太简单,那么就是欠拟合状态,而选择的太复杂,那么就是过拟合状态,这时候最好的选择是增加正则化项来降低过拟合,而不是选择一个简单的模型(个人觉得,一个是因为模型的选择风险太大,增加一哥正则化项所付出的代价较小,)但是在选择几层隐藏层的时候,一个方法是对于hide layer = 1,2,3的情况首先在train集上进行训练得到一个theta参数集,然后用这个集在validation上进行验证,找到你认为最好的那个选择。
结束。。。
如何应用ML的建议-下的更多相关文章
- 如何应用ML的建议-上
本博资料来自andrew ng的13年的ML视频中10_X._Advice_for_Applying_Machine_Learning. 遇到问题-部分(一) 错误统计-部分(二) 正确的选取数据集- ...
- [ML] I'm back for Machine Learning
Hi, Long time no see. Briefly, I plan to step into this new area, data analysis. In the past few yea ...
- ML面试1000题系列(91-100)
本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 91 简单说说RNN的原理?我们升学到高三准备高 ...
- Linux下栈溢出导致的core dump
1 问题产生 前两天在干活的时候,写好的一个daemon程序,一跑就core,连main函数都进不去.从来没见过这阵势的职场新人被吓尿了,幸好不是在生产环境上测试.找来同事帮忙,看了好久也没看出问题, ...
- python安装MySQLdb:在windows下或linux下(以及eclipse中pydev使用msqldb的配置方法)
写的非常好,可以解决问题: windows下:http://blog.csdn.net/wklken/article/details/7253245 linux下:http://blog.csdn.n ...
- AI繁荣下的隐忧——Google Tensorflow安全风险剖析
本文由云+社区发表 作者:[ Tencent Blade Team ] Cradmin 我们身处一个巨变的时代,各种新技术层出不穷,人工智能作为一个诞生于上世纪50年代的概念,近两年出现井喷式发展,得 ...
- python MySQLdb在windows环境下的快速安装
python MySQLdb在windows环境下的快速安装.问题解决方式 使用python访问mysql,需要一系列安装 linux下MySQLdb安装见 Python MySQLdb在Linux下 ...
- windows 环境下安装python MySQLdb
使用Python访问MySQL,需要一系列安装 Linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.NET/wklken/arti ...
- 117、python MySQLdb在windows环境下的快速安装、问题解决方式
使用Python访问MySQL,需要一系列安装 Linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.NET/wklken/arti ...
随机推荐
- 对GIL的一些理解
GIL:全局解释器锁 GIL设计理念与限制: python的代码执行由python虚拟机(也叫解释器主循环,CPython版本)来控制,python在设计之初就考虑到在解释器的主循环中,同时只有一个线 ...
- Salesforce自定义权限简介
自定义权限(Custom Permission) Salesforce默认提供了多种方式设定用户的权限,比如简档.权限集等.在这些设定中,已经包括了系统中的对象.应用.字段.页面布局等组件,管理员或开 ...
- 安卓开发_浅谈AsyncTask
现在就来学习一下AsyncTask. 一.先介绍一下AsyncTask: 在开发Android移动客户端的时候往往要使用多线程来进行操作,我们通常会将耗时的操作放在单独的线程执行,避免其占用主线程而给 ...
- ViewPager+Fragment切换卡顿解决办法
1.ViewPager设置预加载 我有4个tag,都不想被销毁,设置预加载个数为3. ViewPager viewPager; viewPager.setOffscreenPageLimit(3); ...
- HTTP的Referrer和Referrer Policy设置
Referrer referrer是HTTP请求header的报文头,用于指明当前流量的来源参考页面.通过这个信息,我们可以知道访客是怎么来到当前页面的.这对于Web Analytics非常重要,可以 ...
- [20171031]markhot.txt
[20171031]markhot.txt --//昨天看了https://jonathanlewis.wordpress.com/2017/10/02/markhot/,测试看看这样时候可以减少争用 ...
- 在LINUX上部署SOFA
JDK1.6环境变量 vim /etc/profile JAVA_HOME=/usr/local/java/jdk1.6.0_45PATH=$JAVA_HOME/bin:$PATHCLASSPATH= ...
- Centos7系统如何不重启系统识别新添加的硬盘?
今天在系统开机后插入三块硬盘,结果没有一块硬盘被系统识别到.后来找到了方法. echo "- - -" > /sys/class/scsi_host/host0/scan 上 ...
- php程序开发之实现网页跳转
php程序开发之实现网页跳转的三种方式 2017年04月16日 20:44:14 阅读数:3352 PHP目前是用来开发WEB项目的首选语言.Web项目中,从一个网页跳转到另一个网页是最常用的技术之一 ...
- 3.3Python数据处理篇之Numpy系列(三)---数组的索引与切片
目录 (一)数组的索引与切片 1.说明: 2.实例: (二)多维数组的索引与切片 1.说明: 2.实例: 目录: 1.一维数组的索引与切片 2.多维数组的索引与切片 (一)数组的索引与切片 1.说明: ...