https://mp.weixin.qq.com/s/eFXb2swj07Ywld9pDop3hQ
机器学习在很多眼里就是香饽饽,因为机器学习相关的岗位在当前市场待遇不错,但同时机器学习在很多人面前又是一座大山,因为发现它太难学了。在这里我分享下我个人入门机器学习的经历,希望能对大家能有所帮助。
这篇文章不会有太多机器学习方面的专业知识
更多的只是学习经历与经验分享
入门之前先来让大家心里看个数据,机器学习工程师在市场上到底值几斤几两呢?我们在拉勾网上搜索 机器学习关键字,得到了下面的结果:
可以看出来,这个待遇在当前 IT 行业中还是很不错的,究其原因,是由于这个市场目前是供不应求,人才紧缺,自然而然与之相关的岗位待遇会相对 IT 行业中的其他岗位较高。
先来分享下在开始入门前我的基础吧,先罗列下当时我所掌握掌握的知识吧。
掌握了 Java SE
本科所学的微积分,线性代数,概率论中的知识忘得所剩无几
看了上面两点,你会发现,当时的我其实除了掌握 Java SE 之外,连 Python 也不会,此外,微积分,线性代数,概率论中的知识我也基本上全都还给了大学老师了。
这时你再想想你当前的情况,你是不是发现你的情况跟我很像,甚至会比我的情况还好呢。
像我这样的条件都可以入了门,你们有什么理由无法入门呢?
首先说明一点,我个人在入门过程中经过了有看过视频、也有看过书,看过博客,也有直接做一些项目,这些过程是交互进行的,现在我将这些按照相对顺序来介绍下。
聊聊Python
在当时Python在机器学习领域已经使用非常多了,另外Python除了也可做机器学习外,还可以做后端(如Django/Flask等)。所以我首先学习的是 Python,在准备学习它的时候,我最开始采取的方式是看教学视频,但是发现太耗时了,所以看了两节之后果断放弃,进而我发现了廖雪峰关于Python的教程,看博客或者看书的方式会相对比看视频快很多,由于我个人有 Java 编程的基础,所以在看廖雪峰关于 Python 的教程时相对容易点。这里建议如果没有任何编程基础,建议还是选个Python的入门视频来学习。
如果说单纯的学习一门语言的话,这水其实是很深的,但对于我们大多数人来说,尤其是入门的时候,我们并不需要将Python的方方面面都学会,我们只需要有重点的掌握Python我们所需要的几个部分就好,剩下的我们可以在之后工作项目中进步学习和加深。
对于要入门机器学习的同学们,我这里整理下前期Python所需要学习的部分:
Python语法基础,包括数据类型和变量、条件控制语句(if else、for、while)、列表(list)、集合(set)、字典(dict)、元组(tuple)等
面向对象部分,包括函数的使用、函数的多种参数、匿名函数、类和实例、继承和多态等
Python高级特性,包括切片、迭代、列表生成式、字典生成式、迭代器、生成器等
IO操作及异常处理,包括读写文本文件、读写二进制文件、异常捕获和处理等
常用的内置模块,包括 datetime、os、system、re等
除了以上的关于Python的基础外,还有一些第三方模块我们需要掌握的。由于在使用机器学习算法时,经常需要处理数据以及可视化结果。在这里推荐以下几个第三方模块:
pandas,数据分析必备神器,功能众多,前期我们只需要掌握它的一些基本用法就OK
matplotlib,Python中众多数据数据可视化的一个基础库,能够使用它绘制基本图形即可
对于我来说,这些第三方模块都是在工作的时候学习的,并不是刚开始就学习的。以我的经验给大家指出一个陷阱,在我们入门阶段,不建议大家刚开始就深入学习这些模块的底层,我的原则是:先学会使用,再研究原理。以 pandas 为例,pandas 底层用到了 numpy、scipy、matplotlib,如果你要先系统地把这些底层所有的知识学习一遍,你会发现在你有限的时间内,你根本学不完,即便你有这么多时间去学完,你会发现学了后面,忘了前面。
相关的学习链接:
Python(廖雪峰),http://t.cn/RK0qGu7
Pandas,http://pandas.pydata.org/pandas-docs/stable/10min.html
Matplotlib,https://matplotlib.org/tutorials/index.html
聊聊机器学习算法课程
在掌握了 Python的基本用法后,我开始寻找学习机器学习的资料,当时的情况是市面上并没有众多关于这方面的培训机构,经过各种搜集,最后选择了吴恩达在 Coursera 上的机器学习课程。虽说课程语音是英文,但有中文字幕,所以看起来还是很方便的。在将吴恩达课程学完之后,你会对常用的机器学习算法有一个基本的了解。
这里列举出课程中所讲解的一些常用算法和内容:
线性回归
逻辑回归
神经网络
支持向量机
非监督学习
降维、异常检测
推荐系统
应用机器学习建议
看了上面的各种算法,你可能会问,这么多听起来很牛逼是算法,我的数学基础(微积分、线性代数、概率论)不好,能听的懂么?
在入门的时候,不建议大家将所有的数学知识全都学一遍,再来学习机器学习算法。一是时间长,而是学了不用就忘了。 选择一个好的视频教程,你可以事半功倍,,吴恩达老师课程的一个优点就在于他是专门针对我们这类的人群的,他的视频中不会有很多数学公式推导,但是仍然可以将这个算法跟你讲解清楚。
此外,台湾大学林轩田教授也有专门的机器学习视频(包括两部分:基石与技法)。这个视频在国内评价也较高,有兴趣的也可以跟着这个视频来学习。
关于吴恩达以及林轩田的机器学习相关的视频课程,之前已经有过分享,需要下载的请见:资源 | 2018年,你想要的机器/深度学习资料在这里
相关学习链接:
吴恩达机器学习课程,https://zh.coursera.org/learn/machine-learning
聊聊机器学习书籍
在学习了吴恩达老师的课程后,可以再读一些相关的书籍来加强对机器学习的理解,当时我买了挺多的书籍,有一本书叫做《机器学习实战》,在这本书里会教你使用 Python 来实现常用的一些算法,当时按照书上的讲解手动敲了一些算法的实现,当你手动实现后,你会发现你对它的理解会更深了。
在实现书本上的一些算法时,会遇到某些算法的原理不太明白的地方,由于自己的数学知识(微积分、线性代数、概率论)基本上都还给了大学老师了,系统的去学习每个模块是非常耗时的,这时候采取的策略是“缺啥补啥”,也就是说发现哪方面的知识和公式不太明白,就去查阅与之相关的资料。
在当前,如果你想购买相关书籍,我可以再推荐两本给你,一本是周志华的《机器学习》(通常也叫西瓜书),这本书在我学习的时候还没出版;另一本是李航的《统计学习方法》。
聊聊如何通过工作/比赛提高水平
在掌握了Python的基本用法以及对机器学习有了基本了解之后,当时的实习工作有一部分是使用机器学习算法来去识别用户的评论是否违法,也就是一个二元分类问题。最开始的时候同阅读同事实现的Python代码,试图去搞明白每一行的含义,也就是在这个时候,自己开始查阅 pandas 和 sklearn 相关的文档,这样最后不仅搞明白了同事的代码,自己对 pandas 和 sklearn 基本的用法也有了一个认识。
这里多说两句,掌握了 pandas 后,在处理小数据量的时候会非常得心应手(如果数据量大的话,会非常慢);sklearn 是一个非常优秀的开源的机器学习Python库,这个库实现了很多机器学习算法,并且提供了非常详细的官方文档,认真阅读官方文档可以收获很多。如果你英文不太好的话,可以阅读相应的中文文档,文档地址可以见下面的学习链接。
如果说自己没有实习或工作机会,我推荐你去参加 kaggle 比赛,kaggle 是一个提供数据挖掘相关的比赛平台,在这里会有很多相对接近现实生活的比赛,此外,也会有很多大神分享自己的思路、做法和代码,通过阅读这些代码也能快速的提高自己的水平。
相关学习链接:
sklearn,http://sklearn.apachecn.org/cn/latest/
kaggle,https://www.kaggle.com/
在入门了机器学习之后,在实际工作中,绝大多数的情况下你并不需要去创造一个新的算法。另外,大多数时间你也不是在去研究别人的算法时如何写出来的,而是处理数据,运用现有的第三方库去跑模型、调参数。听完我说的这些,你是不是很震惊,高大上的机器学习工程师在实际工作中大多数时间竟然是去洗数据,调参数。但事实就是如此,除非你在一线互联网公司,而且还是某些部门,你可能会需要自己重新去实现某个算法,否则其他公司的情况大多都是差不多的。
入门后再来聊一聊数学知识在机器学习中的作用,虽说你数学知识不好,一样可以调用第三方库的模型。但是如果你想要深入理解算法,数学的底子还必须是有一点的。如果你要入研究这个领域,你必须要捡起来你忘掉的数学知识。此外,在面试时,这些算法的原理相关的知识还是必问的。
有时候并不是你的能力不够,也并不是你不够努力,只是缺少了一个正确的引导而已。