文科生如何高效學資料科學?

王樹義發表於2018-06-28

看似無邊無際、高深難懂而又時刻更新的資料科學知識,該怎樣學才更高效呢?希望讀過本文後,你能獲得一些幫助。

文科生如何高效學資料科學?

疑惑

週五下午,我給自己的研究生開組會。主題是工作坊教學,嘗試搭建自己的第一個深度神經網路。

參考資料是我的文章《如何用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的連結。

文科生如何高效學資料科學?

點開它,你就會導航到這個函式的原始碼,託管在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)

如果你對資料科學感興趣,不妨閱讀我的系列教程索引貼《如何高效入門資料科學?》,裡面還有更多的有趣問題及解法。

相關文章