哪些专业需要学python-想转专业数据科学(机器学习),需要学哪些课程?

利益相关:本人背景应用数学,运筹,优化,目前主要做图像处理、机器学习以及供应链方面的数据分析的应用,和目前大热的Data Science渊源比较深(优化、统计、数值计算等"基础学科”乃数据分析、数据科学的底层算法),希望对想入门数据科学和机器学习的朋友们有点借鉴作用。

首先,你可需要了解,数据分析和数据科学的区别:

敬请关注与题意密切相关2018.3.3的知乎Live(斯坦福大学决策/数据科学博士、前Google全球商业运营高级经理联合主讲):

如果对人工智能、数据科学还不是很了解的同学,可参考以下综述:

先说点宽泛的、上纲上线的东西。(要干货的可以直接跳至后半部分)

机器学习,大数据这些新兴专业,是随着工业界与日俱增的需求而随之出现的(中国最近批准了第一批试点的几十所高校开设数据科学专业)。其实任何专业都是这样一个需求导向的过程,包括微电子,计算机,还有什么房地产专业。。你说几十年前你们听说过这些专业么?

自然科学如数学、物理、化学、生物长盛不衰,是有其道理的,这也是为什么我们初高中我们都在学这些东西。而某些专业,也会随着市场需求的锐减而减少甚至消失。

这些专业名词在刚出现的时候往往是"凭空造诣”或者是强加术语,然而知识是需要积累的,不是凭空出现的,也就证明了如大数据、机器学习这样的东西,其实是科研圈已经研究或者已用了很多年了,然后市场需求强烈,为了顺应市场需求,大批学校争相决定开这个专业,于是喊一帮教授或院士过来拍板,这个专业需要哪些基础课程,我们就把这些基础课放进来,这也是我下面的回答要强调的。(因此"需要学哪些课程”这个问题最好的答案,就是去一个名校的数据科学或机器学习项目里看课程设置,这里我推荐一下UCL的Machine Learning Msc)

本文要讲的,不包括数据库那个方向的大数据。

简单的说,原理和基础都在数学这边,当然有很多偏应用和软件使用的课程,这些直接大街上报个培训班就能学会的技术含量不那么高的东西,不在我的讨论范围内。我要讨论的,是如何系统的学习,然后自己能编出这些处理大数据的程序或软件,我想,这才能称为一个合格的数据科学家。

-----------------------------------------------

好了,下面是干货。(已经过多次私人咨询过程中,多个名校数据科学/人工智能硕士、博士项目的先修课程所验证)

1, 微积分(求导,极限)和线性代数(矩阵表示和运算)是基础中的基础;

2, 数据处理当然需要编程了,因此C/C++/Python任选一门(推荐Python,因为目前很多库和Library都是用python封装),数据结构可以学学,让你编程更顺手更高效,但是编程不是数据处理的核心,相对而言算法还来的重要一些,因此建议再上一门算法课。

当然了,楼主所在的图像处理界,熟练使用matlab或者Python调用opencv库是必要条件,但是again他们只是工具,业余时间自学,多练练就没问题。有同学一直提问用R行不行,楼主补充一点,用什么编程语言很大部分取决于你的核心算法会调用什么已有的库函数,比如楼主的科研里面核心算法往往是MIP(混合整数规划)问题需要调用Cplex库函数,因此C/C++/Python/Java这些和Cplex接口良好的语言都可以拿来用,这时候R就别想了。

另外虽然图像处理界一些open-source的code都用C++写的,但是鉴于使用方便都会提供Python的接口,因此需要用到这些code的话,用Python调用比较方便;但是,如果是高阶骨灰级玩家,需要修改甚至自己写源代码,那么还是推荐C/C++,因为他们的速度最快。

更新:数据处理还需要数据库存储数据,因此如何更高效的存储和管理以及调用数据,就显得尤为重要。SQL等数据库,以及Hadoop,Spark等并行计算的框架,是最近的热点,推荐学习。

3. Mid-level的课程,概率论+统计(很多数据分析建模基于统计模型),线性规划+凸优化(或者只学一门叫numerical optimization,统计到最后也还是求解一个优化问题,当然也有纯优化模型不用统计模型的),Machine Learning(其实机器学习,通篇都是在讲用一些统计和优化来做clustering 和 classification这俩个人工智能最常见的应用),学到这里,你基本就会发现,学这一门课中间会穿插着很多其他课的内容。恩,知识总是相通的嘛,特别是这些跨专业的新兴学科,都是在以往学科的基础上由社会需求发展而来。

学到这里,其实你已经能看懂并且自己可以编写机器学习里面很多经典的案例了,比如regression,clustering,outlier detection。

关于优化类课程的综述,欢迎关注我的专栏:

4. 再高阶的课程,就是比较specific的课程了,可以看你做的项目或者以后的concentration再选择选修,比如:Probabilistic Graphical Models(概率图模型), Nolinear Optimization(非线性优化), Integer Programming(整数规划) ,计算机视觉,模式识别,视频追踪,医学图像处理,增强学习,深度学习, 神经网络,自然语言处理,网络信息安全,等等等等。

再比如有用偏微分方程做图像处理的(比较小众),那么这时候你肯定要去学一下偏微分方程了,大都是以科研为主导的。科研嘛,为了发文章,就是要尝试前人没尝试过的方法,万一效果不错呢,就是一篇好paper了,对吧。

注意这里是偏机器学习或计算机视觉的,如果是自然语言处理,那么可能还要自学一些语言学(句法等结构)的基础课。

正如我说的,学到Mid-level,就已经具备绝大部分理论基础了。然后做几个实际项目,就能上手然后就可以"吹嘘”自己是搞数据科学的,就能找到一份工作了。要读Phd搞科研,那么高阶课程必不可少,而且同一个topic你需要上好几门课,并且你博士的课题,很可能只是一本书中一个章节里面一小节里讲的算法,去改进他。

比如,楼主的博士课题就是mixed linear programming + discrete graphical models + markov random fields + regression + clustering + segmentation。

如果大家想申请AI、数据分析的硕士项目的话,强烈建议参考UCL Machine Learning 硕士项目的课程安排。

注意我不是在推荐大家申请这个项目,只是觉得这个硕士项目的课程安排非常好,由浅入深,各个应用方向也都有涉及,有足够的选择空间。

至于书目,没有特别推荐的,但是建议看英文原版。另外直接Youtube看视频课程,很多国际知名教授都很无私地把自己上课的视频放在youtube上免费学习(搜索我上面列出的科目名字)。如果确实要楼主推荐,那就推荐海德堡大学历史上最年轻的教授 Fred的机器学习视频(我基本都看过):

另外一个教授给你上课的时候,开头一般是会推荐书给你的(如果你确实喜欢看书的话)。当然了,是楼主suppose你们需要拥有的基本生存技能。

(注:以下再推荐一些视频,受之以渔。多为graduate course,仅作演示目的)

1,Machine Learning by Prof. Nando de Freitas, 此视频是其在UBC时13年所录,后来跳槽去牛津计算机系了。

2,Deep learning at Oxford 2015 by Prof. Nando de Freitas, 跳槽到牛津所录。

3,Probabilistic Graphical Models by Daphne Koller, 斯坦福大学计算机系教授

另外还有一些付费的学习网站,如Coursera,优点是结课后可以拿分数和证书,并且很多世界名校的教授在上面开课。

最后,建议多看看招聘广告中,对各个职位的要求,通常都会写明希望你掌握的技能点。

---------------------------------------------------------------------------

再罗嗦一下解决一个实际大数据问题的一般流程。比如一个生物医学公司找到我,要求我做一个视频里面cell tracking的项目。(一帧既为一张图片,假设500*500=25w像素,一个video算它1000帧,总共250 million像素,可以算大数据了吧?)具体流程:数学建模--设计算法--用任意编程语言编写算法(其中会涉及到数据结构,即如何搭建程序使程序更加高效)--导入视频数据到算法里得出结果--根据结果的好坏改进算法甚至模型(如此往复)。这里我强调一下数学建模的重要性,为何要数学建模呢?的确很多naive的算法完全不需要建立在数学模型之上,比如clustering里面经典的EM算法,是一个iterative method,基本一眼就能看出算法的思路然后编程实现,所以称之为naive。那么基于数学模型上的算法有何妙处呢?答案是一个好的数学模型,往往是被研究了几十甚至几百年的学科,比如图论,很多性质都已经被研究得很透彻可以直接使用。回到我的这个例子,cell trancking,我可以建立一个network flow(网络流)的模型(其实也是基于图论的模型),那么这个network flow模型,是一个被研究了很久的领域,因此我可以直接使用很多很多已知的好定理或算法来服务我的问题。另外很多时候,经典的数学模型里面已有很多经典的算法,比如network flow基于里的max flow/min cut theorem的算法,如果能在其基础上做改进,等于站在巨人的肩膀。因此这就是数学建模的重要之处。

往往同一个问题,从不同的角度去看可以有千百种数学建模方法,而不同的数学模型差别往往巨大,而数学建模又是解决一个实际问题的第一步,在这基础上才考虑算法和数据结构设计。因此,数学基础在我看来是重中之重,也是我推荐学习的课程的核心。当然了,计算机系出生的朋友,数学这个层面学习得不是很深,比较偏向于算法的设计和实现,是另外一个侧重点。

关于入行后就业前景(包括第三条运筹学--算法工程师),参见:

欢迎运筹学、机器学习学界和业界的朋友们关注运筹学社区 @运筹OR帷幄:『运筹OR帷幄』大数据人工智能时代的运筹学?zhuanlan.zhihu.com哪些专业需要学python-想转专业数据科学(机器学习),需要学哪些课程?_第1张图片

如果你是运筹学/人工智能硕博或在读,请在公众号『运筹OR 帷幄』后台留言:"加微信群”。系统会邀请您进全球运筹或AI学者群(群内学界、业界大佬云集)。

同时我们有:【运筹学|优化爱好者】【供应链|物流】【人工智能】【数据科学|分析】千人QQ群,想入群的小伙伴可在公众号后台点击"加入社区”按钮,获得入群传送门。

最后是通往大洋彼岸高薪博士职位,以及人工智能数据科学家的传送门:

你可能感兴趣的:(哪些专业需要学python-想转专业数据科学(机器学习),需要学哪些课程?)