本节目录:
1 如何选择并表达特征向量
2 误差分析
3 类偏斜的误差度量
4 查准率和查全率之间的权衡
5 机器学习的数据

1如何选择并表达特征向量
选择一个由 100 个最常出现在垃圾邮件中的词所构成的列表,根据这些词是否有在邮件中
出现,来获得我们的特征向量(出现为 1,不出现为 0),尺寸为 100×1。
为了构建这个分类器算法,我们可以做很多事,例如:

  1. 收集更多的数据,让我们有更多的垃圾邮件和非垃圾邮件的样本
  2. 基于邮件的路由信息开发一系列复杂的特征
  3. 基于邮件的正文信息开发一系列复杂的特征,包括考虑截词的处理
  4. 为探测刻意的拼写错误(把 watch 写成 w4tch)开发复杂的算法

在上面这些选项中,非常难决定应该在哪一项上花费时间和精力,作出明智的选择,比
随着感觉走要更好。当我们使用机器学习时,总是可以“头脑风暴”一下,想出一堆方法来试
试。实际上,当你需要通过头脑风暴来想出不同方法来尝试去提高精度的时候,你可能已经
超越了很多人了。大部分人并不尝试着列出可能的方法,他们做的只是某天早上醒来,因为
某些原因有了一个突发奇想.
2 误差分析
误差分析帮助你更系统地做决定。如果你准备研究机器学习的东西,或者构造机器学习应用程序,最好的实践方法是构建一个简单的算法,这样你可以很快地实现它。这样即使运行效果不好,也要把他再运行一遍,最后通过交叉验证检验数据。做完这些工作,画出学习曲线,检验误差,找出算法的问题或是否有高偏差和高方差问题。
即:当我们在构造垃圾邮件分类器时,我会看一看我的交叉验证数据集,然后亲自看一看哪些邮件被算法错误地分类。因此,通过这些被算法错误分类的垃圾邮件与非垃圾邮件,你可以发现某些系统
性的规律:什么类型的邮件总是被错误分类。经常地这样做之后,这个过程能启发你构造新
的特征变量,或者告诉你:现在这个系统的短处,然后启发你如何去提高它。
构建一个学习算法的推荐方法为:
5. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算

6. 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择
7. 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的实例,看看这些实例是否有某种系统化的趋势。

以我们的垃圾邮件过滤器为例,误差分析要做的既是检验交叉验证集中我们的算法产生
错误预测的所有邮件,看:是否能将这些邮件按照类分组。例如医药品垃圾邮件,仿冒品垃
圾邮件或者密码窃取邮件等。然后看分类器对哪一组邮件的预测误差最大,并着手优化。

思考怎样能改进分类器。例如,发现是否缺少某些特征,记下这些特征出现的次数。
例如记录下错误拼写出现了多少次,异常的邮件路由情况出现了多少次等等,然后从
出现次数最多的情况开始着手优化。
误差分析并不总能帮助我们判断应该采取怎样的行动。有时我们需要尝试不同的模型,
然后进行比较,在模型比较时,用数值来判断哪一个模型更好更有效,通常我们是看交叉验
证集的误差。
因此,当你在构造学习算法的时候,你总是会去尝试很多新的想法,实现出很多版本的
学习算法,如果每一次你实践新想法的时候,你都要手动地检测这些例子,去看看是表现差
还是表现好,那么这很难让你做出决定。到底是否使用词干提取,是否区分大小写。但是通
过一个量化的数值评估,你可以看看这个数字,误差是变大还是变小了。你可以通过它更快
地实践你的新想法,它基本上非常直观地告诉你:你的想法是提高了算法表现,还是让它变
得更坏,这会大大提高你实践算法时的速度。所以我强烈推荐在交叉验证集上来实施误差分
析,而不是在测试集上。
3 类偏斜的误差度量
设定某个实数来评估你的学习算法,并衡量它的表现,有了算法的评估和误差度量值。有一件重
要的事情要注意,就是使用一个合适的误差度量值,这有时会对于你的学习算法造成非常微
妙的影响,这件重要的事情就是偏斜类(skewed classes)的问题。类偏斜情况表现为我们的
训练集中有非常多的同一种类的实例,只有很少或没有其他类的实例。
查准率(Precision)和查全率(Recall) 我们将算法预测的结果分成四种情况:

  1. 正确肯定(True Positive,TP):预测为真,实际为真
  2. 正确否定(True Negative,TN):预测为假,实际为假
  3. 错误肯定(False Positive,FP):预测为真,实际为假
  4. 错误否定(False Negative,FN):预测为假,实际为真
    则:查准率=TP/(TP+FP)。例,在所有我们预测有恶性肿瘤的病人中,实际上有恶性肿
    瘤的病人的百分比,越高越好。
    查全率=TP/(TP+FN)。例,在所有实际上有恶性肿瘤的病人中,成功预测有恶性肿瘤的
    病人的百分比,越高越好。

    4.查准率和查全率之间的平衡

在很多应用中,我们希望能够保证查准率和召回率的相对平衡。
如果我们希望只在非常确信的情况下预测为真(肿瘤为恶性),即我们希望更高的查
准率,我们可以使用比 0.5 更大的阀值,如 0.7,0.9。这样做我们会减少错误预测病人为恶
性肿瘤的情况,同时却会增加未能成功预测肿瘤为恶性的情况。
如果我们希望提高查全率,尽可能地让所有有可能是恶性肿瘤的病人都得到进一步地
检查、诊断,我们可以使用比 0.5 更小的阀值,如 0.3。
我们可以将不同阀值情况下,查全率与查准率的关系绘制成图表,曲线的形状根据数
据的不同而不同:

一种选择这个阈值的方法 是计算F1值

我们选择使得 F1 值最高的阀值。
5 机器学习数据
得到大量的数据并在某种类型的学习算法中进行训练,可以是一种有效的方法来
获得一个具有良好性能的学习算法。而这种情况往往出现在这些条件对于你的问题都成立。
并且你能够得到大量数据的情况下。这可以是一个很好的方式来获得非常高性能的学习算
法。
改变了训练数据集的大小,并尝试将这些学习算法用于不同大小的训练数据集中,他们得到的结果

这些趋势非常明显,首先大部分算法,都具有相似的性能,其次,随着训练数据集的增
大,在横轴上代表以百万为单位的训练集大小,从 0.1 个百万到 1000 百万,也就是到了 10
亿规模的训练集的样本,这些算法的性能也都对应地增强了。
事实上,如果你选择任意一个算法,可能是选择了一个"劣等的"算法,如果你给这个劣
等算法更多的数据,那么从这些例子中看起来的话,它看上去很有可能会其他算法更好,甚
至会比"优等算法"更好。由于这项原始的研究非常具有影响力,因此已经有一系列许多不同
的研究显示了类似的结果。这些结果表明,许多不同的学习算法有时倾向于表现出非常相似
的表现,这还取决于一些细节,但是真正能提高性能的,是你能够给一个算法大量的训练数
据。
那么这种说法在什么时候是真,什么时候是假呢?因为如果我们有一个学习算法,并且
如果这种说法是真的,那么得到大量的数据通常是保证我们具有一个高性能算法的最佳方
式,而不是去争辩应该用什么样的算法。
假如有这样一些假设,在这些假设下有大量我们认为有用的训练集,我们假设在我们的
机器学习问题中,特征值

机器学习笔记八之机器学习系统设计相关推荐

  1. 机器学习笔记——数据挖掘与机器学习区别以及课程内容

    机器学习笔记 慕课|蒋良孝|中国地质大学 机器学习的定义 机器学习:利用经验改善计算机系统自身的性能 数据挖掘的定义 数据挖掘:识别出巨量数据中有效的.新颖的.潜在有用的.最终可理解的模式的非平凡的过 ...

  2. [机器学习笔记]Note9--机器学习系统设计

    继续是机器学习课程的笔记,本节课的内容主要是介绍如何设计一个机器学习系统. 首先要做什么 这节课将介绍如何设计一个机器学习系统,首先是以设计一个垃圾邮件分类器算法作为例子. 为了解决这个问题,首先要决 ...

  3. 机器学习笔记八:常见“距离”归纳

    一.明可夫斯基距离(Minkowski Distance) 有两个n维的点,他们之间的明可夫斯基距离的定义为: 你会发现这个式子和p-范数的形式很像.比如对于一个向量x,他的p-范数为: 所以,要是在 ...

  4. 2018-3-19李宏毅机器学习笔记八--HomeWork1-PM2.5 Predicition

    作业 首先的工作: (1)知道自己的输入输出是什么,需要得到什么 (2)理解数据的大致的意思 (2)数据集分配训练集和测试集 步骤一:定模型 自行分析,建立模型中的函数集,函数集中的每个函数根据判断确 ...

  5. 机器学习笔记(八)集成学习

    8.集成学习 8.1个体与集成 集成学习(ansemblelearning)通过构建并结合多个学习器来完成学习任务,也称为多分类器系统(multi-classifiersystem).基于委员会的学习 ...

  6. [机器学习笔记]Note15--大规模机器学习

    继续是机器学习课程的笔记,本节内容主要是介绍大规模机器学习的内容. 大型数据集的学习 对于一个过拟合的模型,增加数据集的规模可以帮助避免过拟合,并获得一个更好的结果. 但是对于一个大规模的数据,比如有 ...

  7. 机器学习笔记10——应用机器学习算法的建议

    目前,我们对机器学习的算法也有了一定的了解,这一节将会给大家一些建议,关于如何有效的使用机器学习算法.对于相同的算法,不同的人会使其发挥不同的效果,所以,这一节的主题就是教大家如何用机器学习算法解决具 ...

  8. 机器学习笔记 一:机器学习思路

    学习目录 一.机器学习派别 二.学习书籍 三.学习视频 四.数学基础 五.学习思路 一.机器学习派别 频率派:统计机器学习 贝叶斯派:概率图模型 二.学习书籍 李航<统计学习方法>: 周志 ...

  9. 吴恩达机器学习笔记 —— 18 大规模机器学习

    http://www.cnblogs.com/xing901022/p/9417633.html 本章讲了梯度下降的几种方式:batch梯度下降.mini-batch梯度下降.随机梯度下降.也讲解了如 ...

最新文章

  1. oracle调整字段精度的四种方法
  2. Java编程思想学习录(连载之:内部类)
  3. Python连接Oracle数据库,以字典形式返回结果
  4. jvm执行引擎全解,java解释器即时编译器,全都讲明白
  5. python中sort命令介绍以及list结构中统计各元素出现的个数的方法
  6. linux bash命令_Linux命令-您应该知道的基本Bash命令行技巧
  7. 远程查看室内亮暗情况
  8. 反应堆模式最牛的那篇论文--由solidmango执笔翻译
  9. Linux后台运行jar不产生nohup.out
  10. wepy一些问题和解决方案
  11. MongoDB再出安全事故 5800万商业用户信息泄露
  12. 解决weblogic.net.http.SOAPHttpsURLConnection incompatible with javax.net.ssl.HttpsURLConnection
  13. Spark性能优化之通过YDB实现比原生Spark性能高100倍的多表关联
  14. qq空间日志总显示服务器升级,QQ空间里加不上日志是怎么回事?
  15. 2017年下半年阅读书单
  16. Web标准概念--摘抄《CSS布局实录》
  17. PMP常考知识点核对单-10.沟通管理
  18. python 10行代码生成词云图片(基础词云、形状词云)
  19. python爬虫教程:如何用40行Python代码实现天气预报和每日鸡汤推送功能
  20. c语言怎么取一个数的平均值,c语言如何求n个数的平均值?

热门文章

  1. 数据安全治理的几个基本问题
  2. Emacs(洛谷P6866题题解,C++语言描述)
  3. 带前导0的数字三角形(洛谷P5721题题解,Java语言描述)
  4. 京东商品及评论爬虫(selenium)
  5. LOJ #6268 分拆数
  6. redis 安装配置
  7. Java匿名内部类里为什么能用外部变量
  8. php+mysql封装增删查改
  9. Powershell访问数组
  10. Git 的安装和创建版本库 。