本博资料来自andrew ng的13年的ML视频中10_X._Advice_for_Applying_Machine_Learning。

遇到问题-部分(一)

错误统计-部分(二)

正确的选取数据集-部分(三)

辨识是欠拟合还是过拟合-部分(四)

正则化与过拟合(high variance)和欠拟合(high bias)的关系-部分(五)

部分(六)、部分(七)见“如何应用ML的建议-下”

部分(一):

 

举个例子,当我们采用这样的模型(看过ng在网易上视频的人对预测房子价格的例子并不陌生),但是当我们使用了自认为合理的模型来进行预测的时候,发现得到的实际预测和期望差距太大,这时候肯定是算法中哪些地方不对,很多人会无所适从。不知道该怎么办。

在经过思维考虑后,很有想法的提出了几个自认为有助于改善的方法:

对于这个具体的例子来说,可以有这几个想法,是否是训练样本不够导致训练后的模型的参数不够去表征原始数据的信息。或者是特征太多造成的过拟合,或者是特征太少造成的欠拟合,还是因为正则化项太大导致模型函数太平滑使得对数据欠拟合,还是正则化项太小,导致对数据的过拟合等等。

通常来说,很多人是靠着感觉去选择对哪一步进行操作,在错误的选择上,有可能当付出很多的时间,最好却发现效果依然不好。所以如何合理的选择下一步该做什么,是非常有必要,而且效率的。这就是ML诊断:

部分(二):

首先,如图:

这种情况就算典型的过拟合状态,对于特征维度很小的时候,我们可以进行可视化得到模型的结果来发现是否过拟合还是欠拟合,但是当维度很多的时候,是无法进行可视化的。这时候需要将数据集分成两个部分(一般都是7:3分)

当然了,最好就是对数据集进行随机的选择70%作为训练数据集,剩下的随机打乱作为预测数据集,(其实这里自己觉得这里的需要划分的数据集可以是将最初的训练数据集划成两部分,当然,也可以将最初的训练集和预测集一起组合然后在进行划分。不论怎么说 这里都是为了找到模型不理想的问题所在。)

然后需要做的就是对前面选取的70%多的训练数据集照常的训练,为了得到一个固定的参数集,然后通过这个训练好的参数集来对剩下的30%数据进行预测,得到一个错误率(这里和原来的训练过程其实差不多),但是ng建议在对30%的预测数据进行预测的时候,需要的是统计错误率,即在预测数据集上错了多少次,对于分类问题来说,直接统计即可,对于回归问题来说,如下图所示:

图中为逻辑回归模型如何处理测试误差,就是将误差进行0-1的量化,对的就是0,错的就是1,统计预测错了多少次。

部分(三):

      ng认为特征选择问题,正则化项参数选择问题,都算作模型选择问题。(对正则化项的lamuda的选择也算?,才疏学浅,先不表。)在比如模型是多项式模型中,到底是1次多项式还是2次多项式还是n次多项式就是可以作为模型选择的来进行考虑,

图中显示,当你的模型在训练数据上的错误率低于在测试数据上的错误率, 那可能就是过拟合了。

当我们在选择好模型之后,在训练数据上进行训练,并得到模型的参数集,然后用这个参数集来对测试数据进行预测得到的错误率来选择模型,这本身对测试数据来说就是不公平的,测试数据原来扮演的就是我们未知的数据,而现在却通过测试数据来选取模型,那么我们就等于事先使用了测试数据 包含的信息,所以不是很严谨,所以为了解决这个问题,提出了将数据集分成三个部分:

如上图所示,才有将数据分成train set,validation set,和test set。

现在就可以通过中间的交叉验证集来,选择最好的参数集表示的模型,并用这个选择的模型来得到在test上的误差,以此来表示这个模型的生成误差。

部分(四)

如果模型在测试数据集上效果不好,多半是因为有着高偏移或者高方差的问题(是说模型对于数据来说不能很好的拟合的意思,相比较于理想的模型来说,我们的模型离得太远。)

图中可以看出,左小图 是欠拟合,右小图是过拟合,中间的是一个适当的选择,粉红的线是我们对不同的模型在同一个训练集上的错误率,是朝着越来越小的方向进行的,红色的是在交叉验证集或者测试集上的表现,可以看出在前期模型上是朝着理想的方向的,但是在某个点之后却开始误差变大。

从图中可以看出,前面的部分是欠拟合,也叫做有着高偏移的问题,后面叫过拟合,也叫做有着高方差的问题。这里教会我们如何来辨识是欠拟合还是过拟合。

如何应用ML的建议-上的更多相关文章

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

    正则化与过拟合(highvariance)和欠拟合(highbias)的关系-部分(五) ML的诊断方法-部分(六) 如何采取下一步-部分(七) 部分(五) 从图中可以看出,正则化项可以用来影响模型函 ...

  2. thinkphp微信开发之jssdk图片上传并下载到本地服务器

    public function test2(){ $Weixin = new \Weixin\Controller\BaseController(); $this->assign('signPa ...

  3. java运维: 一次线上问题排查所引发的思考

    本文转载自 crossoverJie 的b博客 https://www.cnblogs.com/crossoverJie/p/9282065.html 前言 之前或多或少分享过一些内存模型.对象创建之 ...

  4. Spark中ml和mllib的区别

    转载自:https://vimsky.com/article/3403.html Spark中ml和mllib的主要区别和联系如下: ml和mllib都是Spark中的机器学习库,目前常用的机器学习功 ...

  5. C#在Linux上的开发指南

    本人才疏学浅,在此记录自己用C#在Linux上开发的一点经验,写下这篇指南.(给想要在Linux上开发C#程序的朋友提供建议) 目前在Linux上跑的网站:http://douxiubar.com | ...

  6. .NET机器学习 ML.NET 1.4预览版和模型生成器更新

    ML.NET 是面向.NET开发人员的开源和跨平台机器学习框架. ML.NET  还包括Model Builder  (一个简单的UI工具)和  CLI  ,使用自动机器学习(AutoML)构建自定义 ...

  7. Python语言的特点及自学建议

    Python语言的特点Python语言是一种被广泛使用的高级通用脚本编程语言,具有很多区别于其他语言的特点,这里仅列出如下一些重要特点.(1)语法简洁:实现相同功能,Python语言的代码行数仅相当于 ...

  8. 如何自动加载scratch3.0的页面上实现自动加载原有的作品

    首先,我们在安装scratch3.0后,浏览器默认打开的是编程的页面.如下图: 那么我们希望开发一个功能,就是打开的时候默认加入某一个SB3的开发文件 1.首先,我们需要有一个.SB3的开发文件,建议 ...

  9. tensorflow 单机多GPU训练时间比单卡更慢/没有很大时间上提升

    使用tensorflow model库里的cifar10 多gpu训练时,最后测试发现时间并没有减少,反而更慢 参考以下两个链接 https://github.com/keras-team/keras ...

随机推荐

  1. 纯css抖动效果

    HTML: <button class="shake">按钮</button> CSS: .shake{ width: 120px; height: 33p ...

  2. 【读书笔记】iOS-使用蓝牙

    蓝牙是由Sony Ericsso公司研发出来的,它是一种无线通讯协议,主要用于短程和低耗电设备,其有效通讯范围约30ft,传输速度为1MB/s.与Wifi设计初衷不同,蓝牙适用于无线的外围设备,进行小 ...

  3. twindows下omcat8安装后,不能启动服务

    原因可能是cmd安装时,不是以管理员的身份运行cmd命令的.解决办法,以管理员身份运行cmd,进入tomcat安装/解压的bin目录下,先执行 service.bat remove 命令卸载服务,之后 ...

  4. Mysql存储引擎特性总结

    几个常用存储引擎的特点 下面我们重点介绍几种常用的存储引擎并对比各个存储引擎之间的区别和推荐使用方式. 特点 Myisam BDB Memory InnoDB Archive 存储限制 没有 没有 有 ...

  5. 框架模式MVC在安卓中的实践

    我们采用ListView来演示我们的MVC模式,目录结构: 实体类:包含了书的名字和图片信息 public class Book { //书名 private String name; //书的图片 ...

  6. Expo大作战(四十一)【完】--expo sdk 之 Assets,BarCodeScanner,AppLoading

    Expo大作战系列完结! 简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与 ...

  7. css文本属性用法总结

    稍稍总结了下css文本的一些属性用法,自己忘记的时候也可以用来查查,不用去查网站那么麻烦. 下面是部分总结,也希望对其他人有用 文本修饰 (1)text-decoration:  文本修饰(横线) 4 ...

  8. Ubuntu18---安装Redis和简单使用Redis

    前言 Redis是常用基于内存的Key-Value数据库,比Memcache更先进,支持多种数据结构,高效,快速.用Redis可以很轻松解决高并发的数据访问问题:作为实时监控信号处理也非常不错. 环境 ...

  9. [20180608]Wrong Results with IOT, Added Column and Secondary Index.txt

    [20180608]Wrong Results with IOT, Added Column and Secondary Index.txt --//链接:http://db-oriented.com ...

  10. 清空表与删除表mysql

    Mysql清空表(truncate)与删除表中数据(delete)的区别 为某基于wordpress搭建的博客长久未除草,某天升级的时候发现已经被插入了几万条垃圾留言,如果一条条删除那可真是累人的活. ...