如何应用ML的建议-上
本博资料来自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的建议-上的更多相关文章
- 如何应用ML的建议-下
正则化与过拟合(highvariance)和欠拟合(highbias)的关系-部分(五) ML的诊断方法-部分(六) 如何采取下一步-部分(七) 部分(五) 从图中可以看出,正则化项可以用来影响模型函 ...
- thinkphp微信开发之jssdk图片上传并下载到本地服务器
public function test2(){ $Weixin = new \Weixin\Controller\BaseController(); $this->assign('signPa ...
- java运维: 一次线上问题排查所引发的思考
本文转载自 crossoverJie 的b博客 https://www.cnblogs.com/crossoverJie/p/9282065.html 前言 之前或多或少分享过一些内存模型.对象创建之 ...
- Spark中ml和mllib的区别
转载自:https://vimsky.com/article/3403.html Spark中ml和mllib的主要区别和联系如下: ml和mllib都是Spark中的机器学习库,目前常用的机器学习功 ...
- C#在Linux上的开发指南
本人才疏学浅,在此记录自己用C#在Linux上开发的一点经验,写下这篇指南.(给想要在Linux上开发C#程序的朋友提供建议) 目前在Linux上跑的网站:http://douxiubar.com | ...
- .NET机器学习 ML.NET 1.4预览版和模型生成器更新
ML.NET 是面向.NET开发人员的开源和跨平台机器学习框架. ML.NET 还包括Model Builder (一个简单的UI工具)和 CLI ,使用自动机器学习(AutoML)构建自定义 ...
- Python语言的特点及自学建议
Python语言的特点Python语言是一种被广泛使用的高级通用脚本编程语言,具有很多区别于其他语言的特点,这里仅列出如下一些重要特点.(1)语法简洁:实现相同功能,Python语言的代码行数仅相当于 ...
- 如何自动加载scratch3.0的页面上实现自动加载原有的作品
首先,我们在安装scratch3.0后,浏览器默认打开的是编程的页面.如下图: 那么我们希望开发一个功能,就是打开的时候默认加入某一个SB3的开发文件 1.首先,我们需要有一个.SB3的开发文件,建议 ...
- tensorflow 单机多GPU训练时间比单卡更慢/没有很大时间上提升
使用tensorflow model库里的cifar10 多gpu训练时,最后测试发现时间并没有减少,反而更慢 参考以下两个链接 https://github.com/keras-team/keras ...
随机推荐
- Python args kwargs 技巧
def f(*args): print(args) a=[1, 2, 3] f(a) f(*a) 运行结果: ([1, 2, 3],) (1, 2, 3) def f(**kwargs): print ...
- ssms2014和ssms2016版本错误定位的区别
偶尔对比起2016以下的版本(比如ssms2014),ssms2016有一个小地方有区别.就是报错的行号有区别 举个例子,下面同样的语句在ssms2014和ssms2016里面运行.就是如下的效果 C ...
- 安卓开发_关于WebView使用链接时调用浏览器显示的问题
在我们的实际开发中,我们用到WebView就是为了在自己的APP中的某个部分来显示指定网页的效果. 但是在学习的过程中,我发现一个问题: 有的网页使用WebView控件显示出来以后,再点击网页中的某个 ...
- scrapy系列(三)——基础spider源码解析
前面两章介绍了scrapy的安装和项目的新建,那么这一章就讲讲spider吧. scrapy有个命令是runspider, 这个命令的作用就是将一个spider当做一个python文件去执行,而不用创 ...
- 跨站请求伪造(CSRF)
1. 什么是跨站请求伪造(CSRF) CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者session Riding,通常缩 ...
- [20171206]rman与truncate.txt
[20171206]rman与truncate.txt --//昨天下班在回家的路上,突然想起以前遇到的问题,就是truncate表后,rman做备份时会备份多少truncate表的信息,--//当时 ...
- JMeter 脚本开发(五)
一.JMeter 元件运行顺序 执行顺序逻辑如下: 1.配置元件(如果存在) 2.前置处理器(如果存在) 3.定时器(如果存在) 4.取样器(如果存在) 5.后置处理器(如果存在且取样器的结果不为空) ...
- Excel快捷键大全 Excel2013/2010/2007/2003常用快捷键大全
一个软件最大的用处是提高工作效率,衡量一个软件的好坏,除了是否出名之外,最主就是能否让一个新手更快的学会这个软件和提高工作速度.就拿Excel表格来说吧,平常办公中我们经常会用它来制作表格,统计数据或 ...
- Oracle 11g 发行版2的安装,PLSQL_Developer安装 , Oracle数据库安装失败,完全卸载,常用的命令
Oracle 11g 发行版2的安装 PLSQL_Developer安装 Oracle数据库安装失败,完全卸载oracle11g 常用的命令 Oracle 11g 发行版2的安装 1. 下载 下载地址 ...
- Mongo学习---mongo入门1
Docker安装以及设置mongo用户 docker pull mongo (拉取镜像 默认最新版本) docker images (查看镜像) docker run -p 27017:27017 - ...