如何评估和优化你的学习算法以及学习模型如何选择?

前言 :

前面我们学习了线性回归,逻辑回归,神经网络等相关的机器学习算法,那么你如何评价你的算法好坏?如果你的算法执行结果并不是令人满意的结果,那么你又如何改进和优化你的学习算法?本文将讲解一些评价算法的方法,以及优化算法的一些高效指标。

一、如果你测试发现你的预测函数表现得并不好,你如何做?

假设你实现了线性回归去预测房价,
但是你测试发现hθ(x)在新的房价测试集上,表现出很大的误差,此时你会怎么做?

对于这种情况,大部分人会选择以下方法去改进他的学习算法:
1、获得更多的训练样本
2、尝试减少特征变量
3、尝试增加特征变量
4、尝试增加多项式特征(如x12;x22;x1x2等等)
5、减小λ
6、增加λ

上面这些确实是解决学习算法不能很好的应用到新数据集中的问题的方法,但是,如果没有一定思路的乱用上面的方法,那也许你在该方法上花了很多时间,但学习算法仍然没有改进。例如,有的人发现自己的学习算法在新的数据集上表现很差,他就不管三七二十一,直接花大把的时间去收集样本数据,他想当然的认为,自己学习算法效果不好,是因为训练样本太少,但是也许你的学习算法执行效果不好,根本不是训练样本个数的问题,那么你花费再多的时间在收集训练样本上,都将是徒劳的!因此我们应该有一定章法的评估自己的学习算法,以及学习算法执行效果不理想的原因,再根据分析的原因进而选择合适的方法来改进学习算法。

二、评估预测函数

1、将数据集随机分为训练集和测试集两部分,经典的分法是将数据集中70%作为训练集,另外30%作为测试集。例如已经随机分布的房屋价格数据集如下表分为训练集和测试集:

size price
2104 400
1600 330
2400 369
1416 232
3000 540
1985 300
1534 315
1427 199
1380 212
1494 243

note:训练集数据表示如下:
(x(1),y(1));(x(2),y(2));… (x(m),y(m)),其中m为从数据集中选出的70%的训练集数量
测试集数据表示如下:

其中mtest为从数据集中选出的30%的测试集数量。

2、对于线性回归中预测函数的评价过程
a、从训练集中学习得到参数θ,进而得到hθ(x);
b、用测试集计算预测函数hθ(x)的误差Jtest(θ),公式如下:

3、对于逻辑回归中预测函数的评价过程
a、从训练集中学习得到参数θ,进而得到hθ(x);
b、用测试集计算预测函数hθ(x)的误差Jtest(θ),公式如下:

c、0/1错分类误差test error,计算方式如下:

三、确定预测函数的多项式次数

1、如何确定预测函数的多项式次数,我们可以用训练集分别得到各个多项式次数的预测函数hθ(x),然后对各个hθ(x)用测试集进行误差评估,最后选出误差最小的hθ(x)作为预测函数。示例过程如下:

其中d代表多项式的次数,取出计算的Jtest(i))中最下的hθ(x),作为最终的预测函数

上面的过程看似合理,但是,我们会发现d的取值,是通过测试集中的数据得到,那么也就是我们由此得到预测函数在测试集中表现良好,但是放在新的数据集中表现如何就不得而知了,因此,上面的过程得到多项式的次数,并不可靠。

2、为了解决上面的问题,我们可以将数据集随机分为训练集,交叉验证集和测试集三个部分,也就增加了交叉验证集(cross validation)。经典的分法是训练集占60%;交叉验证集占20%;测试集占20%;例如已经随机分布的房屋价格数据集如下表分为训练集,交叉验证集和测试集:

size price
2104 400
1600 330
2400 369
1416 232
3000 540
1985 300
1534 315
1427 199
1380 212
1494 243

训练集和测试集的表示方法不变,交叉验证集的表示方法如下

有了交叉验证集,我们就可以用交叉验证集来计算各个多项式次数对应的误差,然后选择误差最小的预测函数,再用测试集评估预测函数的好坏,这样就能保证得到的预测函数可以泛化到新的数据集中

那么我们可以利用同样的思路去选择模型中正则化参数λ

3、线性回归中训练集误差,交叉验证集误差,测试集误差计算公式分别如下:


四、诊断一个学习算法是偏差(欠拟合)还是方差(过拟合)问题

1、Jcv(θ)和Jtrain(θ)关于多项式的次数的曲线图如下所示:

当多项式的次数太小时,预测函数处于欠拟合状态,即偏差问题,此时,训练集误差和交叉验证误差都很高;
当多项式的次数太大时,预测函数处于过拟合状态,即方差问题,此时,训练集误差很小,而交叉验证误差很高;两则随着多项式次数的增加呈现分道扬镳的趋势。

2、Jcv(θ)和Jtrain(θ)关于正则化参数λ的曲线图如下所示:

当λ太小时,预测函数处于过拟合状态,即方差问题,此时,训练集误差很低,而交叉验证误差都很高;
当λ太大时,预测函数处于欠拟合状态,即偏差问题,此时,训练集误差和交叉验证误差都很高;两则随着λ的增加,误差呈现不断接近,并越来越大的趋势。

通过上面图的特点,我们可以不断尝试自己的多项式次数和λ,找到图形的中间位置,也就找到了合适的模型。

五、学习曲线—判断你的学习模型时处于高偏差还高方差

1、高偏差状态下,Jcv(θ)和Jtrain(θ)关于训练样本数量m的曲线图如下所示:

高偏差即欠拟合的学习器随着训练样本数的增多,误差越来越大,而交叉验证误差一直处于较高的误差值,最后两者趋于几乎不变的状态。也就是如果你的预测函数处于高偏差的状态,此时,你收集再多的训练样本也无济于事,它不会改善你的学习结果的。

2、高方差状态下,Jcv(θ)和Jtrain(θ)关于训练样本数量m的曲线图如下所示:

高偏差即过拟合的学习器随着训练样本数的增多,交叉验证误差越来越小。也就是如果你的预测函数处于过拟合的状态,此时你采取收集更多的训练样本是可以改善你的学习算法的。

六、综上所述,如何正确选取对应的方法来提高自己的学习算法效能?

方法 适用情况
获得更多的训练样本 高方差(过拟合)
尝试减少特征变量 高方差(过拟合)
尝试增加特征变量 高偏差(欠拟合)
尝试增加多项式特征(如x12;x22;x1x2等等) 高偏差(欠拟合)
减小λ 高偏差(欠拟合)
增加λ 高方差(过拟合)

机器学习(十二)如何选择学习模型以及如何评估和优化你的学习模型?相关推荐

  1. 机器学习(十二) DeepDearm模型

    文章目录 前言 1 DeepDream原理 2 DeepDream算法流程 3 PyTorch实现DeepDream 4 全部代码(详细注释) 前言   卷积神经网络取得了突破性进展,效果也非常理想, ...

  2. 「超级干货大放送」机器学习十二种经典模型实例

    目录 实例一:线性回归波士顿房价 实例二:KNN实现电影分类 实例三:基于线性回归预测波士顿房价 ​ 实例四:sklearn完成逻辑回归鸢尾花分类 实例五:支持向量机完成逻辑回归鸢尾花分类 实例六:使 ...

  3. 入门机器学习(十二)--课后作业解析-偏差与方差(Python 实现)

    在本次作业中,我们要完成的是预测水库水位的变化预测大坝流出的水量.已知特征为水库的水位,要预测的y是大坝流出的水量. 编程作业 5 - 偏差和方差 这次练习我们将会看到如何使用课上的方法改进机器学习算 ...

  4. 机器学习(十二)——感知器算法

    感知器算法是一种可以直接得到线性判别函数的线性分类方法,它是基于样本线性可分的要求下使用的 线性可分与线性不可分 算法流程 感知器作为人工神经网络中最基本的单元,有多个输入和一个输出组成.虽然我们的目 ...

  5. 数学建模专栏 | 第十二篇:MATLAB CUMCM真题求解实例三:机理建模型

    机理建模问题在国赛中的占比呈上升趋势,近年来的题目有重庆交警平台设置.打车软件补贴优化.开放小区等问题, 本讲将以 2015 年的打车软件问题为例,介绍 MATLAB 在这类问题中的求解过程. 所介绍 ...

  6. (十二)运行环境(加载、性能优化、安全)【这些会了,你就可以飞了】

    运行环境 运行环境 网页加载过程 加载资源的形式 加载资源的过程 渲染页面的过程 性能优化.体验优化 原则 从何入手 让加载更快 让渲染更快 安全 XSS跨站请求攻击 XXS攻击 XSS预防 XSRF ...

  7. 【深度学习】:《PyTorch入门到项目实战》(十二)卷积神经网络:填充(padding)和步幅(stride)

    [深度学习]:<PyTorch入门到项目实战>(十二)填充(padding)和步幅(stride) ✨本文收录于[深度学习]:<PyTorch入门到项目实战>专栏,此专栏主要记 ...

  8. 中国大学生服务外包创新创业大赛近五届(八至十二)赛题汇总

    届次 赛题编号 命题企业 题目类别 专业方向 赛题 备注 十二 A01 今目标 应用类 企业服务 小微企业跨组织人才管理系统 1.企业服务--企业服务外包,如法务.财务.人力资源.知识产权.咨询策划. ...

  9. 写给Python开发者:机器学习十大必备技能

    作者 |  Pratik Bhavsar 译者 | 明明如月,编辑 | 夕颜 来源 | CSDN(ID:CSDNnews) 有时候,作为一个数据科学家,我们常常忘记了初心.我们首先是一个开发者,然后才 ...

最新文章

  1. 2019华为性格测试题_小红书达人力荐!华为 Mate20 Pro红蓝新色最懂女人心
  2. 开发ing经验关于游戏中寻路
  3. 转:几款主流 NoSql 数据库的对比
  4. 每天一道LeetCode----从数组中选择若干不连续元素使得总和最大
  5. 开篇词:中文自然语言处理——未来数据领域的珠穆朗玛峰
  6. 中国上榜前50名富豪当中,有多少人完全是通过白手起家?
  7. python实现刷博器(适用于新浪、搜狐)
  8. AttributeError: module ‘win32com.gen_py.00020905-0000-0000-C000-000000000046x0x8x7‘ has no attribute
  9. mac 解决sudo: no valid sudoers sources found, quitting
  10. 腾讯优图开源项目TNN总结与实践
  11. pandas写入excel指定行_使用pandas操作excel
  12. Navicat Premium 用于增强您的数据库管理系统
  13. 西安工程大学c语言试卷,C语言程序设计(西安工程大学)2020知到章节测试题答案...
  14. 运维工单系统 php,运维平台体系化建设之工单系统
  15. noip c语言算法教学视频,信息学奥赛课课通(C++)课程视频课程课件与代码
  16. ultraEdit32 /uedit32 自定义快捷键/自定义注释快捷键
  17. java实现zip压缩文件 (一)
  18. word中四号字体对应于14pt,其他字号如下
  19. uIP1.0 主动发送的问题理解
  20. (转)腾讯微信引发的产品建设经验

热门文章

  1. Vue+Electron
  2. 微信通讯录java实现_原生JS实现微信通讯录
  3. 51单片机定时器2用作串口
  4. python实现用户输入用户名和密码、当用户名为seven_【Python基础】练习题
  5. what‘s a work you can not do
  6. 优化基于FPGA的深度卷积神经网络的加速器设计
  7. codevs[3145]汉诺塔游戏
  8. ubantu安装网易云
  9. 公司开除并在离职证明上贬低被程序员怒怼,网友:总有耿直的员工
  10. SQL语句merge into的用法