1. 程式人生 > 其它 >機器學習程式語言之爭,Python奪魁

機器學習程式語言之爭,Python奪魁

究竟哪種語言最適合機器學習成為爭論不休的話題。近日,密西根州立大學的博士生 Sebastian Raschka 再次發起了機器學習程式語言之爭(http://sebastianraschka.com/blog/2015/why-python.html),分析了自己選擇 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 十分具有吸引力,願意花時間去嘗試該語言。