关于机器学习,非数学/统计专业的人都会有这些疑问:
到底要把数学学到什么程度才能够无障碍地推导机器学习算法?实变、复变、泛函、矩阵论到底要不要全都学会?入门机器学习到底要看什么书?除了机器学习,真正的工作中还哪些必要技巧?如何入门深度学习?如何着手开始进行数据挖掘项目?下面,我会对以上问题逐个进行细致分解,结合自己的学习及工作经历为你一一解答,并给你提出适合建议。
数学要到什么程度?从最基础的来说,微积分、线性代数与概率论是学习机器学习的必会内容。相信大家看到这个答案会很失望,但是放心,这绝对不像你想象的那么难。在本科期间,我们学习数学的目的其实是为了期末考试,需要做很多习题。而在机器学习中,使用到的仅仅是这些他们的特性,而不需要用他们来解题,所以只要知道他们的定义就可以。
比如线性代数,我们仅仅需要了解向量、矩阵和逆矩阵等等的定义,而不需要去真正的计算逆矩阵。
这说明,我们不需要花费大量时间去学习数学,而只需要了解并记住他们的定义。
那么,看什么书好呢?我个人给大家推荐的是《金榜图书》的考研数学讲义系列的《高等数学辅导讲义》、《线性代数辅导讲义》和《概率论与数理统计辅导讲义》。这三本书算是考研数学入门级,他们的优点是简洁、全面,把教科书中几百页的内容压缩到几十页,如果不看其中的例题,几天就能看完。
这三本书外,还有很多数学内容需要学习,比如Jacobian矩阵、张量、特征分解、奇异值分解(SVD)和Moore-Penrose伪逆等等……这些是实分析、复分析、矩阵论等书中的内容,也是机器学习的必会内容。
看到这里你可能会开骂了,我要是会这些,干嘛还看你写的东西!
放心,我就是来给你解决这些问题的。之前我说过,推导机器学习算法的过程中,需要的是了解数学定义,而非系统地学习每门课。然而想要通过看书学习某一个知识点是很难的,因为需要很多先修知识,否则根本看不懂。这里,给大家推荐一个非常良心的免费在线课程可汗学院(矩阵了。
入门机器学习到底要看什么书?关于入门机器学习要看什么书,网上已经有很多人提出过建议。 而我的建议是:不看书。是的,不看书。所有的书都假设你的数学基础已经非常好,很多数学推导并没有告诉你其中的根源,使你无法看下去。
只有一个人,他假设你只懂最基础的微积分和线性代数——林轩田。他在台大开设的两门公开课"机器学习基石"与"机器学习技法"(网上很容易找到),基石是机器学习基础、技法是机器学习算法推导。不过,这两部视频似乎在各种方面都不如Andrew Ng的机器学习课程。而且几乎每一个看过他的"机器学习基石"课程的人都表示非常不喜欢,看不下去,原因有三:无聊、推导公式的过程太细,不知道学过之后的用处。讲到这里,大家可能会想到,当年学习高等数学的时候,好像也是这种感觉?对的,他的课程非常"无聊"但确实很重要,而且他讲的每一节课只要认真思考就一定能够听懂。他讲的是机器学习中最重要的基础,当你真的懂一点机器学习的时候,反过来看基石中讲的内容,比如Break Point、VC维、误差衡量、线性回归、非线性转换和梯度下降,哪一个是不重要的?
当你看完"机器学习基石",我建议你继续学习他的"机器学习技法"。我相信你刚开始学习"技法"的时候,会发现他比上部更加无聊,于是忍不住去看对应的书籍,想要避免看这种无聊的视频。然而,你最后一定还会回来继续看他的视频,因为你会发现他的视频虽然巨无聊,但讲的真的很细致,每一步推导都讲的很明白!
在学习"技法"课程的时候,你可以同步的看书了,因为光看视频,很多东西会忘记,要不断的看书复习。这里,我推荐给你三本书:《统计学习方法》by李航、《机器学习》by周志华、《机器学习》by Mitchell。这三本书都是机器学习界入门的经典书籍,我之所以同时推荐三本,不是让你做三选一的选择题,而是把这三本对照着看:
《统计学习方法》对公式的推理深入;Mitchell的书重在算法思路的讲解,对公式的推理很浅显,但易懂;周志华的书内容更加广泛且包含很多两本书中没有的内容。建议学习的时候以李航的书为基础,与视频对照着看;使用周志华的书进行补充;当无法理解某处的时候看Mitchell的书。
除了机器学习,真正的工作中还哪些必要技巧?
真正的工作和项目中,只会机器学习是不够的。最早的就是对数据进行清洗,数据清洗工作和机器学习算法的选择同样重要。数据清洗注意需要掌握两点:数据处理与正则表达式。这里推荐三本书:《Python数据处理》、《数据科学实战手册(R+Python)》与《正则表达式经典实例》,前两本讲的是数据清洗处理,最后一本讲的是正则表达式的语法。这三本书讲的是通用技巧,在具体工作中所需要的方法是不同的,不要把自己禁锢与书本中,要在具体的工作中自己思考。
如何入门深度学习?目前,深度学习并非工作的必备技能,仅仅是加分项。所以我建议大家在掌握了一定的机器学习知识后,再开始学习深度学习的内容。
深度学习最好的入门书籍,莫过于《神经网络与深度学习》by Michael Nielsen,该书有中文版。这本书通俗易懂,用最简单的语言和例子阐述了概念和原理。但这本书虽然通俗,却非常细致的把深度学习最基础的核心算法——BP网络的数学公式仔细地推导了一遍,乍一看很容易,但如果多读几遍,相信大家每一遍都会有不同的收获。
在读了《神经网络与深度学习》后,需要开始学习CNN、RNN等主流的深度学习网络了,学习这些网络的时候,也需要把他们的BP算法推导清楚,目前我见过的讲解最好的不是书籍,而是一位网名为hanbingtao的作者在网上写的Blog,该Blog把深度学习从最基础的感知机基础到CNN、RNN、LSTM的数学公式都推导了一遍,而且很浅显易懂,强烈建议大家阅读。
如何着手开始进行数据挖掘项目?着手数据挖掘项目,首先要选择一门合适的语言。数据挖掘可以用很多语言完成,R、Python、Java等等都可以,但我个人建议大家使用Python,因为使用Python相对简单且大多数公司都要求使用Python进行工作。 刚开始进行数据挖掘项目的时候,很多程序员出身的人会陷入一个误区,认为既然是做项目就要把算法的每一个细节都自己实现,而是不使用现成的工具包,担心自己会变成调包侠。其实,每个高手都是从调包侠开始的,而且自己写的代码都是使用Python完成的,效率与工具包中直接调用C语言的代码相比要差很多。而且,在入门阶段,不应该花费极多的时间只为了对算法造轮子。在后期,当你的能力足够而进行一些非常复杂的项目的时候,才会觉得工具包满足不了你,那时候再顺其自然的造轮子岂不甚好。
说到Python的机器学习工具包,不能不提到scikit-learn。scikit-learn的算法非常齐全(几乎把所有你能想到的机器学习算法都包括在内,甚至数据预处理、特征提取等等都有现成的工具),调用简单(两条语句就能训练出一个模型),API非常友善(可以到官网)。学习scikit-learn最好的一本书是《机器学习系统设计》by里彻特。这本书共12章,除去最后一章外,每章都带着我们从最基础一步步地做出一个数据挖掘项目,其实把这本书看完,其实已经有最基础的数据挖掘项目能力了。
除了scikit-learn外,还有一个深度学习框架也非常好,叫做Keras。Keras的底层可以用TensorFlow或者Theano,在理解神经网络的情况下,学习Keras只需要花费极短的时间就可以上手,这里建议大家学习一个免费视频课程:莫烦Python(的语法。
以上是所用到的工具,学完《机器学习系统设计》已经有基础的实战能力,但其中的一些流程该书并没有系统地介绍,如果想要更加系统的学习,推荐大家阅读《数据挖掘导论》,这本书包括分类、关联分析、聚类和异常检测的项目流程实例,还提供数据集和幻灯片,非常适合系统的学习。
在以上的事情都做完后,大家可以上Kaggle进行小的比赛,只要足够努力,拿到一些小比赛的Top5%还是有机会的。
写在最后当你一步步的按照我给你的建议进行学习之后,会发现其实这些理论其实很简单,但实际应用起来绝非易事,这也构成了大多数搞数据挖掘的人能力平庸无奇的事实。这里,我对大家有几条私人的建议:
机器学习的理论基础一定掌握好,这是未来长远工作的筹码。在学习算法的过程中,永远是对算法的效率进行分析揣摩在第一位,具体的代码实现在第二位,不要本末倒置。对算法的学习要掌握所谓的"分寸",相对重要的部分多学,不太主流的部分稍稍了解即可。英语很重要,你会越来越发觉英语的重要性,请坚持每天学习一点英语。学习机器学习算法要真正学懂,某些小的地方学不懂便跳过,最终会造成很多漏洞,而这漏洞,填补起来要花费很大的精力。祝您学习的过程是愉快的,前路虽艰,行则心安。