【机器学习】机器学习实践中的7种常见错误

本文作者是 Codecademy 的分析主管 Cheng-TaoChu,其专长是数据挖掘和机器学习,之前在 Google、LinkedIn和Square就职。


统计建模非常像工程学。

在工程学中,有多种构建键-值存储系统的方式,每个设计都会构造一组不同的关于使用模式的假设集合。在统计建模中,有很多分类器构建算法,每个算法构造一组不同的关于数据的假设集合。

当处理少量数据时,尝试尽可能多的算法,然后挑选最好的一个的做法是比较合理的,因为此时实验成本很低。但当遇到“大数据”时,提前分析数据,然后设计相应“管道”模型(预处理,建模,优化算法,评价,产品化)是值得的。

正如我之前文章中所指出的,有很多种方法来解决一个给定建模问题。每个模型做出不同假设,如何导引和确定哪些假设合理的方法并不明确。在业界,大多数实践者是挑选他们更熟悉而不是最合适的建模算法。在本文中,我想分享一些常见错误(不能做的),并留一些最佳实践方法(应该做的)在未来一篇文章中介绍。

1. 想当然地使用缺省损失函数

许多实践者使用缺省损失函数(如,均方误差)训练和挑选最好的模型。实际上,现有损失函数很少符合业务目标。以欺诈检测为例,当试图检测欺诈性交易时,业务目标是最小化欺诈损失。现有二元分类器损失函数为误报率和漏报率分配相等权重,为了符合业务目标,损失函数惩罚漏报不仅要多于惩罚误报,而且要与金额数量成比例地惩罚每个漏报数据。此外,欺诈检测数据集通常含有高度不平衡的标签。在这些情况下,偏置损失函数能够支持罕见情况(如,通过上、下采样)。

2.非线性情况下使用简单线性模型

当构建一个二元分类器时,很多实践者会立即跳转到逻辑回归,因为它很简单。但是,很多人也忘记了逻辑回归是一种线性模型,预测变量间的非线性交互需要手动编码。回到欺诈检测问题,要获得好的模型性能,像“billing address = shipping address and transaction amount < $50”这种高阶交互特征是必须的。因此,每个人都应该选择适合高阶交互特征的带核SVM或基于树的分类器。

3.忘记异常值

异常值非常有趣,根据上下文环境,你可以特殊关注或者完全忽略它们。以收入预测为例,如果观察到不同寻常的峰值收入,给予它们额外关注并找出其原因可能是个好主意。但是如果异常是由于机械误差,测量误差或任何其它不可归纳的原因造成的,那么在将数据输入到建模算法之前忽略掉这些异常值是个不错的选择。

相比于其它模型,有些模型对异常值更为敏感。比如,当决策树算法简单地将每个异常值计为一次误分类时,AdaBoost算法会将那些异常值视为“硬”实例,并为异常值分配极大权值。如果一个数据集含有相当数量的异常值,那么,使用一种具有异常值鲁棒性的建模算法或直接过滤掉异常值是非常重要的。

4.样本数少于特征数(n<<p)时使用高方差模型

SVM是现有建模算法中最受欢迎算法之一,它最强大的特性之一是,用不同核函数去拟合模型的能力。SVM核函数可被看作是一种自动结合现有特征,从而形成一个高维特征空间的方式。由于获得这一强大特性不需任何代价,所以大多数实践者会在训练SVM模型时默认使用核函数。然而,当数据样本数远远少于特征数(n<<p)—业界常见情况如医学数据—时,高维特征空间意味着更高的数据过拟合风险。事实上,当样本数远小于特征数时,应该彻底避免使用高方差模型。

5.尚未标准化就进行L1/L2/等正则化

使用L1或L2去惩罚大系数是一种正则化线性或逻辑回归模型的常见方式。然而,很多实践者并没有意识到进行正则化之前标准化特征的重要性。

回到欺诈检测问题,设想一个具有交易金额特征的线性回归模型。不进行正则化,如果交易金额的单位为美元,拟合系数将是以美分为单位时的100倍左右。进行正则化,由于L1/L2更大程度上惩罚较大系数,如果单位为美元,那么交易金额将受到更多惩罚。因此,正则化是有偏的,并且趋向于在更小尺度上惩罚特征。为了缓解这个问题,标准化所有特征并将它们置于平等地位,作为一个预处理步骤。

6. 不考虑线性相关直接使用线性模型

设想建立一个具有两变量X1和X2的线性模型,假设真实模型是Y=X1+X2。理想地,如果观测数据含有少量噪声,线性回归解决方案将会恢复真实模型。然而,如果X1和X2线性相关(大多数优化算法所关心的),Y=2*X1, Y=3*X1-X2或Y=100*X1-99*X2都一样好,这一问题可能并无不妥,因为它是无偏估计。然而,它却会使问题变得病态,使系数权重变得无法解释。

7.将线性或逻辑回归模型的系数绝对值解释为特征重要性

因为很多现有线性回归量为每个系数返回P值,对于线性模型,许多实践者认为,系数绝对值越大,其对应特征越重要。事实很少如此,因为:(a)改变变量尺度就会改变系数绝对值;(b)如果特征是线性相关的,则系数可以从一个特征转移到另一个特征。此外,数据集特征越多,特征间越可能线性相关,用系数解释特征重要性就越不可靠。

这下你就知道了机器学习实践中的七种常见错误。这份清单并不详尽,它只不过是引发读者去考虑,建模假设可能并不适用于手头数据。为了获得最好的模型性能,挑选做出最合适假设的建模算法—而不只是选择你最熟悉那个算法,是很重要的。

英文链接:http://ml.posthaven.com/machine-learning-done-wrong

本文分享自微信公众号 - 数据科学与人工智能(DS_AI_shujuren)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-12-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据库

替代SE16N的超强悍SE16H

文 | 大话SAP 又到了天气转冷,懒得出门,窝在家里学习新知识的季节。 也许你早就对SE11/SE16/SE16N/SQVI等T-code熟得不能再熟,不过,...

380100
来自专栏软件

Java程序员高效开发必备5大工具,你用过几个?

学习问题欢迎留言或对话框咨询 ▼ 工具用的好,效率不用愁!别看平时一些人开发进度飞快,好像很厉害的样子,也许他只是比你多学了几个工具,才在弯道超了你的车。开发要...

29690
来自专栏人工智能

机器学习:预测性维修的数据基础

预测性维修作为工业互联网中的最核心应用,无论是早期的探索者还是新进的工业互联网平台都将它作为主要切入口。当我们谈到应用落地时,可能很多企业会有这样的误解或疑问:...

96690
来自专栏编程

第1章:初识编程

写在前面 之前答应过不少朋友今年要写个《猫哥极简编程入门》的系列,帮助各位对编程感兴趣的新人和非程序员,快速掌握一些实用的编程技巧,以便快速入门编程以及应付一些...

235100
来自专栏CDA数据分析师

机器学习编程语言之争,Python夺魁

来自InfoQ 随着科技的发展,拥有高容量、高速度和多样性的大数据已经成为当今时代的主题词。数据科学领域中所采用的机器学习编程语言大相径庭。究竟哪种语言最适合机...

21580
来自专栏生信宝典

Python学习教程 (六)

作业(三) 使 “作业(二)” 中的程序都能接受命令行参数 import sys sys.argv import optparse 用到的知识点 2.备注...

26690
来自专栏非著名程序员

论HTML5的重要性之微软放弃自家视频插件Silverlight将转向HTML5

论HTML5的重要性 ? 前言:北京时间7月3日上午消息,微软近期正在鼓励网站停止使用该公司的Silverlight技术,转而使用更新的、基于HTML5...

24380
来自专栏生信宝典

贝叶斯学习记录

这篇文章用于记录学习贝叶斯定理及其应用过程中的记录,希望由浅及深的提供一份自我学习教程。 引子 概率的定义:概率是一个0-1之间的数,代表了我们对某个事实或预测...

25360
来自专栏人工智能

意识是人工智能生命的最后一块拼图

十个程序员中,九个人所编写的第一个代码是“hello world”。仿佛新生儿降世的第一声啼哭,“hello world”就像一台冰冷的机器第一次睁开了眼,对世...

30860
来自专栏人工智能

带你通俗易懂的理解人工智能算法一

我们所谓的人工智能算法就是一个机器嵌入了这个算法后,这个机器就拥有了人所具有的基本能力,比如观察、思考、学习、创造等,本文要说的就是这个算法。 人工智能算法主要...

35290

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励