看似一望无际、高深难懂而又时刻更新的数据科学知识,该怎样学才更高效呢?但愿读过本文后,你能得到一些帮助。git
周五下午,我给本身的研究生开组会。主题是工做坊教学,尝试搭建本身的第一个深度神经网络。程序员
参考资料是个人文章《如何用Python和深度神经网络发现即将流失的客户?》。我带着学生们从下载最新版Anaconda安装包开始,直到完成第一个神经网络分类器。github
过程涉及编程虚拟环境问题,他们参考了《如何在Jupyter Notebook中使用Python虚拟环境?》一文,比较顺利地掌握了如何在虚拟环境里安装软件包和执行命令。算法
我要求他们,一旦遇到问题就当即提出。我帮助解决的时候,全部人围过来一块儿看解决方案,以提高效率。编程
我给学生们介绍了神经网络的层次结构,而且用Tensorboard可视化展现。他们对神经网络和传统的机器学习算法(师兄师姐答辩的时候,他们听过,有印象)的区别不是很了解,我就带着他们一块儿玩儿了一把深度学习实验场。微信
看着本来傻乎乎的直线绕成了曲线,而后从开放到闭合,把平面上的点根据内外区分,他们都很兴奋。还录了视频发到了微信朋友圈。网络
欣喜之余,一个学生不无担心地问我:框架
老师,我如今可以把样例跑出来了,可是里面有不少内容如今还不懂。这么多东西该怎么学呢?机器学习
我以为这是个很是好的问题。编程语言
对于非IT类本科毕业生,尤为是“文科生”(定义见这里),读研阶段若要用到数据科学方法,确实有不少知识和技能须要补充。他们中很多人所以很焦虑。
可是焦虑是没有用的,不会给你一丝一毫完善和进步。学会拆解和处理问题,才是你不断进步的保证。
这篇文章,我来跟你谈一谈,看似一望无际、高深难懂而又时刻更新的数据科学知识,该怎样学才更高效。
许多读者曾经给我留言,询问过相似的问题。所以我把给本身学生的一些建议分享给你,但愿对你也有一些帮助。
你以为本身在数据科学的知识海洋里面迷失,是由于套用的学习模式不对。
从上小学开始,你就习惯了把要学习的内容当成学科知识树,而后系统地一步步学完。前面若是学很差,必然会影响后面内容的理解消化。
知识树的学习,也必须全覆盖。不然考试的时候,一旦考察你没有掌握的内容,就会扣分。
学习的进程,有教学大纲、教材和老师来负责一步步喂给你,而且督促你不断预习、学习和复习。
如今,你忽然独自面对一个新的学科领域。没了教学大纲和老师的方向与进度指引,教材又如此繁多,根本不知道该看哪一本,茫然无措。
其实若是数据科学的知识是个凝固的、静态的集合,你又有无限长的学习时间,用原先的方法来学习,也挺好。
可现实是,你的时间是有限的,数据科学的知识倒是突飞猛进。今年的热点,兴许到了明年就会退潮。深度学习专家Andrej Karpathy评论不一样的机器学习框架时说:
Matlab is so 2012. Caffe is so 2013. Theano is so 2014. Torch is so 2015. TensorFlow is so 2016. :D
怎么办呢?
你须要以目标导向来学习。
例如说,你手头要写的论文里,须要作数据分类。那你就研究分类模型。
分类模型属于监督学习。传统机器学习里,KNN, 逻辑回归,决策树等都是经典的分类模型;若是你的数据量很大,但愿用更为复杂而精准的模型,那么能够尝试深度神经网络。
若是你要须要对图片进行识别处理,便须要认真学习卷积神经网络(Convolutional Neural Network),以便高效处理二维图形数据。
若是你要作的研究,是给时间序列数据(例如金融资产价格变更)找到合适的模型。那么你就得认真了解递归神经网络(recurrent neural network),尤为是长短时间记忆(Long short-term memory, LSTM)模型。这样用人工智能玩儿股市水晶球才能游刃有余。
但若是你目前尚未明确的研究题目,怎么办?
没关系。能够在学习中,以案例为单位,不断积累能力。
实践领域需求旺盛,数据科学的内容又过于庞杂,近年来MOOC上数据科学类课程的发展,愈来愈有案例化趋势。
一贯以技术培训类见长的平台,如Udacity, Udemy等自没必要说。就连从高校生长出来的Coursera,也大量在习题中加入实际案例场景。Andrew Ng最新的Deep Neural Network课程就是很好的例证。
我以前推荐过的华盛顿大学机器学习课程,更是很是激进地在第一门课中,经过案例完整展现后面若干门课的主要内容。
注意,学第一门课时,学员们对于相关的技术(甚至是术语)还一无所知呢!
然而你把代码跑完,出现告终果的时候,真的会由于不了解和掌握细节就一无所得吗?
固然不是。
退一万步说,至少你见识了能够用这样的方法成功解决该场景的问题。这就叫认知。
告诉你一个小窍门:在生活、工做和学习中,你跟别人比拼的,基本上都是认知。
你得到了认知后,能够快速了解整个领域的概况。知道哪些知识对本身目前的需求更加剧要,学习的优先级更高。
比案例学习更高效的“找目标”方式,是参加项目,动手实践。
动手实践,不断迭代的原理,在《如何高效学Python?》和《创新怎么教?》文中我都有详细分析,欢迎查阅。
这里我给你讲一个真实的例子。
个人一个三年级研究生,本科学的是工商管理。刚入学的时候按照个人要求,学习了密歇根大学的Python课程,而且拿到了系列证书。可是很长的一段时间里,他根本就不知道该怎么实际应用这些知识,论文天然也写不出来。
一个偶然的机会,我带着他参加了另外一个老师的研究项目,负责技术环节,作文本挖掘。由于有了实际的应用背景和严格的时间限定,他学得很用心,干得很是起劲儿。以前学习的技能在此时真正被激活了。
等到项目圆满结束,他主动跑来找我,跟我探讨可否把这些技术方法应用于本学科的研究,写篇小论文出来。
因而我俩一块儿肯定了题目,设计了实验。而后我把数据采集和分析环节交给了他,他也很完满地作出告终果。
有了这些经验,他意识到了本身毕业论文数据分析环节的缺失,因而又顺手改进了毕业论文的分析深度。
刚好是周五工做坊当天,咱们收到了期刊的正式录用通知。
看得出来,他很激动,也很开心。
肯定目标后,你就明白了该学什么,不应学什么。
可是下一个问题就来了,该学的内容,要学到多深、多细呢?
在《贷仍是不贷:如何用Python和机器学习帮你决策?》一文里,咱们尝试了决策树模型。
所谓应用决策树模型,实际上就是调用了一个包。
from sklearn import tree
clf = tree.DecisionTreeClassifier()
clf = clf.fit(X_train_trans, y_train)
复制代码
只用了三行语句,咱们就完成了决策树的训练功能。
这里咱们用的是默认参数。若是你须要了解能够进行哪些参数调整设置,在函数的括号里使用shift+tab
按键组合,就能看到详细的参数列表,而且知道了默认的参数取值是多少。
若是你须要更详细的说明,能够直接查文档。在搜索引擎里搜索sklearn tree DecisionTreeClassifier
这几个关键词,你会看到如下的结果。
点击其中的第一项,就能够看到最新版本scikit-learn相关功能的官方文档。
当你明白了每一个函数工做的方法、参数能够调整的类型和取值范围时,你是否能够宣称本身了解这个功能了?
你好像不太有信心。
由于你以为这只是“知其然”,而没有作到“知其因此然”。
可是,你真的须要进一步了解这个函数/功能是如何实现的吗?
注意图中函数定义部分,有一个指向source
的连接。
点开它,你就会导航到这个函数的源代码,托管在github上。
若是你是个专业人士,但愿研究、评估或者修改该函数,认真阅读源代码就不只必要,并且必须。
可是做为文科生的你,若是仅是为了应用,那彻底能够没必要深刻到这样的细节。将别人写好的,广受好评的软件包当成黑箱,正确地使用就行了。
这就如同你不须要了解电路原理,就能够看电视;不须要了解川菜的技艺和传承,就能够吃麻婆豆腐。只要你会用遥控器,会使筷子,就能享受这些好处。
愈来愈多的优秀软件包被创造出来,数据科学的门槛也所以变得愈来愈低。甚至低到被声讨的地步。例如这篇帖子,就大声疾呼“进入门槛过低正在毁掉深度学习的名声!”
可是,不要高兴得太早。以为本身终于遇到一门能够投机取巧的学问了。
你的基础必须打牢。
数据科学应用的基础,主要是编程、数学和英语。
数学(包括基础的微积分和线性代数)和英语许多本科专业都会开设。文科生主要须要补充的,是编程知识。
只有明白基础的语法,你才能和计算机之间无障碍交流。
一门简单到使人发指的编程语言,能够节省你大量的学习时间,直接上手作应用。
程序员圈子里,流行一句话,叫作:
人生苦短,我用Python。
Python有多简单?个人课上,一个会计学本科生,为了拿下证书去学Python基础语法,一门课在24小时内,便搞定了。这还包括作习题、项目和系统判分时间。
怎么高效入门和掌握Python呢?欢迎读读《如何高效学Python?》,但愿对你快速上手能有帮助。
了解了该学什么,学多深刻以后,咱们来说讲提高学习效率的终极秘密武器。
这个武器,就是协做的力量。
协做的好处,彷佛原本就是人人都知道的。
可是,在实践中,太多的人根本就没有这样作。
由于,咱们都过于长期地被训练“独立”完成问题了。
例如考试的时候跟别人交流,那叫做弊。
可是,你即使再习惯一我的完成某些“创举”,也不得不逐渐面对一个真实而残酷的世界——一我的的单打独斗很难带来大成就,你必须学会协做。
这就像《权力的游戏》里史塔克家族的名言:
When the cold winds blow the lone wolf dies and the pack survives. (凛冬将至,独狼死,群狼活。)
文科生面对屏幕编程,总会有一种孤独无助的感受,彷佛本身被这个世界抛弃了。
这种错误的心态会让你变得焦虑、恐慌,并且很容易放弃。
正确的概念却可以拯救你——你正在协做。并且你须要主动地、更好地协做。
你面前这台电脑或者移动终端,就是无数人的协做成果。
你用的操做系统,也是无数人的协做成果。
你用的编程语言,仍是无数人的协做成果。
你调用的每个软件包,依然是无数人的协做成果。
并不是只有你所在的小团队沟通和共事,才叫作协做。协做其实早已发生在地球级别的尺度上。
当你从Github上下载使用了某个开源软件包的时候,你就与软件包的做者创建了协做关系。想一想看,这些人可能受雇于大型IT企业,月薪6位数(美圆),能跟他们协做不是很可贵的机会吗?
当你在论坛上抛出技术问题、而且得到解答的时候,你就与其余的使用者创建了协做关系。这些人有多是资深的IT技术专家,作咨询的收费是按照秒来算的。
这个社会,就是由于分工协做,才变得更加高效的。
数据科学也是同样。Google, 微软等巨头为何开源本身的深度学习框架,给全世界无偿使用?正是由于他们明白协做的终极含义,知道这种看似吃亏的傻事儿,带来的回报没法估量。
这种全世界范围内的协做,使得知识产生的速度加快,用户的需求被刻画得更清晰透彻,也使得技术应用的范围和深度空前提升。
若是你在这个协做系统里,就会跟系统一块儿突飞猛进地发展。若是你不幸自外于这个系统,就只能落寞地看着别人一飞冲天了。
这样的时代,你该怎么更好地跟别人协做呢?
首先,你要学会寻找协做的伙伴。这就须要你掌握搜索引擎、问答平台和社交媒体。不断更新本身的认知,找到更适合解决问题的工具,向更可能回答你问题的人来提问。常常到Github和Stackoverflow上逛一逛,收获可能大到令你吃惊。
其次,你要掌握清晰的逻辑和表达方式。无论是搜寻答案,仍是提出问题,逻辑能力能够帮助你少走弯路,表达水平决定了你跟他人协做的有效性和深度。具体的阐释,请参考《Python编程遇问题,文科生怎么办?》。
第三,不要只作个接受帮助者。要尝试主动帮助别人解决问题,把本身的代码开源在Github上,写文章分享本身的知识和看法。这不只能够帮你在社交资本帐户中储蓄(当你须要帮助的时候,至关于在提现),也能够经过反馈增加本身的认知。群体的力量能够经过“赞同”、评论等方式矫正你的错误概念,推进你不断进步。
能够带来协做的连接,就在那里。
你不知道它们的存在,它们对你来讲就是虚幻。
你了解它们、掌握它们、使用它们,它们给你带来的巨大益处,就是实打实的。
咱们谈了目标,能够帮助你分清楚哪些须要学,哪些不须要学。你如今知道了找到目标的有效方法——项目实践或者案例学习。
咱们聊了深度,你了解到大部分的功能实现只须要了解黑箱接口就能够,不须要深刻到内部的细节。然而对于基础知识和技能,务必夯实,才能走得更远。
咱们强调了协做。充分使用别人优质的工做成果,主动分享本身的认知,跟更多优秀的人创建连接。摆脱单兵做战的窘境,把本身变成优质协做系统中的关键节点。
愿你在学习数据科学过程当中,得到认知的增加,享受知识和技能更新带来的愉悦。放下焦虑感,体验心流的美好感觉。
到今天为止,你掌握了哪些数据科学知识和技能?你为此花了多少时间?这个过程痛苦吗?有没有什么经验教训能够供你们借鉴?欢迎留言,把你的感悟分享给你们,咱们一块儿交流讨论。
喜欢请点赞。还能够微信关注和置顶个人公众号“玉树芝兰”(nkwangshuyi)。
若是你对数据科学感兴趣,不妨阅读个人系列教程索引贴《如何高效入门数据科学?》,里面还有更多的有趣问题及解法。