数据科学经验谈:这三点你在书里找不到

如果你还没有听说过数据科学,那一定是我疯了。各种培训、岗位、学校课程像雨后春笋一样遍地开花。每次我看到这些东西的样品时,我总是格外关注他们学习算法的细节。当然,了解回归、深度学习的工作原理是件很酷的事情,但是当你真正动手处理数据的时候你就会发现,可能有些其他的事情也同样重要,甚至更重要。

我真的不是在说这些课程的坏话。我在大学教了很多年的机器学习,教的东西始终都围绕着那些非常具体的算法模型。你可能非常了解支持向量机,高斯混合模型, K-均值聚类等等,但是只有当你开始准备硕士论文的时候,你才真的学会了如何正确的处理数据。

什么样的处理才算是正确的处理呢?为了目的不择手段?只要得到好的预测性能就万事大吉?事实确实如此,但是这么做的关键在于,你能确保未知数据也能有个不错的表现。就像我经常说的那样,你很容易就会受到它的蒙蔽,在分析训练结果的时候,轻易地就相信了你选择的方法。

因此,在这里我要分享我的三点经验,因为我发现书里很少会提到这些,但是他们真的很重要。

1.模型评价是关键

数据分析/机器学习/数据科学(或任何你能想到的领域)的主要目标,就是建立一个系统,要求它在预测未知数据上有良好的表现。区分监督学习(像分类)和无监督学习(如聚合)其实没有太大的意义,因为无论如何你总会找到办法来构建和设计你的数据集。方法行不行最后还是得看它在未知数据上的表现,你得保证它能得出同你过去的训练集一样的结果。

初学者最常犯一个错误就是看到已知数据的表现,就想当然的认为未知数据也会一样。通常你会发现,现实是很骨感的。这里我们就只说监督学习,任务就是根据你的输入预测输出,例如把电子邮件分成垃圾邮件和非垃圾邮件。

如果你只考虑训练数据,通过让机器记住一切,很轻松的就能得到完美的预测结果(除非这些数据自相矛盾)。这并不是什么新鲜事儿,人类自己就是这样的。还记得你学外语背单词的苦逼时光么,你必须检查单词字母的顺序,因为你的大脑需要按正确的顺序记住他们。

机器在存储和检索大量数据上的优势是人类拍马不及的。但这也带来了过拟合和泛化能力差的问题。

所以,一个好的评价方法是模拟未知数据的影响来分割数据,一部分用来训练,一部分用来检测效果。通常,用较大的训练集建模,然后用小的那部分进行预测,经过多次迭代来得到一个较稳定的模型。这个过程就是我们常说的交叉验证。

为了模拟未知数据的表现,把数据集分为两个部分,一部分用于训练,一部分用于预测。

就算我们这么做了,还是很有可能出问题,特别是在数据非平稳的时候,数据的潜在分布会随着时间变来变去。利用真实数据预测时经常会碰到这种情况,同样是销售数据,六月和七月的就可能差别巨大。

还有数据点间的相关性,如果你知道了一个数据点那么你肯定对另一个数据点也有了一些了解。好比股票价格,他们通常不会在两天之间任意的大幅波动,因此如果你胡乱的拆分训练/预测数据,就会破坏这种相关性。

每当出现这种情况,你得到的结果就会过于乐观,而你的模型似乎不打算在现实应用中也这么给你面子。最糟糕的情况就是,你千辛万苦终于说服人们认可你的方法,结果下水一试,它当掉了……

所以学习如何正确的进行模型评价是关键!

2.特征提取是天

学习一种新的算法感觉总是很棒,但现实是,最复杂的算法执行起来和那些老办法 几乎没什么两样,真正的区别在于原始数据的特征学习。

现在的模型功能看起来非常强大,随随便便就能处理成千上万的特征和数据点,其 实本质上并没聪明到哪里。特别是线性模型(像logistic回归或线性支持向量机),就是个傻乎乎的计算器。

这些模型确实很擅长在数据充足的情况下识别信息的特征,但是如果信息不充足,或者不能按线性组合的特征来表示,那基本就没什么可玩了。同样这些模型也不能通过“洞察”自行简化数据。

换句话说,你可以通过寻找合适的特征,来大量简化数据。坦白来讲,如果你能为想做预测的功能简化掉所有特征,那还有什么需要学习的呢?!这就是多么强大的特征提取啊!

这意味着两件事情:首先,你应该确保你确实掌握了这些几乎相同的方法中的一种,并且始终不抛弃它。你真的不需要同时掌握逻辑回归和线性支持向量机,你只要选择一个就够了。这些方法几乎都是相似的,关键的不同就在于底层模型。深度学习还有些特别的东西,但线性模型在表现能力上几乎都是相同的。虽然,训练时间、解决方案的稀疏度等可能会有些不同,但在大多数情况下你会得到相同的预测性能。

其次,你应该了解所有的特征工程。这是一门艺术,不幸的是,几乎所有的教科书都没有涵盖这一点,因为关于它的理论太少了。它的常规化就像我们的雾霾一样,还有很长的路要走。有时,特征需要取对数。每当降低一定的自由度,就是摆脱那些与预测任务不相关的数据,可以显著降低你所需的训练集数量。

有些情况下这种类型的转化会不可思议的简单。例如,如果你正在做手写字体识别,你就会发现有没有一个识别度高的颜色并不重要,你只要有一个背景和前景就OK了。

我知道,教科书往往将算法模型描述的异常强大,好像只要你把数据扔给模型,他们就会把一些都做了。从理论和无限的数据源上看它可能是对的。但很遗憾,我们的时间和数据都是有限的,所以寻找包含信息大的特征是绝对有必要的。

3.最耗神的是模型选择,而不是数据集的大小

在大数据时代,很多你不想被人知道的事情都被你的主内存以数据集的方式完美的记录下来。你的模型可能不需要花太多时间就能跑完这些数据,但是却要花费非常多的时间从原始数据中提取特征,利用交叉验证的方法来比较不同学习模型的渠道和参数。

为了选择合适的模型,你需要大量的组合参数,再利用备份数据来评估它的表现。

问题来了,组合参数的爆发式增长。如果你只有两个参数,可能只需要花费1分钟就能完成训练,并且得到性能的评估结果(用合适的评估像我上面说的那样)。但如果每个参数有5个候选值,那就需要执行5倍的交叉验证(把数据集分成5份,每个测试都跑5遍,在每一次迭代中用不同的数据测试),这意味着你需要把上面的步骤重复125次去找到一个好的模型,你要等待的就不是1分钟,而是两小时。

好消息是,在多参数的情况下你可以并行操作,因为每个部分都是独立运行的。这 种对每个独立数据集进行相同操作(分割,提取,转换等)的过程,被称为“密集并行”(没错,这是一个技术术语)。

这里的坏消息大多针对大数据,因为这些都意味着很少需要复杂模型的可扩展实现。在大多数情况下,仅仅通过对内存中的数据执行相同的非分布式算法,再把这种方法并行化就足够了。

当然,像用于TB级日志数据的广告优化和面向百万用户推荐的 learning global models这样的应用也是存在的,但是最常见的用例都是这里描述的类型。

最后,拥有很多数据并不意味着你都需要他们。最大的问题在于底层学习的复杂性。如果这个问题能被一个简单的模型解决,你就不需要用这么多的数据来检验模型,也许一个随机的数据子集就可以解决问题了。像我上面说的,一个好的特征表现能帮助你急剧的降低所需要数据点的量。

综上所述

总之,知道如何正确的评估,对降低你的模型在面对未知数据时的风险是非常有帮助的。掌握合适的特征提取方法,可能是帮助你取得一个好的结果的最佳方法,最后,并没有那么多大数据,通过分布式计算可以降低训练时间。

本文作者:佚名

来源:51CTO

时间: 2024-07-29 03:26:04

数据科学经验谈:这三点你在书里找不到的相关文章

想组建自己的数据科学团队?CEO们要先回答这几个问题

◆ ◆ ◆ Jeremy Stanley 是日用杂货当日送达初创企业 Instacart 主管数据科学的副总裁,Daniel Tunkelang 是前 LinkedIn 的数据主管.作为在数据科学领域身经百战的老将,他们在这篇文章中为那些想打造一支属于自己的数据科学团队的公司 CEO 们提供了一些建议,主要涵盖了这几个问题:数据科学为什么对很多创业公司如此重要?公司应该在什么时候在数据科学方面进行投入?应该将数据科学团队放在公司里的什么位置上?如何营造一个尊重数据科学的文化氛围? ◆ ◆ ◆ 你

数据科学 怎样进行大数据的入门级学习?

数据科学并没有一个独立的学科体系,统计学,机器学习,数据挖掘,数据库,分布式计算,云计算,信息可视化等技术或方法来对付数据. 但从狭义上来看,我认为数据科学就是解决三个问题: 1. data pre-processing;(数据预处理) 2. data interpretation:(数据解读) 3.data modeling and analysis.(数据建模与分析) 这也就是我们做数据工作的三个大步骤: 1.原始数据要经过一连串收集.提取.清洗.整理等等的预处理过程,才能形成高质量的数据:

数据科学之5个最佳Python库,为初学者定制的教程

如果你已经决定把Python作为你的编程语言,那么,你脑海中的下一个问题会是:"进行数据分析有哪些Python库可用?" Python有很多库可用来进行数据分析.但不必担心,你不需要学习所有那些可用库.你只须了解5个Python库,就可以完成绝大多数数据分析任务.下面逐一简单介绍这5个库,并提供你一些最好的教程来学习它们. 1Numpy对于科学计算,它是Python创建的所有更高层工具的基础.以下是它提供的一些功能: 1. N维数组,一种快速.高效使用内存的多维数组,它提供矢量化数学运

《Python数据科学指南》——第1章 Python在数据科学中的应用 1.1 简介

第1章 Python在数据科学中的应用 在这一章里,我们将探讨以下主题. 使用字典对象 使用字典的字典 使用元组 使用集合 写一个列表 从另一个列表创建列表--列表推导 使用迭代器 生成一个迭代器和生成器 使用可迭代对象 将函数作为变量传递 在函数中嵌入函数 将函数作为参数传递 返回一个函数 使用装饰器改变函数行为 使用lambda创造匿名函数 使用映射函数 使用过滤器 使用zip和izip函数 从表格数据使用数组 对列进行预处理 列表排序 采用键排序 使用itertools 1.1 简介 Py

快问快答 | 助教带你学习数据科学(附答疑视频领取)

Q: 可以推荐一本完全零基础的python书看一下吗?我没有数据基础. A: <简明Python教程> Q:在校生,想搞明白未来的职业发展. A:我看数据科学相关的岗位有,比如:数据分析,数据挖掘,机器学习,自然语言处理,计算机视觉,深度学习工程师等等,还有推荐算法.搜索算法. 我觉得咱们的培养目标和数据挖掘.机器学习这两个岗位的要求更贴近.当然,像数据分析.自然语言处理.计算机视觉.深度学习,推荐算法等等这些岗位,就是更专业一点,或者说更垂直一点. 我一直觉得机器学习目前还不是一种通用技术,

了解人工智能之分类和预测 - 数据科学中的预测,分类和回归分析

在上一篇中,我概括地解释了一些主要的人工智能概念,包括机器学习,神经网络和深度学习.也概述了当前人工智能背后的基本原理,提及了从大量样本中学习的机器学习系统,解释了深度学习系统能够更丰富地展现这些样例.那接下来我们就来说说利用这些人工智能系统我们今天可以做些什么,有哪些用途,以及现在的研究领域与方向. 总的来说,我们可以从两个方面来利用当前的人工智能系统: 完成更出色的数据科学工作 我们长期以来使用传统统计方法或软件工程来处理下面这些数据科学领域的工作.但是在有了机器学习系统以后,我们可以做得更

数据科学入门难?老司机为你盘点 24 门精品课程

本文盘点了 24 个高品质的在线数据科学入门教程,原作者 David Venturi,他获有化学工程和经济学的双学位,热衷于数学.数据科学和统计学,同时也是一位编程爱好者.更具传奇色彩的是,他本来就读于一所名校的计算机科学专业,但觉得对数据科学更感兴趣--于是果断退学,从 Coursera.edx.Udemy 等慕课平台开始自学,终迈入专家行列. 他的经历说来也并不特别,世界上又多了一个慕课代言人而已.但雷锋网认为,他的经历具有两点价值:首先,最好的教学资源已经在那儿了--很多还是免费的,取不取

《Python数据科学实践指南》——导读

前 言 为什么要写这本书 我接触大数据技术的时间算是比较早的,四五年前当大数据这个词火遍互联网的时候,我就已经在实验室里学习编程及算法的知识.那个时候我一心想要做学术,每天阅读大量的英文文献,主要兴趣更多的是在机器人和人工智能上.研究生毕业时我本来想实现早先的愿望,继续攻读博士学位,不过思来想去觉得不应该错过大数据这个机会,所以毅然决定投入大数据行业中. 在工作之初,市面上已经存在一些介绍大数据相关技术的权威著作,其中很多还是很底层的或特定领域的专著.但即使是我这种自诩为"学院派"的人

《Python数据科学实践指南》一导读

前言 为什么要写这本书 我接触大数据技术的时间算是比较早的,四五年前当大数据这个词火遍互联网的时候,我就已经在实验室里学习编程及算法的知识.那个时候我一心想要做学术,每天阅读大量的英文文献,主要兴趣更多的是在机器人和人工智能上.研究生毕业时我本来想实现早先的愿望,继续攻读博士学位,不过思来想去觉得不应该错过大数据这个机会,所以毅然决定投入大数据行业中. 在工作之初,市面上已经存在一些介绍大数据相关技术的权威著作,其中很多还是很底层的或特定领域的专著.但即使是我这种自诩为"学院派"的人看