機器學習編程語言之爭,Python奪魁
隨著科技的發展,擁有高容量、高速度和多樣性的大數據已經成為當今時代的主題詞。數據科學領域中所采用的機器學習編程語言大相徑庭。究竟哪種語言最適合機器學習成為爭論不休的話題。近日,密西根州立大學的博士生Sebastian Raschka再次發起了 機器學習編程語言之爭 ,分析了自己選擇Python的原因。
目前,機器學習牽涉的編程語言十分多樣,包括了MATLAB、Julia、R、Perl、Python、Ruby等等。首先,Raschka定義 了語言好壞的原則:一門好的語言應該使得編寫、調試和執行代碼的總時間最短。然后,他花大篇幅講述了一個簡單的道理——沒有一門語言是對所有情況、所有人 都十分適合的。
Roberto Waltman:“在這種唯一正確的方式下,面向對象的Spaghetti code就是Lasagna code。”
針對具體的應用場景以及參與項目的人員,開發團隊或個人要對任務需求進行評估,再結合人員對于各個語言的熟悉程度和語言生態環境的情況等等,作出選擇。接下來,Raschka開始正式點評各個語言相對與Python在機器學習時的優缺點。
表現平平的MATLAB
作為機器學習、模式識別等方面經常使用的工具,MATLAB被放在了第一個分析。Raschka認為,MATLAB在實現機器學習算法時要比Python或者 NumPy 更加自然。很多高校也在計算機科學相關的課程中教授MATLAB語言。然而,MATLAB也存在很多的缺點:價格昂貴、非開源、性能表現平平、語法不符合程序員的習慣等。例如,MATLAB中矩陣乘積運算操作為 X.dot(Y)
,而Python為 X@W
,更加簡潔、明了。
各種語言相對于C的測試性能——C的性能為1.0,越小越好
從上圖可以看出,MATLAB的性能比Python、Go、Java等語言要差很多。Raschka也提到,上圖中Python的性能也表現不好。但是,現在性能強勁的GPU為Python提供了強大的后盾。在2010年的時候,Python中的 Theano庫 在CPU上運行時,其速度是NumPy的1.8倍。而Theano在GPU上運行時,其速度就是NumPy的11倍。因此,在目前更高性能的GPU的幫助下,Python性能已經有了更大的改進。
貌似很強大的Julia
作為一門新型的語言,Julia在設計之處就充分借鑒了C/Ruby/Python等語言的經驗,試圖重新融合眾家之長,為科學計算提供一個有力的工具。Raschka充分認可了該語言。然而,對于其未來Julia是否會流行,Raschka持保留態度。
Bjarne Stroustrup:世界上只有兩種語言——大家一直在抱怨的和無人問津的。
Raschka認為一個語言是否有用又很大程度上取決于其是否流行。只有被廣大編程人員所熟知的編程語言,相關的庫才會更多,遇到問題時也能夠方便的找到答案,且易于團隊合作和代碼分享。語言本身也會隨著社區的關注不斷得以改善。在流行度上,Julia并沒有什么優勢。
R語言本身無錯
接下來,Raschka又提到了R語言。其實,Raschka之前使用過R語言,而且還專門撰寫了一部有關 R語言中Heat map的書 。而且,他自己也不認為R語言存在任何令人不滿意的地方。 據Spectrum IEEE統計 ,在2015年排名前十的編程語言中,R語言是提升最快的。近期, 微軟對R語言表現出極大的興趣 。并且很快,微軟的 Azure便開始支持R語言 了。
Alan J. Perlis:當某人說“我想要一門編程語言。它要能夠根據我的目標自動生成代碼”。讓他拿根棒棒糖,一邊玩去吧!
Raschka總結R和Python之間的不同在于,R是統計學家開發的(數學)語言,而Python是計算領域科學家開發,可以應用到統計學的編程語言。這就是說,二者都可以很好的應用于數據科學或者機器學習,但Python的語法更容易被程序員所接受。
Perl的沒落
Raschka簡單分析了Perl語言。作為一門古老的語言,Perl已經不可避免的走向了沒落。Raschka表示,Perl曾經是他學習的第一門語言。但是,Perl目前主要用于簡單的腳本編寫,已經很少應用在機器學習的算法編寫方面。
老而彌堅的Python
最后,Raschka夸贊了自己所喜愛的Python語言。盡管Python已經走過了20多年的風雨歷程,Raschka認為它仍然可以繼續流行下去。而且,Raschka還不遺余力的列出了自己最喜歡的Python工具——NumPy、Theano、 scikit-learn 、 matplotlib 等。
至于Ruby、Java、Scala、Lua等,Raschka沒有親身體驗,暫未點評。
對于Raschka的言論, 很多人表示贊同,也有不少人反對 。有人表示,自己從R切換到Python,主要原因也是Python更方便與團隊之外的人進行合作和溝通。也有人表示,作為一個新入門的程序員,利用R進 行數據科學的編程可以利用很多現成的庫,十分得心應手。更有與Python打過8年交道的資深程序員表示,Julia十分具有吸引力,愿意花時間去嘗試該 語言。親愛的讀者朋友,你眼中最好的機器學習編程語言又是哪個呢?