文科生如何高效学数据科学?

in data-science •  7 years ago 

看似无边无际、高深难懂而又时刻更新的数据科学知识,该怎样学才更高效呢?希望读过本文后,你能获得一些帮助。

疑惑

周五下午,我给自己的研究生开组会。主题是工作坊教学,尝试搭建自己的第一个深度神经网络。

参考资料是我的文章《如何用Python和深度神经网络发现即将流失的客户?》。我带着学生们从下载最新版Anaconda安装包开始,直到完成第一个神经网络分类器。

过程涉及编程虚拟环境问题,他们参考了《如何在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的链接。

image.png

点开它,你就会导航到这个函数的源代码,托管在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)

如果本文可能对你身边的亲友有帮助,也欢迎你把本文通过微博或朋友圈分享给他们。让他们一起参与到我们的讨论中来。

延伸阅读

如何高效入门数据科学?


创作不易,感谢打赏!

如果喜欢我的文章,请微信扫描下方二维码,关注并置顶我的公众号“玉树芝兰”。

欢迎微信扫码加入我的“知识星球”第二季。第一时间分享我的发现和思考,优先解答你的疑问。

或者,你也可以使用下面的小程序向我提问。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:
https://www.jianshu.com/p/e3f52e0860fd