最近半个月开始研究Spark的机器学习算法,由于工作原因,其实现在还没有真正开始机器学习算法的研究,只是做了前期大量的准备,现在把早年学习的,正在学习的和将要学习的一起做个梳理,整理一个Spark机器学习完整流程。本文推荐的书籍注重通俗和实战。
基础知识
Linux基础知识和实战
Linux的学习推荐《鸟哥的Linux私房菜》基础篇,这本书是成千上万Linux学习者的入门书籍,诙谐,幽默,深刻,注实战。我早年看的时候是第三版,今年6月份鸟哥已经更新到了第四版。
繁体网址:http://cn.linux.vbird.org/
简体网址:https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/
网络知识
在集群运维时,尤其是生产环境下,各个节点之间的网络问题,至关重要,推荐《鸟哥的Linux私房菜》服务器篇和《Wireshark网络分析就这么简单》,后者的作者是EMC网络存储部门的主任工程师,主要以自己工作中遇到的各种难题,通过调侃的方式,介绍了网络的基础知识(很遗憾,我还没有读完)。
Hadoop基础知识和原理
Hadoop的学习我早年看的书是《Hadoop权威指南》,这本书不推荐,因为确实不好啃,翻译的水平有限,对于初学者来说,容易放弃,我开始学习Hadoop时,应该是1.0时代,这时的三架马车是HDFS和MapReduce,HBase,这几年随着Hadoop的在业界的迅速发展,进入了2.0时代,集成进了雅虎的Yarn资源管理器。当然不管如何发展,HDFS和MapReduce还是Hadoop的核心,最好动手去搭建Hadoop集群(前面Linux的学习在这里就能发挥作用了)。
Spark基础知识和原理
Spark的学习推荐《Spark快速大数据分析》和官网指南,这本书是Saprk开源社区的几位核心贡献者写的,读起来很流程,其中RDD章节是核心,相对于MapReduce每次中间过程都将数据写入硬盘,IO消耗大,RDD则是放在了内存中,速度不言而语(其实就是牺牲内存换速度)。当然最好也去动手搭建集群,这里可以参考我之前写的博客
集群搭建:https://www.jianshu.com/p/4b8b3e2ffe84
开发实例:https://www.jianshu.com/p/eb6f3e0c09b5
开发语言
在机器学习领域的语言,一定是一门函数式编程语言,其次有强大的第三方科学计算库。
Python
在科学计算领域,Python无疑是第一语言,Spark也是支持Python的,Python的第三方库有NumPy(数值处理库)、SciPy(数学符号计算库)、matplotlib等。
Scala
Python作为科学计算领域的第一语言,有着庞大的科学计算库,但是,我个人选择Scala语言的原因有两个:一,Scala语言的函数式设计更好,二,Scala是运行在JVM上的,在生成坏境下速度优势明显。
基础语法的学习推荐:http://twitter.github.io/scala_school/zh_cn/ (Twitter的Scala课堂)
推荐视频1:http://www.imooc.com/learn/613 (慕课网scala视频教程),这个视频是下面英文版视频的简化版,每集7分钟左右,主要理解Scala函数式编程的思想。
推荐文章:https://www.zhihu.com/question/28292740 (函数式编程思维),和上面的视频一起看,基本上是scala函数式编程的精髓。
推荐视频2:https://www.coursera.org/specializations/scala (Scala 函数式程序设计原理),视频是scala语言的设计者Martin Odersky教授讲解的,有中文字幕,这个是深入学习Scala视频。
理论知识
线性代数
如果不熟悉线性代数的概念,要去学习自然科学,现在看来就和文盲差不多 ————瑞典数学家Lars Garding
这句话可能有点过,但至少是机器学习的基础。
推荐视频1:麻省理工学院Gilbert Strang教授的线性代数课 ,视频地址:http://open.163.com/special/opencourse/daishu.html (已看到19集),上学阶段未理解的很多概念,如矩阵列空间,零空间,和行空间及线性变换,这门课讲的很好。
推荐视频2:线性代数的本质 视频地址:https://www.bilibili.com/video/av6731067/ ,B站翻译的视频,作者结合动画形式从几何角度讲解线性变化,矩阵,行列式,向量空间等意义。讲的非常好,谢谢翻译作者。
推荐文章:《线性代数的本质》 一篇博客,和上面的视频结合这看。
推荐书籍:David C.Lay 教授的《线性代数及其应用》,这本书对于矩阵的线性变化解释的很好,是一本很好的工具书,可以随时翻。
Spark高级数据分析和机器学习
下面才是真正的机器学习开始。这里推荐《Spark高级数据分析》和《Spark机器学习》
前者的作者是Cloudera公司的数据科学家,主要以目前业界的案例分析。在理解的基础上最好去动手实践,我个人在集群上运行了第八章的案例,可以参考我之前写的博客:利用Docker搭建大数据处理集群。 后者还没读。
机器学习才刚开始,后续会更新。