1. 评估假设函数(Evaluating Hypothesis Function)

在我们确定学习算法参数的时候,我们通常会选择是训练误差最小化的参数。但是并不是训练误差越好效果就越好,因为存在过拟合的问题。如下图所示,该模型的训练误差很小,但是曲线过度拟合了训练集的特征,所以在其他新的数据集上的表现就会比较差。

但是我们怎么样去判断一个模型是否过拟合呢?当然,我们可以像上面一样绘制模型来判断,但是如果一旦特征的数目多起来,那么绘制图形就会非常困难,所以我们需要另一种方式来评估假设函数。

为了检验模型是否过拟合,我们可以将数据分为训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集。训练集和测试集一定要随机分配,也就是说训练集和测试集中一定要有相同或者相似的数据分布,这一点很重要。训练集得到学习后的模型,对测试集运用该模型,可以计算误差。

对于线性回归模型,我们利用测试集数据计算代价函数J

对于逻辑回归模型,我们也可以利用测试集数据计算代价函数,例如:

还可以计算误分类的比率,对于每一个测试集实例,计算:

然后对计算结果求平均。

2. 模型选择和交叉验证集(Model Selection and Train Validation Test Sets)

假设我们要在10个不同次数的二项式模型之间进行选择:

当然次数越高的多项式模型越能拟合训练集数据,但是也越有可能出现过拟合,我们应该选择更具广泛性的模型,所以我们需要交叉验证来帮助我们选择模型。什么是交叉验证呢?也就是说,我们使用数据集的60%作为我们的训练集,20%的数据作为交叉验证集,另外的20%的数据作为测试集,即:

模型的选择方法为:

① 使用训练集训练出的10个模型

② 用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)

③ 选取代价函数值最小的模型

④ 用步骤3中选出的模型对测试集计算得出推广误差(代价函数的值)

训练误差的计算公式为:

检查验证误差的计算公式为:

测试误差的计算公式为:

3. 诊断偏差和方差(Diagnosing Bias and Variance)

如果运行一个算法,其表现不理想可能有两种原因,一种是过拟合,另一种是欠拟合。其中过拟合又被称为高方差,欠拟合又被称为高偏置。我们可以借助训练集和交叉验证集的代价函数误差与多项式的次数绘制在同一张图表上来帮助分析:

从图中可以发现,对于训练集,随着多项式次数d的增加,训练误差变得越来越小,拟合程度越来越高;对于交叉验证集,随着d的增加,误差呈现小减小后增大的趋势,转折点就是模型开始过拟合的时候

如果我们的交叉验证集误差较大,应该怎么判断是方差还是偏差呢?由上图我们可以得到:

训练集误差和交叉验证集误差近似时:此时处于高偏差/欠拟合状态

交叉验证集误差远大于训练集误差时:此时处于高方差/过拟合状态

4. 正则化和偏差/方差(Regularization and Bias_Variance)

将代价函数后面加上正则化项是防止过拟合的,但是选择不当的惩罚系数λ式,也会造成高偏差与高方差问题,如下图所示

如果λ过于大,那么得到的模型参数几乎为0,此时模型处于欠拟合/高偏差的状态;如果λ对于小,那么得到的模型参数将会很大,此时的模型处于过拟合/高方差的状态。

当λ比较小时,训练集误差较小(过拟合)而交叉验证集误差较大;随着λ的增加,训练集误差不端增加(欠拟合),而交叉验证集误差则是先减小后增加。趋势如下图所示:

5. 学习曲线(Learning Curves)

学习曲线是一个很好的工具,我们经常使用学习曲线去判断某一个学习算法是否处于偏差,方差问题。学习曲线是学习算法的一个很好的合理检验。学习曲线将训练集误差和交叉验证集误差作为训练集实例数量(m)的函数绘制的图表。

当训练较少行数据的时候,训练的模型将能够非常完美地适应较少的训练数据,但是训练出来的模型却不能很好地适应交叉验证集数据或测试集数据。

在高偏差/欠拟合的情况下,增加数据到训练集不一定有帮助;在高方差/过拟合的情况下,增加更多数据到训练集可能可以提高算法效果。

解决高方差的方法:

① 获得更多的训练实例

② 尝试减少特征的数量

③ 尝试增加正则化程度λ

解决高偏差的方法:

① 尝试获得更多的特征

② 尝试增加多项式特征

③ 尝试减少正则化程度λ

入门机器学习(九)--应用机器学习的建议相关推荐

  1. Spark入门之九:机器学习简介

    机器学习概念 在维基百科上对机器学习提出以下几种定义: " 机器学习是一门人工智能的科学,该领域的主要研究对象是人工智能,特别是如何在经验学习中改善具体算法的性能 " . &quo ...

  2. 机器学习九大算法---支持向量机

    机器学习九大算法---支持向量机 出处:结构之法算法之道blog. 前言 动笔写这个支持向量机(support vector machine)是费了不少劲和困难的,原因很简单,一者这个东西本身就并不好 ...

  3. 入门之路:“机器学习初学者”公众号2019年的精选原创文章

    "机器学习初学者"公众号2019年的精选原创文章合集,适合初学者入门 AI.本文建议用微信收藏,用碎片时间学习.(黄海广) 导语 AI 初学者最大的问题就是:资料太多!!!看不完! ...

  4. python机器学习及实践_机器学习入门之《Python机器学习及实践:从零开始通往Kaggle竞赛之路》...

    本文主要向大家介绍了机器学习入门之<Python机器学习及实践:从零开始通往Kaggle竞赛之路>,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助. <Python 机 ...

  5. 机器学习算法一览,应用建议与解决思路

    机器学习算法一览,应用建议与解决思路 作者:寒小阳  时间:2016年1月.  出处:http://blog.csdn.net/han_xiaoyang/article/details/5046933 ...

  6. TensorFlow入门:第一个机器学习Demo

    TensorFlow入门:第一个机器学习Demo 2017年12月13日 20:10:23 阅读数:8604 本文主要通过一个简单的 Demo 介绍 TensorFlow 初级 API 的使用方法,因 ...

  7. python常用代码入门-入门十大Python机器学习算法(附代码)

    入门十大Python机器学习算法(附代码) 今天,给大家推荐最常用的10种机器学习算法,它们几乎可以用在所有的数据问题上: 1.线性回归 线性回归通常用于根据连续变量估计实际数值(房价.呼叫次数.总销 ...

  8. 【好书推荐】推荐一份从入门到进阶的机器学习书单

    今天推荐的图书专注机器学习主题,一共7本,都是经过实践检验的好书--<机器学习><图解机器学习><机器学习实战><机器学习系统设计><Spark机 ...

  9. 吴恩达机器学习笔记(九)——大规模机器学习

    大规模机器学习 1 大规模机器学习可行性 由之前机器学补充里的知识可知,有的时候并不是数据越多对算法越好,当方差偏小的时候,说明此时的拟合度会比较大,数据缺乏泛性,这个时候使用更大的数据集可能会对算法 ...

最新文章

  1. VC:其他控件(CProgressCtrl、CScrollBar、CDateTimeCtrl、CMonthCalCtrl)
  2. Y君:天天增删改查,又能怎么样?
  3. 【Verilog HDL 训练】第 04 天(竞争、冒险、译码等)
  4. 电脑键盘数字键失灵_C4D/3dmax/MaYa三维设计——高档机械键盘推荐·红轴(200元左右预算)...
  5. 第 16 章 反射(Reflection)
  6. arma找不到合适的模型_TAP300R系列直角方肩立铣刀,您还在为找不到合适刀具发愁吗?...
  7. jzoj4229-学习神技【逆元,费马小定理】
  8. 【selenium 小练手 抓取某大厂TP】
  9. 我肝了一个月,给你写出了这本 Java 开发手册!
  10. pro缺点和不足 一加7t_看点满满,一用难忘:一加7T上手体验全方位测评
  11. Android实现百度地图定位服务
  12. SQL 正则表达式 匹配方式
  13. 字符设备驱动应用---LED设备驱动实现
  14. 文明与征服萨拉丁怎么搭配阵容?
  15. 实战!双硬盘安装图解!
  16. 人工神经网络技术基础
  17. Fly.Box 企业网盘2.2.1 发布
  18. Python 实例教学_ 03_列表
  19. 内存管理 - mblock算法
  20. 云大计算机831参考资料,云南大学2016年考研英语语言文学专业考研初试复试经验分享-CallmeSpell...

热门文章

  1. Spring Boot 热启动
  2. 5分钟了解VMware vSAN的分布式RAID
  3. 总结阐述Cocos2d-X与Cocos2d-iphone区别
  4. 小汤学编程之MySQL(三)——约束、多表查询、事务和数据库其他操作
  5. Leetcode883.Projection Area of 3D Shapes三维形体投影面积
  6. Android(java)学习笔记69:短信发送器
  7. Flutter PageView 使用详细概述
  8. JavaScript中的Boolean 方法与Number方法
  9. java中的多线程来看一看基础了
  10. Mr.J--JS学习(事件处理函数包装)