正则化与过拟合(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的建议-下的更多相关文章

  1. 如何应用ML的建议-上

    本博资料来自andrew ng的13年的ML视频中10_X._Advice_for_Applying_Machine_Learning. 遇到问题-部分(一) 错误统计-部分(二) 正确的选取数据集- ...

  2. [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 ...

  3. ML面试1000题系列(91-100)

    本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 91 简单说说RNN的原理?我们升学到高三准备高 ...

  4. Linux下栈溢出导致的core dump

    1 问题产生 前两天在干活的时候,写好的一个daemon程序,一跑就core,连main函数都进不去.从来没见过这阵势的职场新人被吓尿了,幸好不是在生产环境上测试.找来同事帮忙,看了好久也没看出问题, ...

  5. python安装MySQLdb:在windows下或linux下(以及eclipse中pydev使用msqldb的配置方法)

    写的非常好,可以解决问题: windows下:http://blog.csdn.net/wklken/article/details/7253245 linux下:http://blog.csdn.n ...

  6. AI繁荣下的隐忧——Google Tensorflow安全风险剖析

    本文由云+社区发表 作者:[ Tencent Blade Team ] Cradmin 我们身处一个巨变的时代,各种新技术层出不穷,人工智能作为一个诞生于上世纪50年代的概念,近两年出现井喷式发展,得 ...

  7. python MySQLdb在windows环境下的快速安装

    python MySQLdb在windows环境下的快速安装.问题解决方式 使用python访问mysql,需要一系列安装 linux下MySQLdb安装见 Python MySQLdb在Linux下 ...

  8. windows 环境下安装python MySQLdb

    使用Python访问MySQL,需要一系列安装 Linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.NET/wklken/arti ...

  9. 117、python MySQLdb在windows环境下的快速安装、问题解决方式

    使用Python访问MySQL,需要一系列安装 Linux下MySQLdb安装见 Python MySQLdb在Linux下的快速安装 http://blog.csdn.NET/wklken/arti ...

随机推荐

  1. 【pygame游戏编程】第一篇-----创建一个窗口

    下面我们一起来创建一个背景为蓝色的窗口作为游戏编程的开始: import sys import pygame def creat_screen(): #初始化pygame pygame.init() ...

  2. JavaScript 频繁发射事件处理的优化 --- 函数节流/事件稀释

    引子:昨天面试时面试官问了如何实现一个固定导航栏,在我答完后面试官问我可能存在哪些问题,如何优化? 这个问题我答得不太好,但现在回想起来应该有两个问题: 1. 把 fixbar元素 position: ...

  3. 洛谷P3899 [湖南集训]谈笑风生(线段树合并)

    题意 题目链接 Sol 线段树合并板子题,目前我看到两种写法,分别是这样的. 前一种每次需要新建一个节点,空间是\(O(4nlogn)\) 后者不需要新建,空间是\(O(nlogn)\)(面向数据算空 ...

  4. SG Input 软件安全分析之fuzz

    前言 前面介绍了通过静态读代码的方式去发现问题,这里介绍两种 fuzz 目标软件的方式. 相关文件 链接:https://pan.baidu.com/s/1l6BuuL-HPFdkFsVNOLpjUQ ...

  5. Flume Channel Selector

    Flume 基于Channel Selector可以实现扇入.扇出. 同一个数据源分发到不同的目的,如下图. 在source上可以定义channel selector: 1 2 3 4 5 6 7 8 ...

  6. typescritp 导出默认接口

    假如有ITest.ts文件,如下: export default interface ITest{ } 这样会报错,编译不通过.据说是设计成这样的,具体详细见:https://github.com/M ...

  7. Ant使用及项目实践

    1.简介 Ant 是一个 Apache 基金会下的跨平台的基于 Java 语言开发的构件工具.这是一个基于开放的操作系统构建和部署的工具,该工具需要从命令行执行. 2.特点 Ant 是基于 Java ...

  8. sql server递归

    with cte as ( select belongsAgent from [QPProxyDB].[dbo].[BS_ProxyInfo] where ProxyID = @ProxyID uni ...

  9. centos 6.5下安装nmap工具及简单用法

    Nmap是一款针对大型网络的端口扫描工具,被广泛应用于黑客领域做漏洞探测以及安全扫描,其主要功能有主机发现(Host Discovery). 端口扫描(Port Scanning). 版本侦测(Ver ...

  10. C++基础算法学习——汉洛塔问题

    汉诺塔问题古代有一个梵塔,塔内有三个座A.B.C,A座上有64个盘子,盘子大小不等,大的在下,小的在上(如图).有一个和尚想把这64个盘子从A座移到C座,但每次只能允许移动一个盘子,并且在移动过程中, ...