遗失的……干货?

忘记什么时候从互联网上学会干货这个词,按照我的理解,如果别人说你的内容是“干货”,这是一种表扬。很多文章标题也用“干货”来博人眼球。信息时代下的人们对速度空前的执着,即使是知识也希望高效精华,满满的干货。这种对速度的追求让我深感不安。

很多评论说碎片化正在侵蚀我们系统性思考的能力,但我觉得这只不过是替罪羊罢了。真正的罪魁祸首是根植于人性中的懒惰和贪婪,我们不想花太多努力,但又想得到最大的回报。而移动互联网时代的便捷,和各种社交媒体导致时间的碎片化只不过放大了人的劣根性。因为每次只有一小块的时间,所以大家希望得到的是在短时间内能够读完,然后立马get到新技能的“干货”。如果这是你想要的,本书要让你失望了。本书的目的是帮你绕开一些弯路,但数据科学家没有捷径可走。

平滑的大脑比褶皱的肌肤还要令人恐惧。大脑上每一道褶痕都需要付出足够的努力和汗水。大脑除了灰质以外还有近50%由“白质”构成,英文叫做myelin,中文翻译成髓磷脂或者髓鞘质,其产生并且包裹大脑神经元轴突的过程叫作神经髓鞘化(myelination),这个过程从出生3个月就开始发生。神经髓鞘化能使神经传导速度变快,因而对学习新技能而言非常关键。在婴幼儿阶段,神经髓鞘化发生极其迅速,因为这个时期婴儿需要习得大量新的技能,从爬到跑,从哭闹到能够说话。虽然随着年龄的增长,这个过程逐渐减弱,但大脑的可塑性伴随我们一生,也就是说只要你努力练习,神经髓鞘化的过程会一直继续帮助我们不断学习新的技能,只是这需要大量、反复、有针对性的练习。所以再次强调大家动手重复书中的代码,尽量找机会将书中介绍的知识付诸实践。只有练习才能搭建数据科学的大脑回路。【注:关于成年人如何发展大脑,神经干细胞研究员Sandrine Thuret在TED有个很有意思的演讲:You can grow new brain cells. Here’s how。关于大脑工作的一些书有:Mind Wide Open,The Human Advantage,Thinking Fast and Slow,What intelligence tests miss。这些书都很有意思,可以帮助大家了解我们的大脑和思考模式,有助于找到有效的学习方法。Coursera上还有一门基于脑科学研究总结出的教你如何学习的课程,很推荐大家听听,课程的名字叫做Learning How to Learn。】

这自然就引出另外特别重要的一点:做一个终生学习者,这是匠人精神的精髓所在。这里需要澄清的是,我并不反对碎片化学习,事实上,我觉得碎片化学习和终生学习一样是一个必然的趋势。我反对的是速食学习,不假思索,不经过思考过滤的信息大采购,这种肤浅的学习方式给你的只是一种觉得自己无所不知的幻觉。你完全可以利用碎片化的时间深入思考一个问题。得到的信息最后需要通过反刍,过滤,实践才能真正转化成知识。

不断学习的目的在于认知升级,而非单纯的记忆信息。认知升级是指你能在各种信息中把握重要的信息,在遇到问题的时候把握解决的关键点,然后基于已储存的知识找到当前较优的解决方法。为什么不是最优的?因为这通常很难实现,当一个解决方案到一定程度能够满足当前需求的时候,你就需要考虑继续优化结果的成本和带来的收益是不是匹配。比如你用一个简单的逻辑回归可以达到90%的精确度,这个时候你尝试随机森林,得到的精确度是93%,而前者只需要运行不到一分钟,后者却要运行5个小时模型可解释性还很差,这个时候你就要考虑使用更复杂的模型提高精确度是不是值得。如果是在医疗方面的研究,人命关天的事情,当然是越精确越好。但如果是商业决策,这点精确度差异几乎可以忽略不计,而且在这个场合中,可解释性是非常重要的。所以,脑子里的知识应该是活的,需要懂得融会贯通。学习大量的知识是聪明,知道如何使用知识是智慧。涵养智慧的过程,就是认知升级。在信息海啸中保持独立和清醒,是一件非常困难,需要长时间刻意练习的终极技能。

我真心希望对这个行业感兴趣的伙伴能够在这三点上达成共识:

  1. 数据科学家之路没有捷径
  2. 终身学习的必要性
  3. 学习以认知升级为目的

在此基础上,我想对全书做一个总结,指出一些没有讲到的模型方法。书中对最常用,最有效的模型进行了展开。当然,还有很多模型技术书中并没有展开。下面是对遗漏部分的补充说明。

书中对核函数类的算法没有介绍,比如支持向量机。支持向量机(SVM)和广义线性模型类似,是一个框架。由核函数和损失函数组成。你可以通过使用不同的核函数和损失函数来得到不同的模型,但这些都可以叫做支持向量机。所以这是一个灵活度较高的模型框架。在实际应用中,当SVM模型使用的是线性核函数时,其和逻辑回归差不多。SVM的长处在于:

  1. 通常在非线性可分的问题中,SVM要优于逻辑回归。在这类问题中,你可以使用非线性核函数的SVM。
  2. 本身自带的变量选择功能,这来自于其损失函数,所以在一些高维度问题上效果优于传统的逻辑回归,比如文本归类问题,这类问题中通常面对的是非常稀疏的词频矩阵。

在一些自变量矩阵非稀疏的问题中,基于罚函数的逻辑回归不管实际精确性还是在可解释性上都要优于SVM。SVM的一个劣势在于对计算机要求高,这点也是一些集成模型和神经网络类模型的弊端。所以,在用这类模型之前,建议大家先抽取一个小的样本,然后尝试一下。看看效果如何,好的话再用于所有的样本。

用于判别的模型非常多,但在实际应用中不可能尝试所有的模型,也没有那个必要。有很多关于比较各种判别模型的论文,推荐大家搜一些看看,这些文章中会将不同的模型用于不同的数据集,比较模型结果。选择模型是一个很复杂的话题,而且和具体情况有关。SVM在基因分类研究中效果可能不错,但是我在市场数据环境中确发现效果并不佳,所以这里并没有进行详细的介绍,关于这个模型,有很多文献资料,所以对于想要了解模型的读者,推荐大家花时间自己去学习。

当然,对算法的选择也非完全随机,还是有迹可循的。你可以考虑下面几点:

  1. 训练样本量
  2. 特征空间的维度
  3. 凭直觉判断这个问题是线性还是非线性
  4. 各个变量之间独立性如何
  5. 自变量和应变量之间是不是可能存在线性相关
  6. 过度拟合的风险有多大
  7. 模型对计算机计算能力和存储的要求是什么

上面的这些点可能让你有点抓狂,考虑的维度好像有点多,而且有些貌似不是一下就能够很好回答的。学习是个螺旋上升的过程。就好像你开始学习钢琴的时候,觉得同时要注意音调,节奏,左右手还要配合,居然还有情感的处理、弹奏的力度,简直应接不暇。但是人的手指有记忆性,大脑也有记忆性,当你熟悉以后,对之前学过的东西大脑会自然将其组块,形成条件反射般的直觉。于是之后对类似的问题,你就不需要占用太多脑力,而将节省出来的工作记忆花在新的,需要更多思考的问题上。随着经验的丰富,你会对各种模型的优劣,对计算机的需求,问题的性质产生更深的理解。到那个时候,这个过程看起来就不那么抓狂了。

这个世界是复杂的,但是我们终归要找到一个简单的应对措施。如果非得要给一个一般性的简化版的模型选择建议,对分类回归问题(因为这些问题占了主要部分)我会建议大家:

  1. 首先尝试随机森林模型,看看大概的精确度有多少;
  2. 然后至少在此基础上尝试随机助推,看看是否会进一步提高精确度;
  3. 对数据进行更加仔细的预处理,使用罚函数模型,研究选出的变量,以及参数的估计;
  4. 比较不同模型的精确度以及变量的重要性排序,看看是不是一致;
  5. 如果时间精力允许,可以尝试下SVM;
  6. 最后在模型的精确度和可解释性之间进行一些权衡,选择最后的模型。

上面只是一个一般性的建议,不是固定的流程。如果你遇到的是极其稀疏的自变量矩阵,那么这个流程是不适用的,因为矩阵永远都是奇异的,你用罚函数模型的时候报错会让你烦到吐血……

深度挖掘。这好像是T台上的衣服,大家都在谈论,但你几乎看不到有人真正穿出门。我再说一次,深度挖掘其实就是神经网络,是穿了好几件马甲的神经网络。我个人是坚决不建议在一般情况下使用这类模型。如果你在谷歌人工智能团队工作,那你可能用到神经网络。但我想这类人也不会来读这本书。而且这是计算机工程师,而不是数据科学家。在实际生活中的决策问题不是下棋,大家能够理解这一点么?当你有上百万的样本而只有100个变量,其中大部分变量还高度相关,加上面对的不是棋牌,图片识别这类值域定义相对明确的问题的时候,你用个100层神经网络也是 然 并 卵!作为数据科学家,你能做的只能是从数据中挖掘信息,而没法创造出信息来。

如果大家对复杂模型真的那么执着的话,推荐大家看下另外一种集成模型的方法,叫做超级学习器(Super Learner)。和之前集成模型的不同之处在于,这种模型是将不同的模型进行集成,比如随机森林,lasso,svm等。好比从不同的角度看待数据,然后中和大家的结果。这个模型还不是非常流行,但个人感觉能够在不同模型结果中折中的想法很好。

此外时间序列模型也没有讲到。这类方法适用的范围比较窄,我在工作中从来都没有遇到适用这类模型的情况。而且这类模型比较传统,相关的资料教材实在太多,想要了解这方面知识的伙伴可以很容易找到相关资料进行学习。

贝叶斯网络属于概率图模型,这类模型适用于无法严格实验的问题。个人很喜欢这类模型,因为市场营销问题基本无法进行实验,环境具有很强的不可控性。比如你想了解不同的商业策略如折扣、服务、支付方式(如分期付款)以及客户行为之间的关系,这类问题的因素之间通常相互影响,而且没有一个真正所谓的“因变量”。你感兴趣的是其中一个或多个变量的变化对其它变量分布可能造成的影响。当前能够应对这种问题的最好方法也就是概率图模型了。由于本书篇幅限制,没有办法对这个有用的模型进行详细展开。关于贝叶斯,还想补充一点,真正的贝叶斯模型应用的还不是很多(至少在业界)。大家耳熟能详的所谓贝叶斯网络,朴素贝叶斯其实只是用到了贝叶斯定理,而非严格意义上的贝叶斯模型。贝叶斯模型应该有先验分布和似然函数,而贝叶斯定理只是一个概率统计常用的定理。个人觉得真正的贝叶斯在业界的应用还是有很大潜力的,因为很多实际问题很符合贝叶斯的逻辑,通常我们都有一些专家知识(先验信息),然后获取数据结合之前的先验信息得到后验分布。当然,这要展开讲就太大了。

关于可视化,虽然没有单独的讲,但是在书中各个章节案例代码中频繁的用到。可视化不是一个适合单独讲的话题,更好的方式是结合具体问题。因为这是一个辅助的工具,仅仅列出一大串的工具而脱离具体场景是没有意义的,大家也很难记住。

最后需要讲到自动化报告。这个我犹豫了很久,因为这是也是我每天都会使用的利器。按道理是应该讲的,但最后还是决定不讲。一来这个话题本身和可视化一样,最好还是结合案例讲。二来,这个话题和可视化,以及围绕Rmarkdown的一系列生成交互html页面的工具联系紧密,所以最好是将这些话题放在一块结合案例介绍。这样一来其实牵扯到的是一个围绕自动化报告的生态系统,内容就太多了。想要了解相关知识的小伙伴可以关注Rstudio的文章以及谢益辉的书Dynamic Documents with R and knitr.

不知不觉,居然又碎碎念了这么多。希望你觉得本书对你有一点帮助。不管你的职业选择是什么,尊重你正在做的事情,享受你正在做的事情,认真对待你正在做的事情的一种状态,它里面包含着对生活的一份热爱和对未来的美好的预期。