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

继续是机器学习课程的笔记,本节课的内容主要是介绍如何设计一个机器学习系统。

首先要做什么

这节课将介绍如何设计一个机器学习系统,首先是以设计一个垃圾邮件分类器算法作为例子。

为了解决这个问题,首先要决定的是如何选择并表达特征向量x,然后使用y来作为分类结果,y=1表示是垃圾邮件,0则是非垃圾邮件。

然后这里的特征x,可以选择100个最常出现在垃圾邮件中的词来构成一个向量,那么将得到一个100×1大小的特征向量x,如01101,这里每一行都表示一个词语,0表示没有出现,1表示出现该词语。

实践中,一般会使用出现频率最多的n个词语(10000到50000个)作为训练集,而不是手动选择100个单词。

接下来就是考虑如何优化算法,即提高算法的效果了。

对于垃圾邮件分类器算法,我们可以选择下列其中一个方法来去改进算法:

  1. 首先是收集更多的数据,这样可以有更多的垃圾邮件和非垃圾邮件的样本,而且这个也是一个解决过拟合的办法
  2. 基于邮件的路由信息开发一系列复杂的特征
  3. 基于邮件的正文信息开发一系列复杂的特征,比如对于像单词”discount”和”diccounts”是否视为同一个单词处理,如何处理如”deal”和”Dealer”,还有就是有关标点符号的问题
  4. 为探测刻意的拼写错误开发复杂的算法,比如写成m0rtgage,med1cine(medicine),w4tches(watches)

这些方法很难决定应该在哪个方法上花费时间和精力,可以任意挑选其中一个方法来专研下去,但是切记首先需要做的是列出可行的方法有哪些,然后再挑选,而不是凭着感觉想到什么方法就用什么方法。

误差分析

误差分析可以帮助我们系统化地选择该做什么。

构建一个学习算法的推荐方法如下:

  1. 先设计一个简单快速实现的算法,实现该算法并用交叉验证集测试这个算法
  2. 绘制学习曲线,即判断是低拟合还是过拟合,然后再决定是增加数据,或者增加特征,还是做其他选择
  3. 进行误差分析,即人工检查交叉验证集中算法错误分类的实例,看看这些实例是否有某种系统化的趋势。

这里还是用垃圾邮件分类器为例,误差分析要做的是检验交叉验证集中我们算法产生错误预测的所有邮件,看:

  • 是否能将这些邮件按照类分组。例如医药品垃圾邮件,仿冒品垃圾邮件或者密码窃取邮件等。然后看分类器对哪一组邮件的预测误差最大,并着手优化。
  • 思考如何改进分类器。如发现是否缺少某些特征,记下这些特征出现的次数。比如记录错误拼写出现了多少次,异常的邮件路由情况出现了多少次等,然后从出现次数最多的情况开始着手优化。

误差分析并不能总帮助我们判断应该采取什么办法,有时我们需要尝试不同的模型,然后进行比较,而在模型进行比较的时候,使用数值来判断那一个模型更好更有效,通常我们是看交叉验证集的误差

比如在垃圾邮件分类器例子中,对于“我们是否应该将discount/discounts/discounted/discounting处理成同一个词语?”,如果这样子可以改善我们的算法,这里看采用一些词干提取软件来查看单词的前几个字母是否相同,当然这里可能会有误判断的情况,比如universe(宇宙)和university(大学)这两个单词前面7个字母都是相同的,很有可能被认为是同一个单词。
但是这里一旦尝试采用词干提取软件来改进算法,我们就可以通过对比使用前后的交叉验证集误差来判断是否需要使用。而这就是使用数值检验的好处了。

类偏斜的误差度量

类偏斜情况表现为训练集中有非常多的同一种类的实例,只有很少或没有其他类的实例。

假设我们希望用算法来预测癌症是否是恶性的,在训练集中只有0.5%的实例是恶性肿瘤。假设我们编写一非学习而来的算法,在所有情况下都预测肿瘤是良性的,那么误差只有0.5%。但是通过训练而得到的神经网络算法却有1%的误差,那么,此时误差的大小是不能视为算法效果的依据的。

这里就引入查准率(Precision)和查全率(Recall)
我们将算法预测的结构分成4种情况:

  1. 正确肯定(True Positive,TP): 预测为真,实际为真
  2. 错误否定(False Negative,FN): 预测为假,实际为真
  3. 错误肯定(False Positive,FP): 预测为真,实际为假
  4. 正确否定(True Negative,TN): 预测为假,实际为假

如下图所示:
这里写图片描述

上图左侧表格就是一个比较形象的表示,行表示的是预测结果,列表示实际的结果。

所以,

  • 查准率=TPTP+FP,例如,在所有预测为恶性肿瘤的病人中,实际上有恶性肿瘤的病人的百分比,越高越好。
  • 查全率=TPTP+FN,例如,在所有实际有恶性肿瘤的病人中,被预测为由恶性肿瘤的病人的百分比,也是越高越好。

那么对于刚刚总是预测肿瘤为良性的算法,其查全率是0,因为其正确肯定TP=0。

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

这里继续使用预测恶性肿瘤的例子。这里使用逻辑回归算法,然后使用阈值是0.5来预测是否是恶性肿瘤。

假设我们希望只在非常确信的情况下预测为真,即肿瘤是恶性的,也就是希望更高的查准率,那么可以使用比0.5更多的阈值,即0.7,0.9等,这样的确可以减少无措预测病人为恶性肿瘤的情况,但是也会增加未能成功预测肿瘤为恶性的情况。

另一种情况,就是希望提供查全率,也就是尽可能让所有有可能是恶性肿瘤的病人得到进一步地检查和诊断,那么就可以使用比0.5更小的阈值,如0.3,0.1等。但是这也必然会增加错误预测为恶性肿瘤的数量,也就是会降低查准率。

我们可以将不同阈值情况下,查全率和查准率的关系绘制成图表,如下所示:
这里写图片描述

所以我们希望有一个帮助我们选择这个阈值的方法。一种方法是计算F1,其计算公式如下:

F1 Score=2PRP+R

我们选择使得F1值最高的阈值。这里其实还是有很多其他方法结合考虑查准率和查全率,但是出于历史原因以及习惯原因,大多数使用的还是F1方法。

机器学习的数据

最后来探讨下一个关键的因素,就是使用的数据集的数据量大小。
视频中举出一个例子,有两个人研究一个如何对混淆的词语进行分类的问题。这里使用的算法有如逻辑回归算法,一种叫Winnow的算法,一种基于内存的算法,以及朴素贝叶斯方法。而下面是这不同算法的准确率随着训练集数量增多而变化的曲线图。
这里写图片描述

从上图中可以看出,尽管数据量非常大的时候,所有算法的效果都是非常好的。
通常情况下需要思考,在使用的这些特征面前,一个真人专家是否可以有信心地预测结果。如果回答是肯定的,我们需要思考的就是我们的模型是如何的。如果算法是高偏差,即过拟合了,那么增加训练集的数据量就不太可能导致过拟合,这样可以使得交叉验证集误差和训练集误差的差距更小,这种情况就必须使用更多数据。

也可以这样认识这个问题,我们是希望我们的算法低偏倚和低偏差的,所以做法就应该是选择更多的特征来降低偏倚,再增加数据量来降低偏差。

小结

本节课主要是介绍如何设计一个机器学习系统,也就是针对某个问题,如何设计一个机器学习算法来解决,包括一开始先设计一个简单的快速实现方法,然后通过误差分析,学习曲线等来继续改进算法,提高算法的效果。然后还介绍了查全率和查准率的概念。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 图片阴影_Java 为 PPT 中的图形添加阴影效果

在PowerPoint文档中,给图形添加阴影效果能增强图形的立体感,使其贴近现实效果,提升文档的美观度。 本文将展示如何使用Free Spire.Presentation for Java为PPT中的图形添加阴影效果。除了文中展示的预设阴影效果,还可以添加内部阴…

nyoj 21 三个水杯 BFS

三个水杯 时间限制:1000 ms | 内存限制:65535 KB难度:4描述给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只…

论文阅读(1)--Fine-grained Image Classification by Exploring Bipartite-Graph Labels

这是阅读《Fine-grained Image Classification by Exploring Bipartite-Graph Labels》这篇论文所做的笔记。 这篇论文是来自NEC实验室,是一篇有关细粒度分类/精细分类方面的论文。 0. 摘要 首先提出一个问题,给定一张食物的图片,对于一个…

java注释和注解_深入理解JAVA注解(Annotation)以及自定义注解

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。注解可以看作是一种特殊的标记,在程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。本文对 Annotation 进行了…

[机器学习笔记]Note10--支持向量机(SVM)

继续是机器学习课程的笔记,这节课的内容是介绍支持向量机(SVM)的内容。SVM是一个非常强大且流行的算法,在一些情况下,面对一些复杂的非线性问题可以提供比逻辑回归或神经网络更加简洁更加有效的结果。 优化目标 首先…

[机器学习笔记]Note11--聚类

继续是机器学习课程的笔记,本节介绍的是聚类方法,主要是K-means算法。 非监督学习 首先介绍监督学习和非监督学习的区别。一个监督学习的例子如下图,给定训练集如:{(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))},每个训练实例都有对应的标签。 …

[机器学习笔记]Note12--降维

继续是机器学习课程的笔记,本节介绍的是降维方法,这也是非监督学习中的一个问题,主要介绍主要成分分析(Principal Component Analysis,PCA)算法。 降维 动机一:数据压缩 使用降维的一个原因是…

[机器学习笔记]Note13--异常检测

继续是机器学习课程的笔记,本节课内容是异常检测,它是一个非监督学习算法,用于发现可能不应该属于一个已定义的组中的数据。 密度估计 首先是给出一个例子,如下图所示,是一个测试飞机引擎的例子,给定数据…

[机器学习笔记]Note14--推荐系统

继续是机器学习课程的笔记,本节课将介绍推荐系统的内容。 问题形式化 推荐系统是机器学习的一个非常重要的应用,在很多音乐、购物等网站都有推荐系统,如豆瓣,淘宝,网易云音乐等都是有使用到推荐系统的,因…

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

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