阅读笔记:A Few useful things to Know About machine Learning
这是Machine Learning领域的经典论文,文中提到了ML相关的12个keys,并自称这些keys是“black art”,我觉得有点像ML的“最佳实践”。
网上有此文的中文翻译,写得很详细,附上两个,并感谢这两位同学的工作:
https://blog.csdn.net/u011467621/article/details/48243135
https://blog.csdn.net/danameng/article/details/21563093
想看完整翻译的同学可以参考上面两篇文章,我在这里简要记录一下我读后的一些思考。
12个keys,逐条来看。
1、ML = Representation + Evaluation + Optimition
Representation是一个有点困扰我的词,看了Table 1中,Representation的举例是KNN、SVM、Naive Beyes,我觉得换成Model来表达更合适,但是后来仔细一想,使用Representation还有更有深意。Representation翻译过来是“表达、表述”,所以我们可以理解为,ML的模型是一种“表达方式”,也就是说,每一个模型都在以自己的方式来“表达”数据,比如,DT用树形结构表达数据,KNN用空间距离表达数据,Naive Beyes用概率表达数据,这似乎加深了我对Model本质的理解。
Evaluation是评价、评估的意思,是损失函数和模型评估函数的合体,从本质上讲,这两类东西其实是同质的,都是用来评估模型的,只不过评估的角度不同,往极端了说,如果你认为一个函数既可以作为损失函数也可以用于模型评估,那你完全可以只用一个函数。
另外,文中的Table 1值得收藏,也贴在这里。

2、泛化能力是ML的核心
泛化能力是 偏差(bias) + 方差(variance) + 噪声(noise) 的总和,这个在周志华老师的书中有详细的论述。
用打靶图来解释bias和variance挺直观的,附上原图:

3、只有数据是不够滴
在做ML时,选择模型、选择损失函数、参数寻优等环节都隐含了很多假设,在这些假设的前提下,才能训练出有用的模型。
反过来说,每一个假设都是对建模的一个约束,应该尝试不同的假设,才能找到最佳的那一个。
4、过拟合有很多种
过拟合(overfit)在ML中很常见,原因可能是训练数据太少、模型太复杂或其他。解决办法是交叉验证、正则化等。
这一点其实是和第2点紧密联系的,可以放到一起来理解。泛化误差里包括noise项,但是这并意味着noise是导致过拟合的原因,即使没有noise,过拟合一样会发生。
5、高维未见得有益
直觉上讲,特征越多,对数据的描述角度越多,ML的效果应该越好,事实并非如此。
维数多可能导致数据量相对不足,或者某些不重要的特征反而对模型效果有害,类似于引入了噪声项。
这也提醒我们,特征不是越多越好,要利用真正“有用”的特征。那么,怎么知道一个特征是否有用,可以利用诸如Lasso、feature_importance 等方法或参数来评估和筛选。
6、理论仅仅是理论
实践和理论是有差距的,理论提出的很多“理想情况”或说“极限情况”在实践中往往达不到。至于到底有哪些理论,既然实践不大有用,我也没细看,哈哈。
7、特征是关键
还是那句老话:特征决定机器学习的上限,模型只是在逼近这个上限。
从实践角度看,计算特征光靠数理知识肯定不行,对数据来源的理解是关键,也就是我们常说的,要理解业务,此外还需要一些直觉和创造力。
另外,有一个问题值得注意,单个特征没用,不代表组合起来没用,一个典型例子是异或(XOR),feature A 、feature B 和 A XOR B是没有相关性的。这也提醒我们,在构造特征时,可以考虑加入特征的组合变换,说不定会收获奇效。
8、收集更多数据比调优算法更实用
如果找到了有用的特征,但是模型的泛化误差还是不好,应该收集更多数据还是对算法做调优?
实践告诉我们,收集更多数据更有效。
所以,在处理实际问题时,往往会预先选好几个Model,比如 RandomForest、GBDT,模型内部的参数也确定为几个经验值,然后用构造出的特征做训练和测试,看AUC、TPR、FPR等指标,效果不好时,优先调整feature并争取获得更多的数据,模型的选型和参数调优是最不重要的。
9、用多个模型来学习
前面提到过,每个Model有隐含的假设条件和适用范围,ML在处理实际问题时,未必能确定用哪种模型更好,所以最好的办法是多个模型一起用,然后利用ensemble方法把多个模型聚合起来,这样往往会得到比较好的学习效果。
10、简单未必精确
这是对奥卡姆剃刀原理的一次矫正,我们不能因为简单的模型不容易过拟合或者简单的模型刚好效果好,就放弃看似复杂的模型。
在实际应用中,效果比较好的模型往往是多个简单模型ensemble后形成的复杂模型,这也能说明,单纯追求简单是错的,泛化能力强是我们追求的终极目标。
11、可表示不等于可学习
这一点大约是对ML局限性的阐述,ML并非万能钥匙,有时ML就是无法取得很好的效果。
12、相关性不等于因果关系
ML一般只能发现特征之间的相关关系,相关关系是因果关系的基础,但是不等于因果关系,而且ML使用的是观测数据,不是实验数据,我们无法自行验证因果关系是否成立。
所以,我们要从业务角度理解相关关系,并对此保持警惕,因为这样的关系很可能是不稳定的甚至稍纵即逝的假象。
原文链接:https://homes.cs.washington.edu/~pedrod/papers/cacm12.pdf
阅读笔记:A Few useful things to Know About machine Learning的更多相关文章
- 阅读笔记 1 火球 UML大战需求分析
伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本 <火球 UML大战需求分析>,首先 ...
- [阅读笔记]Software optimization resources
http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++ 7. The efficiency of differe ...
- 《uml大战需求分析》阅读笔记05
<uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...
- <<UML大战需求分析>>阅读笔记(2)
<<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...
- uml大战需求分析阅读笔记01
<<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...
- Hadoop阅读笔记(七)——代理模式
关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...
- Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable
酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...
- Hadoop阅读笔记(五)——重返Hadoop目录结构
常言道:男人是视觉动物.我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物.某些场合(比如面试.初次见面等),别人没有那么多的闲暇时间听你诉说过往以塑立一个关于你的完整模型.所以,第一眼 ...
- Hadoop阅读笔记(四)——一幅图看透MapReduce机制
时至今日,已然看到第十章,似乎越是焦躁什么时候能翻完这本圣经的时候也让自己变得更加浮躁,想想后面还有一半的行程没走,我觉得这样“有口无心”的学习方式是不奏效的,或者是收效甚微的.如果有幸能有大牛路过, ...
- Hadoop阅读笔记(三)——深入MapReduce排序和单表连接
继上篇了解了使用MapReduce计算平均数以及去重后,我们再来一探MapReduce在排序以及单表关联上的处理方法.在MapReduce系列的第一篇就有说过,MapReduce不仅是一种分布式的计算 ...
随机推荐
- [R语言统计]频数表
频数表在统计学中是一个非常基本并且重要的概念,我们这里就来讲解它的基本用法. 首先我们需要载入数据,并查看数据的基本信息 install.packages('vcd') #安装vcd包,其中有可以利用 ...
- ANSI 标准是为了确保 C++ 的便携性
ANSI 标准ANSI 标准是为了确保 C++ 的便携性 —— 您所编写的代码在 Mac.UNIX.Windows.Alpha 计算机上都能通过编译. 由于 ANSI 标准已稳定使用了很长的时间,所有 ...
- Android Studio怎样查看资源或者函数在哪些类中被引用
很多人在做完Keymap匹配到Eclispe快捷键后,发现查看资源或者函数在哪些地方被引用的快捷键"Ctrl+Shift+G"不灵 了.你选中某个函数后,使用这个快捷键.发现仅仅会 ...
- poj2513(无向图判欧拉路)
链接:id=2513">点击打开链接 题意:一堆木棍左右两端涂有颜色,同样颜色的能够连接在一起,问全部木棍是否能都连上 代码: #include <map> #includ ...
- 转载:QTableView中嵌入可视化组件
出处:http://qimo601.iteye.com/blog/1538364 QTableView中嵌入可视化组件方法有四种: 第一种不能之前显示,必须双击/选中后才能显示,不适用. 第二种比较简 ...
- 勒布朗法则( LeBlanc)
看<代码整洁之道>看到了一个概念:勒布朗法则. 咦?这个不是NBA中的勒布朗·詹姆斯法则,当然NBA中针对一些球星的Bug表现也制定了一系列的法则,如乔丹法则(乔丹太过于强大).奥尼尔法则 ...
- Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义
http://blog.csdn.net/slovyz/article/details/47400107
- Ubuntu16.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu LTS \n \l r ...
- 使用Git Hooks实现开发部署任务自动化
前言 版本控制,这是现代软件开发的核心需求之一.有了它,软件项目可以安全的跟踪代码变更并执行回溯.完整性检查.协同开发等多种操作.在各种版本控制软件中,git是近年来最流行的软件之一,它的去中心化架构 ...
- ios开发之--简单动画效果的添加
记录一个简单的动画效果,自己写的,很简单,仅做记录. 附一个demo的下载地址: https://github.com/hgl753951/hglTest.git 代码如下: 1,准备 BOOL _i ...