如何应用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 ...
随机推荐
- JS闭包和引用
简介 Javascript 中一个最重要的特性就是闭包的使用.因为闭包的使用,当前作用域总可以访问外部的作用域.因为Javascript 没有块级作用域,只有函数作用域,所以闭包的使用与函数是紧密相关 ...
- 【代码笔记】Web-ionic-列表
一,效果图. 二,index.html代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...
- 从零开始学习html(八)CSS选择器——下
六.子选择器 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" ...
- SyntaxError: JSON.parse: bad control character in string literal at line 1 column 16 of the JSON data
JSON.parse转化Json字符串时出现:SyntaxError: JSON.parse: bad control character in string literal at line 1 co ...
- CentOS7系列--安装Chrome浏览器
CentOS7系列--安装Chrome浏览器 1. 创建yum源文件 [root@server20 ~]# cd /etc/yum.repos.d/ [root@server20 yum.repos. ...
- JavaScript按日期排序之灵活排序
上代码: var dataContent = [ { ID: "1", hobbit: "去音乐", sport: "在篮球", movie ...
- 我的简历 PHP Java C# 技术总监
石先生 ID:303321266 目前正在找工作 13611326258 hr_msn@163.com 男|32 岁 (1985/08/06)|现居住北京-海淀区|12年工作经验 ...
- HTTP的Referrer和Referrer Policy设置
Referrer referrer是HTTP请求header的报文头,用于指明当前流量的来源参考页面.通过这个信息,我们可以知道访客是怎么来到当前页面的.这对于Web Analytics非常重要,可以 ...
- linux系统运行状态检查
目录 1 CPU状态检查 1.1 运行时间 1.2 CPU占用率 1.3 单核占用率 2 内存状态检查 2.1 内存占用率 2.2 交换分区占用率 3 磁盘状态检查 3.1 系统磁盘容量占用率 3.2 ...
- The Tomcat connector configured to listen on port 8080 failed to start. The port may already be in use or the connector may be misconfigured
springboot 8080端口被占用报错:The Tomcat connector configured to listen on port 8080 failed to start. The p ...