这是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. 阅读笔记 1 火球 UML大战需求分析

    伴随着七天国庆的结束,紧张的学习生活也开始了,首先声明,阅读笔记随着我不断地阅读进度会慢慢更新,而不是一次性的写完,所以会重复的编辑.对于我选的这本   <火球 UML大战需求分析>,首先 ...

  2. [阅读笔记]Software optimization resources

    http://www.agner.org/optimize/#manuals 阅读笔记Optimizing software in C++   7. The efficiency of differe ...

  3. 《uml大战需求分析》阅读笔记05

    <uml大战需求分析>阅读笔记05 这次我主要阅读了这本书的第九十章,通过看这章的知识了解了不少的知识开发某系统的重要前提是:这个系统有谁在用?这些人通过这个系统能做什么事? 一般搞清楚这 ...

  4. <<UML大战需求分析>>阅读笔记(2)

    <<UML大战需求分析>>阅读笔记(2)> 此次读了uml大战需求分析的第三四章,我发现这本书讲的特别的好,由于这学期正在学习设计模式这本书,这本书就讲究对uml图的利用 ...

  5. uml大战需求分析阅读笔记01

    <<UML大战需求分析>>阅读笔记(1) 刚读了uml大战需求分析的第一二章,读了这些内容之后,令我深有感触.以前学习uml这门课的时候,并没有好好学,那时我认为这门课并没有什 ...

  6. Hadoop阅读笔记(七)——代理模式

    关于Hadoop已经小记了六篇,<Hadoop实战>也已经翻完7章.仔细想想,这么好的一个框架,不能只是流于应用层面,跑跑数据排序.单表链接等,想得其精髓,还需深入内部. 按照<Ha ...

  7. Hadoop阅读笔记(六)——洞悉Hadoop序列化机制Writable

    酒,是个好东西,前提要适量.今天参加了公司的年会,主题就是吃.喝.吹,除了那些天生话唠外,大部分人需要加点酒来作催化剂,让一个平时沉默寡言的码农也能成为一个喷子!在大家推杯换盏之际,难免一些画面浮现脑 ...

  8. Hadoop阅读笔记(五)——重返Hadoop目录结构

    常言道:男人是视觉动物.我觉得不完全对,我的理解是范围再扩大点,不管男人女人都是视觉动物.某些场合(比如面试.初次见面等),别人没有那么多的闲暇时间听你诉说过往以塑立一个关于你的完整模型.所以,第一眼 ...

  9. Hadoop阅读笔记(四)——一幅图看透MapReduce机制

    时至今日,已然看到第十章,似乎越是焦躁什么时候能翻完这本圣经的时候也让自己变得更加浮躁,想想后面还有一半的行程没走,我觉得这样“有口无心”的学习方式是不奏效的,或者是收效甚微的.如果有幸能有大牛路过, ...

  10. Hadoop阅读笔记(三)——深入MapReduce排序和单表连接

    继上篇了解了使用MapReduce计算平均数以及去重后,我们再来一探MapReduce在排序以及单表关联上的处理方法.在MapReduce系列的第一篇就有说过,MapReduce不仅是一种分布式的计算 ...

随机推荐

  1. Spring RestTemplate 小结

    关于RestTemplate 首先,你可以把它理解为一个发起请求并接收响应的工具类(功能类似浏览器). 其次,它其实是一个壳,具体还是通过调用别的接口来实现(如jdk自带的连接,或者HttpClien ...

  2. Unity使用JsonFX插件进行序列化

    孙广东  2015.6.25 Unity and JSON – Quick Guide: 相比較XML的沉重和密集,Json更加高效. Introduction: 什么是 Json ?假设你从未使用过 ...

  3. myslq的索引类型为MyISAM和BDB的表:复合索引下的自增长

    本文源自:http://www.himigame.com/mysql/781.html 3.6.9. 使用AUTO_INCREMENT 可以通过AUTO_INCREMENT属性为新的行产生唯一的标识: ...

  4. PHP删除目录及目录下所有文件或删除指定文件

    PHP删除目录及目录下所有文件或删除指定文件 <?php header("content-type:text/html;charset=utf-8"); /** * 删除目录 ...

  5. 实现QQ第三方登录教程(php)

    参看地址:http://www.bcty365.com/content-10-2945-1.html

  6. ASP.NET动态添加用户控件的方法

    本文实例讲述了ASP.NET动态添加用户控件的方法.分享给大家供大家参考.具体实现方法如下: 为了让用户控件能ASP.NET页面实现动态添加,首先写一个接口IGetUCable,这个接口有一个函数,返 ...

  7. [extjs] ExtJs4.2 Form 表单提交

    基本代码: <script> Ext.onReady(function(){ Ext.create('Ext.form.Panel', { title: '登录', bodyPadding ...

  8. Java精选笔记_IO流(字节流、InputStream、OutputStream、字节文件、缓冲区输入输出流)

    字节流 操作图片数据就要用到字节流. 字符流使用的是字符数组char[],字节流使用的是字节数组byte[]. 字节流读写文件 针对文件的读写,JDK专门提供了两个类,分别是FileInputStre ...

  9. POJ 3093 Margaritas(Kind of wine) on the River Walk (背包方案统计)

    题目 Description One of the more popular activities in San Antonio is to enjoy margaritas in the park ...

  10. ionic函数 官方使用帮助

    项目里 lib/js/ionic.bundle.js 里很多ionic的函数,里面还带了很多使用示例,认真看一下肯定会对使用ionic有很多帮助啊!! 例如:$http