1. 我認為 R,Python 和 Julia 是機器學習和數據科學中三個重要的語言。任何人如果想在這個領域有所發展,長遠來說這三種語言都需要掌握。
2. 我自己學習數據科學的主要語言當然是 Python,不光是因為用 Python 的人多,也因為我自己比較熟悉這種語言。早在2001年的時候,我就在一家小書店里買到了一本叫做 Learning Python 的書,當時應該是第二版,講的還是 1.x 的 Python。從那時候起,我斷斷續續對語言本身下過一些功夫,也在好幾件事情里用了 Python,現在回想起來,這些事情全是跟數據處理有關。所以來來回回,對 Python 的數據處理能力多少有些了解。學一個新的領域,入門的時候應當盡量降低不必要的障礙,數據科學和機器學習里要學習的東西太多了,沒必要在語言上自找麻煩。既然可以用一個熟悉的語言,當然樂得如此。
Learning Python
3. 但 Python 其實并不是數據科學的“原生語言”,R 才是。R 語言和它的前身 S 語言,本來就是統計學家發明和使用的語言。S 的發明人叫 John Chambers,跟思科的前 CEO 錢伯斯同名同姓,但一點關系都沒有。S 從根子上就是為數據科學設計出來的語言,Chambers 在發明 S 語言之前,在這個領域研究了30多年,并且由于 S 語言的成就獲得了 1998 年度的 ACM 軟件系統獎。當然,老先生現在也已經轉到了 R 語言的陣營當中。這里的關鍵在于,R 是數據科學的母語,R 中包含了豐富、深刻、專業的數據科學思想,是整個數據科學一個重要的原創思想寶庫。包括 Python 在內,很多其他語言試圖在數據科學領域內拓展的時候,都需要去借(chao)鑒(xi)R 語言。比如 Python 處理表數據的王牌庫 pandas,其主要思想就是來自 R 的。盡管現在 R 的風頭被 Python 蓋過,但是 R 語言中的寶藏太多、積累太厚,想在這個領域深造的人,遲早要進入 R 社區來看一看,學一學。
John M. Chambers,S 語言的發明者
4. Python 是怎樣起來的?其實就在短短的三年前,Python 相對于 R、Matlab 甚至 Scala ,都看不出有什么明顯優勢。當時 Numpy,Scipy,pandas,matplotlib 和 Sklearn 實際上都已經很成熟,但別的語言也各有絕活,Python 并沒有占多少便宜。真正令 Python 在數據科學領域脫穎而出的事件還沒發生。這個事件是什么呢?有人可能認為是 2015 年 9 月的 TensorFlow 發布,但我不這么認為。TensorFlow 雖然是個重要的事件,但當時它對于深度學習社區之外的人,并沒有多大的影響。真正導致 Python 崛起的,其實還是 Alpha Go 這一公關事件。由于 Alpha Go 的勝利,引發全民關注 AI 的熱潮,本來并不是很旺盛的 AI 投資也瞬間爆燃,相關工作薪資節節攀升。這樣一來,大批本來在數據科學圈子外面的程序員、學生和科研人員就激動了,紛紛加入這個領域。而他們進入數據科學領域的時候,想法估計會跟我差不多。Python 是頂級流行語言中適合數據科學的,是數據科學語言中流行的,所以 Python 成了新人的當然之選。大量新人的涌入,才是 Python 后來居上的關鍵原因。
5. 在 TIOBE 的編程語言流行度排行榜上,Python 排名第五。排在它前面的是 Java,C,C++ 和 C#,清一色的 C family 語言。這四種語言中只要有一種適合于數據科學,估計也就沒 Python 什么事了。但是很可惜,這四種語言都是編譯型的系統和應用開發語言,不適合作為數據科學家的首選工作語言。所以雖然 Java 也有 Apache Mahout 這樣的機器學習庫,但是始終很難進入數據科學的主流。
6. 編譯型系統開發語言為什么不適用于機器學習呢?我認為主要有兩個原因。比較淺表的原因是系統級語言的抽象層次較低,細節過多,用它來表達機器學習的概念、關系和運算,代碼看上去和寫起來都不夠優雅,會夾雜大量系統層面的細節。但更深層的原因是編譯型語言與數據科學語言之間的“哲學沖突” 。用 Java 和 C++ 等編譯語言開發系統,無論你迭代速度多快,從根本上還是構建性的,像蓋樓,是實現某個你自己主動設計出來的系統,所以要先想清楚,再寫代碼,編譯構建系統,然后看看是不是達成目標。而數據科學或者機器學習的工作則是探索性的,像迷宮尋寶,是摸索某項客觀存在的外在的規律,所以需要頻繁的試錯,快速的反饋,快速的改變方向。比如 Kaggle 的競賽,優勝者往往要提交幾百次才能取得滿意的結果。在這樣的工作模式中,編譯型語言就顯得太過麻煩了。
Kaggle 的創始人 Ben Hamner 談 Kaggle 競賽獲勝者的經驗
7. 數據科學和機器學習應用是性能怪獸,數據量上來了,無論多大的計算力,都很難滿足它的胃口。吳恩達在他 2011 年錄制的經典的機器學習視頻課程中說,一般來說人們會用 Matlab 、Python 等高層次語言來找到佳的模型,然后用 C++ 和 Java 等語言把模型產品化,以追求更高的執行效率。很顯然這種方式適合于保質期長的模型,也就是說,一個模型一旦調好,其性能在相當長的一段時間內都能夠保持穩定,比如計算機視覺里很多的模型就有這個特點。但隨著 AI 和機器學習的應用越來越廣泛,我們所用到的很多模型,保質期會越來越短。也就是說,就算你在現階段找到一個佳的模型,但過了一段時間,外部條件變化了,這個模型的性能會很快下降。比如用來分析社交平臺讀者的閱讀偏好的模型,用來分析網站用戶行為的模型,用來分析服裝流行趨勢的模型,都是保質期很短的模型。開發這種模型就比較兩難,只用 Python,R 等動態語言來開發,周期短、靈活度高,但運行效率較低。而如果用 C++、Java來做產品化,可能產品還沒做完,模型保質期就過了。
8. 所以在未來,我們很可能需要一種既像 R、Python 那么高層次,又像 C++、Java 一樣快的數據科學語言。這種語言現在已經出現了,就是 Julia。Julia 來自 MIT 的 CSAIL (計算機科學與人工智能實驗室)。CSAIL 是2003年由 MIT 計算機科學實驗室和 AI 實驗室合并而來。不了解這兩個實驗室,尤其是 MIT AI 實驗室輝煌歷史的人,請自行搜索。Julia 的語法借鑒了 Matlab,高校里出來的人可能會有賓至如歸的感覺,但我覺得如果語法上跟 Python、R 或者 C family 一致的話可能會更有利于廣大程序員。不過語法始終是個小問題。關鍵在于,Julia 利用了 LLVM 的基礎設施,實時將代碼翻譯和優化為高效的機器碼,并且執行。因此,Julia 成為了種性能全面達到 C 語言級別的高級動態語言。經過了幾年的發展,Julia 日臻成熟,預計在今年 6 月份推出 1.0 版本。目前這個語言的社區還是很小,Kaggle 上 Python 的 Kernel 有26,000多個,R 有 12,000 多個,而 Julia 只有100多個,完全不成比例。但是這個事情你不能只看數量。Julia 在高校和科研單位里獲得了熱烈的歡迎,很多學術大佬現在都在安利 Julia。由于在 AI 和數據科學領域中,高校和科研單位在相當長一段時間里將占據話語權的中心,所以我對 Julia 中長期的發展十分看好。
本站文章版權歸原作者及原出處所有 。內容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負責,本站只提供參考并不構成任何投資及應用建議。本站是一個個人學習交流的平臺,網站上部分文章為轉載,并不用于任何商業目的,我們已經盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯系我們,我們將根據著作權人的要求,立即更正或者刪除有關內容。本站擁有對此聲明的最終解釋權。