大三学生,比较喜欢机器学习,同时又想去工作。想了解一下像机器学习这种门槛比较高的工作有没有可能绕过研究生这三年,而在工作过程中一步一步掌握相关知识,这样算不算走了弯路?
谢邀……邀得还挺准的,我是本科毕业,工作了半年之后跳槽到了一家互联网创业公司,一开始做的是爬虫相关技术开发,然后慢慢就接触了数据挖掘和机器学习相关的开发,现在主要做SEM相关开发,用到和机器学习相关的技术主要有贝叶斯分类器、决策树、Item-CF推荐模型、KNN、关联规则等等。
题主说“喜欢机器学习”,这种话在面试官面前是毫无分量的,如果你真的想做这方面工作,请务必夯实算法和数据结构基础,以及告诉面试官你有极强的自学能力。比如从我自身来说,曾在高中参加NOIP和大学ACMICPC,虽然成绩都没有十分理想(NOIP二等奖、省赛金牌和亚洲区域赛银牌),但是算法基础和扎实程度绝对好过没有参加过类似竞赛的同学(也是很多大公司看重ACM选手的原因)。
如果题主没有竞赛基础的话,会相对困难一些,可以尝试做一些和机器学习相关的小项目。找工作的时候不要直接奔着机器学习的岗位去,这些岗位基本是不会要本科生的,只要找有机器学习相关技术的公司去实习就好了,哪怕做个运维都行(我真没黑运维???)……后面的事情就好办啦。
我想我很符合题主问题的描述。
软件工程专业,大四,intern,现在在做机器学习。
关于如何学习,网上已经有大批的资料,知乎上也有相关问题,已经有人列出了回答,这里不祥述了,基本就是以各种online的课程为基础的自学。
关于求职,首先,你需要向面试官展现出,你是一位很强烈的self-motivated的人:你为什么选择学习这个;为了自学机器学习,学了哪些和怎样学等问题--learningability非常重要。其次,一定程度上表现出/证明出你的数学基础/理论能力。AndrewNg在coursera的课程偏向application,很多知识也只是浅层地窥探一下。更多的算法背后的理论需要你具有很好的数学基础。在面试的时候,我被问了几道概率论的问题(不过比较简单)。
所以我挺推荐以下几门理论更强的课程:
NTU林轩田老师的machinelearningfoundation&&machinelearningtechnique
AndrewNg在stanford的machinelearning
Caltech的learningfromdata等
至于数据结构这些,也很重要。需要表现出来的能力是:学以致用。可以不需要ACM选手那么强的算法与数据结构能力,但是让你设计算法解决问题并给出复杂度,这种能力是必须要qualified--这其实就是大学中算法课程合格的要求。
刚写完左边公众号右边文章,这里分享一下
【原创,若要转载,请注明:来自左边微信公众号右边“数据挖掘机养成记”】
一、如何利用资源
数据挖掘这个领域可供自学的资源很广泛:MOOC(网络公开课)及课程相关讲义、书籍、博客、paper等等。鉴于学习资源浩如烟海,对资源进行过滤是非常重要的,这里谈谈我对资源利用的几点看法:
1.只用经典资源
对于公开课:参考果壳MOOC上学员的评价,coursera的学员讨论区
对于书籍:主要参考亚马逊(美国/中国)、豆瓣上的书评以及GoogleScholar中的引用数,CSDN、当当、京东上的书评也可略做参考
对于博客:只看那几个大牛的个人博客或者专业的社区
对于论文:GoogleScholar的引用数是重要指标,但当你要follow一个新领域时,建议先turtorial再自己看新论文、做评价(因为新论文的引用数一般都不高)
2.通读和略读的取舍在筛选出经典资源的基础上
对于公开课:入门级的课程要坚持上完,进阶的课程选择性听一听
对于书籍:砖头书当参考手册看(如PRML、模式分类、统计学习理论、数据挖掘导论、数字图像处理、C++Primer),实践书、小而美的导论书建议通读(如数学之美、统计学习方法、机器学习实战、推荐系统实践、半监督学习导论、appliedpredictivemodel、essentialC++)
二、我的自学之路
13年之前
数学类课程,只学过微积分、线性代数、信号处理,零碎地了解和使用过神经网络,不了解机器学习,只听说过模式识别(以为就是人脸识别),也正因为对模式识别的不了解,保研的时候放弃了中科院自动化所和计算所两位牛导伸出的橄榄枝,选择离家更近的浙大,读我自己不太感兴趣的控制理论,研究电路。。。现在想来仍是有些遗憾(但不后悔),所以准备读研但没确定方向的同学,一定要抓紧时间多了解研究方向,争取选择自己感兴趣的,让遗憾最小化
13年
1.入学前的暑假,在网易公开课上刷了AndrewNg的《机器学习》(对应stanfordCS229,很老的课程,大概是09年的),那时候coursera还没火,果壳mooc也没创办。这个课程难度比现在coursera上Ng的同名课程要难一些,几乎全是公式推导,而且这门课的SVM是重点,但并未提及神经网络,后来coursera上Ng的课程则是基本删掉了SVM,加进去神经网络(也能理解,因为深度学习火起来了)。当时因为对优化理论、矩阵理论还不够了解,所以留下不少疑惑
2.同样暑假,自学了C++,几乎是把《essentialC++》从头看到尾,然后选了书中一些作业去实现,因为本科一直用C写嵌入式,所以这本书看得比较顺。这本书实乃Lippman的良心之作啊,短小精悍,建议配合他的另一本大部头《C++primer》一起看,作为辅助阅读。虽然后来一直没怎么用到C++,不过看C++库的时候不至于看不懂了
3.入学后在coursera上看了Ng的机器学习的神经网络部分,本来想再看下Hinton的《神经网络》,但要看自己研究领域的论文,就放弃了
4.买了吴军的《数学之美》,科普性质的书,也有推导,深入浅出,引人入胜,非常棒,对搜索和NLP领域的算法有了较多认识
5.买了李航的《统计学习方法》,纯推导,把几大类经典模型背后的理论刻画得淋漓尽致,看了之后对SVM的VC维理论、EM算法等有了深刻认识
6.选修了模式识别,教材用的是Duda的《模式分类》,一本砖头书,建议看前三章,主要涉及贝叶斯参数估计,另外LDA、PCA的推导也可以看看,讲的不错
7.选修了英文版矩阵论,用的教材是老师的讲义,其实国内戴华的《矩阵论》就讲的非常好,国外的推荐看Roger的《Matrixanalysis》(大部头,选择性看)
8.买了《数据挖掘导论》(作者Ping-NingTan,不建议买JiaweiHan的那本),翻了翻,发现里面讲的算法大多已经了解了,讲的比较浅,适合入门,用来建立数据挖掘领域的知识体系结构
14年
1.跟俩基友水了一下阿里的推荐算法大赛,是真的水,我跟另一个基友半途而废浪掉了,后来就剩队长一人苦苦坚持。。。
2.选修了优化课程,自己课余读了读Forst的《Optimization_TheoryandPractice》,偏应用一点,读完之后对理解LR、SVM等模型的优化方法,帮助非!常!大!
3.买了Harrington的《机器学习实战》,开始接触python,同时买了张若愚的《Python科学计算》(后来证明没必要买,作者在网上放了网页版,方便索引和查找),Harrington这本书里的代码只调用了两个包:numpy,scipy,还有个matplotlib用来画图,然后造了一些算法的轮子。现在看来scikit-learn包已经包含了几乎所有常见算法,所以这本书看看代码、选几个实现一下就好,没必要从头到尾实现
4.偶然接触了谱聚类,一发不可收拾,把领域相关的paper几乎扫了一遍,包括Ng2002年那篇、还有个很经典的turtorial,然后follow到了大神林达华的博客,看了他写的谱聚类与图论、马尔科夫链的联系,醍醐灌顶,自己用matlab实现了一下算法
5.开始躲着老师在支付宝搬砖,一开始蛮无聊的,跟着数据分析师纯写SQL,后来接触了新业务,有向网络的关键节点发现,自然而然联想到之前搞过的谱聚类,于是啃了一本20多页的turtorial,得出结论:有向图的谱聚类不适合用在该业务。。。后来又有个业务,主管建议用半监督学习,于是啃了XiaojinZhu的《Introductiontosemi-supervisedlearning》,以及周志华的一些讲义和论文。朱晓进(音译)的这本导论书简单易懂,一下子就让读者catch到了半监督方法的精髓(还有一本偏理论一点的Chapelle的《Semi-supervisedlearning》可作为扩展阅读)。后来自己在用Python实现算法的过程中,遇到一个不小的障碍,于是follow到了大神pluskid的博客,一下子解决了我的问题
15年
1.买了项亮的《推荐系统实践》,大赞,国人难得有这样一本经典问世,虽然有瑕疵,但对于我等初学者来说,非常受益。读完之后对推荐系统用到的模型、整个知识体系都有深刻认识。用网上公开的数据集做了一个toyproject
2.看了下coursera上明尼苏达两位老师的《Recommendersystem》,简单易懂,很快pass完这门课
3.把SVD++、Factorizationmachine相关的paper翻出来看了一遍,发现理论不难,而且早就有成熟的开源库了
4.最近看到一本好书,Kuhn的《Appliedpredictivemodel》,正在看,偏应用,讲了很多trick,在正统的机器学习理论书上不太提及,但是实际非常有用。不过是用R写的,像我这样不会R的童鞋,跳过代码就好了,或者自己用Python实现以下
额外的补充
对上面提到的资源再做一个补充,有些我看过但是忘了何时看的,有些过于基础的我自己不太会看了,还有些是我还没来得及看的
1.林轩田老师的《机器学习基石》和《机器学习技法》,在MOOC上评价相当高
2.Hinton的《神经网络》,我目前做的东西还不涉及深度学习,以后也许会follow
3.Vapnik的《StatisticalLearningTheory》,实在是砖头书而且偏理论,国内有张学工老师的译本
4.Bishop的《PatternRecognitionandMachineLearning》,理由同上
5.Segaran的《ProgrammingCollectiveIntelligence》,国内译本,叫《集体智慧编程》,蛮好的实践书,Python代码,适合入门,我暂时不需要了
6.大牛的博客,除了上面说的林达华、pluskid,还有jerrylead,LeftNotEasy,注意,不要被一个叫“研究者July”的人坑了!不懂的搜知乎对他的评价
7.问答社区,首推Stackexchange,其次Quora,还有知乎
目前的遗憾
1.没有真正坚持过一个比赛,对比赛中常用的trick,比如造特征、模型融合等,不是很熟练
2.没有真正上线过一个实际项目,所以实践能力还有待提高
最后我想说的是,虽然网上有很多对如何自学机器学习、数据挖掘话题的讨论,但本文是我基于我自己认识,一字一句写完的,若有雷同之处,希望各位包涵,也希望提出批评指正意见,毕竟作为一个自学者和小菜鸟,难免有理解不当之处,希望跟各位多多交流
先占个坑等我成功了告诉你
----分割线----
卧槽被挖坟。顺便答一下吧
当然是可以,不过比较难,不太建议你走这种hard模式。
大公司有钱,直接花大价钱招个能干活的就好,而且好的项目僧多粥少,哪有机会给你边做边学。
小公司没钱,没耐心慢慢培养你。而且说倒闭就倒闭,不会长线投资你,耗不起。
社会就这样,急功近利。所以要不就自己研究生阶段学,要不就工作之外业余时间学。随你选。
企业是压榨你的地方,不是培养你的地方。当然,在项目中成长这种双赢局面是最理想的,但前提是你已经掌握干活的基础,而不是完全从0开始。
也有认识辞职自学后找机器学习工作的朋友,或者读在职研究生。而我是边工作边学,毕竟要workingfor饭。
是有机会的。
看了一下有些人的答案,那些整天做数据处理或者简单用模型处理个任务的同学,就不要说自己在搞机器学习了。