您的位置:首页 > 运维架构

随手记:机器学习工程师新手最常犯的六种错误(Top 6 errors novice machine learning engineers make)

2018-03-28 11:38 330 查看
原博文来自 Medium,被北邮陈光老师发了在微博上。很久以前就收藏了但一直没看,今天拿出来发现文章很短而且颇具启发性,没经验的人在做数据类实践的时候确实想不到这些问题。

下面是我理解之后写的简单笔记,原文请自行搜索。

PS. Medium 是个好网站。

1 使用默认的损失函数

损失函数的作用是将当前问题转化为一个可求解的优化问题。损失函数需要建立在具体问题之上,对于一部分实际问题,已有的损失函数可能并不适用。

以诈骗侦测问题为例。为了与业务目标匹配,可能需要按诈骗造成的损失金额去惩罚假阴性(false negative)样本,此时均方差错误能给出一般的结果而不是最佳。

因此针对特定问题设计专属的损失函数非常重要。

2 一种算法应对所有问题

容易理解。针对不同问题在数据集上尝试不同的算法,选择验证集上表现最佳的那个。

3 立群点的处理

具体情况具体分析,有时候需要着重考虑,有时候需要忽略。

注意不同的算法对于立群点的处理方式也是不一样的。如 SVM 更关心“支持向量”,Adaboost 则赋予其较大的权重。

需要更仔细地观察你的数据。

4 周期特征的处理

最典型的如时间特征。二十四小时、一周七天、一月三十天都具有周期性。新手往往将其直接转化为普通整数,显然是不对的。

一种方法是计算它的正余弦。

5 盲目正则化

L1/L2 的使用也要有基本法。很多新手了解套路,一上来就加正则,忽略特征的实际意义。这是不对的。

一个例子是,使用线性模型,把交易额作为一条特征,做正则之前,如果交易额单位是“元”而非“分”,拟合系数会增大一百倍。直接做正则化,会造成一个偏差,即惩罚尺度上较小的特征。

博主注:

一开始理解错了,以为说的是特征在语义上需要“统一”。看了两遍才反应过来其实说的是对特征做归一化。原文是 standardization,放到深度学习里就是对输入的 normalization。

这几个概念也不要弄混了。

6 把权重的绝对值理解为特征的重要性

举手,这事儿我干过……

作者这里想强调的还是具体问题具体分析。比如如果特征之间存在线性关系,权重也可以不同,但它的大小与特征的重要性没有关系。

作者最后说,做机器学习项目虽然很爽很有成就感,但跟其他行业一样,魔鬼也在细节中,看起来很漂亮的图表里也藏了偏差和误差(bias and error)。这篇博文的主要目的是引发读者对小问题的思考,实际上要注意的可远不止这区区六条。

博主注:

就我个人的经验来说,最容易犯错的不是算法,依然是 Machine Learner 本人,你不自觉的一些行为背后隐藏了很多偏见(bias),而你自己却可能觉得不过是些理所当然的先验。

最好的办法还是多人合作,借助每个人思考方式的差异去 debug。有点像 ML 系统里的多专家。

那如果像我一样是单人作战怎么办(哭了)?

也不是无药可救。就找同学、导师或者师兄师姐师弟师妹(这总有吧)把你全部的操作过程讲一遍,不要遗漏细节。

当然了最好还是交流的双方都有一些基础,不然你要把过多时间放在解释基本概念上……而且机器学习/数据挖掘实践上,经验也是很重要的。比较熟悉的人可能一眼就看出问题所在了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐