Andrew Ng-ML-第十二章-机器学习系统设计
1.确定执行的优先级
图1.邮件垃圾分类举例
选择100个单词作为指示是否是垃圾邮件的指标,将这些单词作为特征向量,只用0/1表示,出现多次也只用1表示,特征变量用来表示邮件。
通常情况下,会选择训练集中出现频率最多的n(在10000到50000)之间的几个单词。
图2.改进模型的建议
1.收集更多的数据。比如说honeypot就故意将邮箱地址暴露给垃圾邮件发送者,从而获取很多垃圾邮件作为数据集。
2.根据邮件路由信息(邮件头)。但是通常发送者会隐藏一些特征导致不能从邮件头中获取信息。
3.关注邮件体,比如单词的单复数discount和discounts应该被认为是一个单词吗?这单词变形之类的问题
4.创建一个复杂的算法来检测拼写错误,比如m0rtgage和w4tch.
2.误差分析(如何开始建立一个机器学习系统的步骤)
图3.建议的方法
第一步:首先是先建立一个简单的算法模型,然后在验证集上测试。(Ng会先花24小时做一个简单的速成模型,虽然效果并不好,但是具有指导意义)
第二步:画出学习曲线,以此来判断是增加更多数据,特征,或者是其他,这是很有帮助的。
第三步:误差分析。将误分类的数据,寻找这些误分类数据存在的特点。
做一个简单的学习模型可以指导接下来往哪个方面改进。
图4.误差分析
假如入当前是一个邮件垃圾检测,在误差分析时,假设有100个分类错误的(将垃圾邮件检测为正常,或将正常检测为错误),并人工检测这些邮件的特点:
(1)邮件的类型 (2)使算法能够正确分类的特征有哪些?
比如,卖药、卖赝品、窃取密码、等类型。特征包括:错误拼写(m0rgage和med1cine)、异常的邮件路由、异常的标点符号。
将精力放在简单模型误分类的邮件上,观察它们有什么特点。
图5.数值评估的重要性
对于邮件垃圾检测来说,是否需要使用词干提取算法,方法就是对比应用词干提取算法和不应用词干提取算法的情况下,给出一个具体的数值来衡量两者的优劣,即设定误差度量值,如在交叉验证集上的错误率,以此来评判模型是更好了,还是变差了。
总体本小节重点是:算法评估和误差度量值选择
另外,Ng强调,应该在验证集上做误差分析,而不是测试集上,在测试机上做误差分析是不符合数学原理的。
3.不对称性分类的误差评估
图6.偏斜类的分类例子
在癌症分类的例子中,训练了一个逻辑回归模型,当y=0时未患癌症,y=1时患癌症;模型在测试集上的误差是1%(99%诊断为正确)。
但是当前的数据集中,只有0.50%的癌症患者,那么这么来看1%的误差就很大了。
这样的数据集分布十分不均衡,一种远远大于另一种的情况就是偏斜集。
这时候如果我们直接使用图中的函数,直接将所有的分类y都设置为0,那么误差是0.5%(准确率为99.5%),如果只从选取的误差度量值来看模型效果好了,但是模型的真正性能是否改进了?并没有。综上,对偏斜集不能使用误差度量值来表示模型是否改进了。
图7.查准率与召回(查全)率
当y=1出现很少时,需要检测查查准率吧和召回率。
方格中横轴是真正的类别:
查准率=真正类/预测为正类的=真正类/(假正类+真正类)——在预测为癌症的患者中,有多少是真正患癌症的?;
召回率=真正类/所有正的=真正类/(真正类+假负类)——在所有真正患癌症的患者中,有多少是被检测出来的?。
(如果使用y=0的话,召回率很低,在所有真正患癌症的人中,没有一个是被检测出来的)
对于偏斜类来说,如果这两个指标都非常高,那么就是一个好的学习算法。
4.查准率与召回率的权衡
图8.查准率与召回率的关系
在肿瘤预测的时候,可能不仅仅让h_θ(x)>=0.5而是让其>=0.9时,也就是说不轻易将病人判断为癌症患者。这就是一个阈值,是要70%的置信度还是90%的置信度来预测y=1。
假设只有在十分确信的情况下才将其判定为癌症患者,那么就是会 高查准率和低查全率;
假设不想误判为没有癌症,避免假正,就是高召回率和低查全率。
更加一般地,设置一个阈值根据其曲线,可以选择一个二者均衡的值,来判断y=1。然而是否有办法确定阈值的选择呢?看下边:
图9.好的回归模型
因为查准率与召回率是负关系,那么如何进行判断哪个模型更好呢?图中给出了两种判断方法,一种是平均值,但显然不行,算法3和算法1,算法3明显是不好的算法;
使用F1公式,来进行判断,当P、R均为0时,F1为0,P、R均为1时,F1为1,也就是整个的打分是在(0,1)之间的。这是一个好的权衡查准率与召回率的公式。
5.机器学习数据
图10.好的算法与大量数据
一个非常著名的结论表示,一个好的算法,好一个劣质的算法,但是对劣质算法给予了更多的数据,反而劣质算法表现得更好,因此有一个结论“谁能胜利,取决于谁有更多的数据而不是更好的算法”。
图11.大数据理论
当给出特征时,对人来说,能够根据预测出y呢?
当使用一个有很多参数的学习算法时(比如多特征的逻辑和线性回归,有很多隐含层的神经网络模型)那么假设它的一个低偏差的,即其训练误差很小;那么如果使用一个大的训练集,这样是不太可能去过拟合的,那么在测试集上的误差也就≈训练集上的误差;总的也就相当于测试误差也很小,那么这将是一个很好的回归模型。
Andrew Ng-ML-第十二章-机器学习系统设计的更多相关文章
- PRML读书会第十二章 Continuous Latent Variables(PCA,Principal Component Analysis,PPCA,核PCA,Autoencoder,非线性流形)
主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:00:49 我今天讲PRML的第十二章,连续隐变量.既然有连续隐变量,一定也有离散隐变量,那么离散隐变量是 ...
- <构建之法>第十一章、十二章有感
十一章:软件设计与实现 工作时要懂得平衡进度和质量.我一直有一个困扰:像我们团队这次做 男神女神配 社区交友网,我负责主页的设计及内容模块,有个队友负责网站的注册和登录模块,有个队友负责搜索模块,有个 ...
- sql 入门经典(第五版) Ryan Stephens 学习笔记 (第六,七,八,九,十章,十一章,十二章)
第六章: 管理数据库事务 事务 是 由第五章 数据操作语言完成的 DML ,是对数据库锁做的一个操作或者修改. 所有事务都有开始和结束 事务可以被保存和撤销 如果事务在中途失败,事务中的任何部分都不 ...
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
- [CSAPP笔记][第十二章并发编程]
第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟 ...
- perl5 第十二章 Perl5中的引用/指针
第十二章 Perl5中的引用/指针 by flamephoenix 一.引用简介二.使用引用三.使用反斜线(\)操作符四.引用和数组五.多维数组六.子程序的引用 子程序模板七.数组与子程序八.文件句 ...
- 第十二章——SQLServer统计信息(4)——在过滤索引上的统计信息
原文:第十二章--SQLServer统计信息(4)--在过滤索引上的统计信息 前言: 从2008开始,引入了一个增强非聚集索引的新功能--过滤索引(filter index),可以使用带有where条 ...
- 第十二章——SQLServer统计信息(3)——发现过期统计信息并处理
原文:第十二章--SQLServer统计信息(3)--发现过期统计信息并处理 前言: 统计信息是关于谓词中的数据分布的主要信息源,如果不知道具体的数据分布,优化器不能获得预估的数据集,从而不能统计需要 ...
随机推荐
- React组件设计(转)
React组件设计 组件分类 展示组件和容器组件 展示组件 容器组件 关注事物的展示 关注事物如何工作 可能包含展示和容器组件,并且一般会有DOM标签和css样式 可能包含展示和容器组件,并且不会有D ...
- 关于 ArrayList.toArray() 和 Arrays.asList().toArray()方法
1.ArrayList.toArray() 理解 * 通过源码我们可以看到返回的是Object类型的数组,失去了原有的实际类型,虽然底层存储是具体类型的对象,这也正体现了文档中说的:该方法起到了 ...
- Elasticsearch学习之深入搜索四 --- cross-fields搜索
1. cross-fields搜索 一个唯一标识,跨了多个field.比如一个人,标识,是姓名:一个建筑,它的标识是地址.姓名可以散落在多个field中,比如first_name和last_name中 ...
- jenkins与SonarQube集成
一.SonarQube 我的理解是,SonarQube就是一个对代码进行分析的平台,其功能可以通过插件扩展.支持多种语言,也支持静态代码检查.发现潜在bug等. 以下是参考信息: 维基百科:https ...
- pip安装python包出现Cannot fetch index base URL http://pypi.python.org/simple/
pipinstall***安装python包,出现 Cannot fetch index base URL http://pypi.python.org/simple /错误提示或者直接安装不成功. ...
- Docker 启动 Centos 镜像 提示"Error response from daemon: No command specified"
奇怪的是当我执行启动其他的镜像的时候并没有报错,找了半天资料发现在启动centos这个镜像的时候需要在docker命令后面指定命令参数“/bin/bash”
- Unity3D笔记 切水果二 刀光剑影
一.步骤一创建一个空GameObject.js 二.代码 #pragma strict var myColor:Color; var firstPosition:Vector3;//鼠标点击的第一个点 ...
- ThreadLocal Java并发
ThreadLocal 文章来源:http://con.zhangjikai.com/ThreadLocal.html ThreadLocal 主要用来提供线程局部变量,也就是变量只对当前线程可见. ...
- OC开发_整理笔记——友盟分享(社交化组件)
0.友盟的地址 http://dev.umeng.com,进入友盟,在使用友盟之前我们需要注册账号获取key (1 进入我们的产品,添加新应用 (2 输入信息,然后就会获取到key 1.选择社会化分 ...
- MatLab Mark Points 给点标序号
在MatLab中,我们有时要给画出的点按一定顺序标上序号,下面这个简单的例子实现这个功能: x=rand(,); y=rand(,); plot(x,y,'r*'); text(x+:));