随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)
2018-03-28 11:38
267 查看
原博文来自 Medium,被北邮陈光老师发了在微博上。很久以前就收藏了但一直没看,今天拿出来发现文章很短而且颇具启发性,没经验的人在做数据类实践的时候确实想不到这些问题。
下面是我理解之后写的简单笔记,原文请自行搜索。
PS. Medium 是个好网站。
以诈骗侦测问题为例。为了与业务目标匹配,可能需要按诈骗造成的损失金额去惩罚假阴性(false negative)样本,此时均方差错误能给出一般的结果而不是最佳。
因此针对特定问题设计专属的损失函数非常重要。
注意不同的算法对于立群点的处理方式也是不一样的。如 SVM 更关心“支持向量”,Adaboost 则赋予其较大的权重。
需要更仔细地观察你的数据。
一种方法是计算它的正余弦。
一个例子是,使用线性模型,把交易额作为一条特征,做正则之前,如果交易额单位是“元”而非“分”,拟合系数会增大一百倍。直接做正则化,会造成一个偏差,即惩罚尺度上较小的特征。
博主注:
一开始理解错了,以为说的是特征在语义上需要“统一”。看了两遍才反应过来其实说的是对特征做归一化。原文是 standardization,放到深度学习里就是对输入的 normalization。
这几个概念也不要弄混了。
作者这里想强调的还是具体问题具体分析。比如如果特征之间存在线性关系,权重也可以不同,但它的大小与特征的重要性没有关系。
作者最后说,做机器学习项目虽然很爽很有成就感,但跟其他行业一样,魔鬼也在细节中,看起来很漂亮的图表里也藏了偏差和误差(bias and error)。这篇博文的主要目的是引发读者对小问题的思考,实际上要注意的可远不止这区区六条。
博主注:
就我个人的经验来说,最容易犯错的不是算法,依然是 Machine Learner 本人,你不自觉的一些行为背后隐藏了很多偏见(bias),而你自己却可能觉得不过是些理所当然的先验。
最好的办法还是多人合作,借助每个人思考方式的差异去 debug。有点像 ML 系统里的多专家。
那如果像我一样是单人作战怎么办(哭了)?
也不是无药可救。就找同学、导师或者师兄师姐师弟师妹(这总有吧)把你全部的操作过程讲一遍,不要遗漏细节。
当然了最好还是交流的双方都有一些基础,不然你要把过多时间放在解释基本概念上……而且机器学习/数据挖掘实践上,经验也是很重要的。比较熟悉的人可能一眼就看出问题所在了。
下面是我理解之后写的简单笔记,原文请自行搜索。
PS. Medium 是个好网站。
1 使用默认的损失函数
损失函数的作用是将当前问题转化为一个可求解的优化问题。损失函数需要建立在具体问题之上,对于一部分实际问题,已有的损失函数可能并不适用。以诈骗侦测问题为例。为了与业务目标匹配,可能需要按诈骗造成的损失金额去惩罚假阴性(false negative)样本,此时均方差错误能给出一般的结果而不是最佳。
因此针对特定问题设计专属的损失函数非常重要。
2 一种算法应对所有问题
容易理解。针对不同问题在数据集上尝试不同的算法,选择验证集上表现最佳的那个。3 立群点的处理
具体情况具体分析,有时候需要着重考虑,有时候需要忽略。注意不同的算法对于立群点的处理方式也是不一样的。如 SVM 更关心“支持向量”,Adaboost 则赋予其较大的权重。
需要更仔细地观察你的数据。
4 周期特征的处理
最典型的如时间特征。二十四小时、一周七天、一月三十天都具有周期性。新手往往将其直接转化为普通整数,显然是不对的。一种方法是计算它的正余弦。
5 盲目正则化
L1/L2 的使用也要有基本法。很多新手了解套路,一上来就加正则,忽略特征的实际意义。这是不对的。一个例子是,使用线性模型,把交易额作为一条特征,做正则之前,如果交易额单位是“元”而非“分”,拟合系数会增大一百倍。直接做正则化,会造成一个偏差,即惩罚尺度上较小的特征。
博主注:
一开始理解错了,以为说的是特征在语义上需要“统一”。看了两遍才反应过来其实说的是对特征做归一化。原文是 standardization,放到深度学习里就是对输入的 normalization。
这几个概念也不要弄混了。
6 把权重的绝对值理解为特征的重要性
举手,这事儿我干过……作者这里想强调的还是具体问题具体分析。比如如果特征之间存在线性关系,权重也可以不同,但它的大小与特征的重要性没有关系。
作者最后说,做机器学习项目虽然很爽很有成就感,但跟其他行业一样,魔鬼也在细节中,看起来很漂亮的图表里也藏了偏差和误差(bias and error)。这篇博文的主要目的是引发读者对小问题的思考,实际上要注意的可远不止这区区六条。
博主注:
就我个人的经验来说,最容易犯错的不是算法,依然是 Machine Learner 本人,你不自觉的一些行为背后隐藏了很多偏见(bias),而你自己却可能觉得不过是些理所当然的先验。
最好的办法还是多人合作,借助每个人思考方式的差异去 debug。有点像 ML 系统里的多专家。
那如果像我一样是单人作战怎么办(哭了)?
也不是无药可救。就找同学、导师或者师兄师姐师弟师妹(这总有吧)把你全部的操作过程讲一遍,不要遗漏细节。
当然了最好还是交流的双方都有一些基础,不然你要把过多时间放在解释基本概念上……而且机器学习/数据挖掘实践上,经验也是很重要的。比较熟悉的人可能一眼就看出问题所在了。
相关文章推荐
- 随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)
- 随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)
- 随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)
- 随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)
- 随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)
- 随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)
- 随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)
- 随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)
- 随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)
- 随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)
- Machine Learning - XI. Machine Learning System Design机器学习系统设计(Week 6)
- 中科院计算所开源Easy Machine Learning:让机器学习应用开发简单快捷
- Ng第十一课:机器学习系统的设计(Machine Learning System Design)
- 机器学习系统设计(Machine learning system design)
- 机器学习教程之8-机器学习系统的设计(Machine Learning System Design)
- Coursera公开课笔记: 斯坦福大学机器学习第十一课“机器学习系统设计(Machine learning system design)”
- Coursera公开课笔记: 斯坦福大学机器学习第十一课“机器学习系统设计(Machine learning system design)”
- 机器学习系统设计(Building Machine Learning Systems with Python)- Willi Richert Luis Pedro Coelho
- 机器学习新方向 Submodularity machine learning
- Large Scale Machine Learning--An Engineering Perspective--1. 大规模机器学习平台的构成