本博资料来自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. HDU 6138 Fleet of the Eternal Throne(后缀自动机)

    题意 题目链接 Sol 真是狗血,被疯狂卡常的原因竟是 我们考虑暴力枚举每个串的前缀,看他能在\(x, y\)的后缀自动机中走多少步,对两者取个min即可 复杂度\(O(T 10^5 M)\)(好假啊 ...

  2. 从零开始学习html(七)CSS样式基本知识

    一.内联式css样式,直接写在现有的HTML标签中 <!DOCTYPE HTML> <html> <head> <meta http-equiv=" ...

  3. JS性能优化 之 文档片段 createDocumentFragment

    我们用原生JS进行开发时,经常会用到两种更新DOM节点的方法:innerHTML 和 appendChild() .其中 innerHTML 会完全替换掉原先的节点内容,如果我们是想向元素追加子节点的 ...

  4. 6个顶级Python NLP库的比较!

    6个顶级Python NLP库的比较! http://blog.itpub.net/31509949/viewspace-2212320/ 自然语言处理(NLP)如今越来越流行,在深度学习开发的背景下 ...

  5. mybatis学习系列五--插件及类型处理器

    2 插件编写(80-81) 单个插件编写 2.1实现interceptor接口(ibatis) invocation.proceed()方法执行必须要有,否则不会无法实现拦截作用 2.2 使用@int ...

  6. 【PAT】B1053 住房空置率(20 分)

    #include<cstdio> #include<string.h> #include<algorithm> using namespace std; int m ...

  7. zookeeper-01 概述

    1. Zookeeper概念简介和应用场景 1.1.  概念简介 Zookeeper是一个分布式协调服务:就是为用户的分布式应用程序提供协调服务 A.zookeeper是为别的分布式程序服务的 B.Z ...

  8. 在Eclipse中使用Maven jetty的debug模式

    1.右键项目debug as添加mvn命令: jetty:run 2.进入eclipse的菜单Run->Debug configurations,会看到maven build下对应的项目的mvn ...

  9. 【Ansible 文档】提示、推荐、注意事项

    1. 查看 详细 信息 如果你想要查看成功模块和不成功的详细输出,使用 --verbose 标识 2. 检查 playbook 的语法 使用 ansible-playbook 的 --syntax-c ...

  10. St_geometry 初始用

    数据准备 点表 CREATE TABLE point_stgeom tablespace UBOSS_STS_WAREHOUSE as select car_number, longid, latid ...