阅读笔记: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不仅是一种分布式的计算 ...
随机推荐
- [mysql] MySQL Order By Rand()效率【转载】
最近由于需要大概研究了一下MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RA ...
- 关于Cocos2d-x随机数的生成
1.使用前必须下一个随机种子,可以让每一次生成的随机数是不一样的,这里的每一次指的是时间上的每一次,如果是同一时间的随机数就不能这样写了 srand((unsigned)time(NULL));--- ...
- Hibernate注解关系映射
Hibernate Annotation关系映射的几种类型映射用法及使用方法(说明:以前实例的实体是user和role,主键分别是userid和roleid) 1)一对一外键关联映射(单向) @O ...
- am335x backlight
/****************************************************************************** * am335x backlight * ...
- 静态变量加前缀 s_(表示 static)
静态变量加前缀 s_(表示 static). 例如: void Init(…) { static int s_initValue; // 静态变量 … } #include <iostream& ...
- ffmpeg avformat_open_input返回失败的解决办法
用ffmpeg做的第一个程序,参考网上的代码,就出现了一些问题,其中avformat_open_input返回失败. 下面是我在网上收集到的失败信息的相关解决: /////////////////// ...
- php微信开发 -- 两种运营模式及服务器配置
微信的两种运营模式 编辑模式:使用微信公众平台提供的功能 开发者模式:通过腾讯的api接口调用相应程序进行二次开发 编辑模式 应用场景: l 不具备开发能力的运营者 l 主要是进行品牌宣传.新闻媒体. ...
- 双卡手机怎么指定SIM卡打电话
双卡手机如何指定SIM卡打电话 package com.example.dualsimtest; import android.app.Activity; import android.content ...
- (转)JavaScript内存模型
JavaScript对象内存模型 转自:http://blog.csdn.net/u010425776/article/details/53617292 推荐-JavaScript作用域链内存模型: ...
- centos7,yum安装工具报错
1.问题描述:yum安装gcc和其他的工具时一直报错: 2.问题解决: 网上看到有类似文章: No more mirrors to try. 得知这可能是错误的缓存源导致,直接两个命令解决: yum ...