機器學習編程語言之爭,Python 奪魁【轉載+整理】

原文地址 en cnphp

本文內容

  • 表現平平的 MATLAB
  • 貌似強大的 Julia
  • 自己無錯的 R 語言
  • 逐漸沒落的 Perl
  • 老而彌堅的 Python

我我的很喜歡 Python~html

隨着科技的發展,擁有高容量、高速度和多樣性的大數據已經成爲當今時代的主題詞。數據科學領域中所採用的機器學習編程語言截然不同。究竟哪一種語言最適合機器學習成爲爭論不休的話題。近日,密西根州立大學的博士生 Sebastian Raschka 再次發起了機器學習編程語言之爭,分析了本身選擇 Python 的緣由。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,更加簡潔、明瞭。機器學習

julia_benchmark

各類語言相對於 C 的測試性能——C 的性能爲1.0,越小越好,源:http://julialang.org/benchmarks/
從上圖能夠看出,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 持保留態度。ide

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多年的風雨歷程(由Guido van Rossum於1989年發明,第一個公開發行版發行於1991年),Raschka 認爲它仍然能夠繼續流行下去。並且,Raschka 還竭盡全力的列出了本身最喜歡的 Python 工具——NumPy、Theano、scikit-learnmatplotlib 等。

  • NumPy: My favorite library for working with array structures and vectorizing equations using linear algebra; augmented by SciPy.
  • Theano: Implementing machine learning algorithms for the heavy-lifting and distributing computations across cores in my GPU(s).
  • scikit-learn: The most convenient API for the daily, more basic machine learning tasks.
  • matplotlib: My library of choice when it comes to plotting. Sometimes I also use seaborn for particular plots, for example, the heat maps are particularly great!

至於 Ruby、Java、Scala、Lua 等,Raschka 沒有親身體驗,暫未點評。

對 Raschka 的言論,不少人表示贊同,也有很多人反對。有人表示,本身從R切換到Python,主要緣由也是Python更方便與團隊以外的人進行合做和溝通。也有人表示,做爲一個新入門的程序員,利用R進行數據科學的編程能夠利用不少現成的庫,十分駕輕就熟。更有與Python打過8年交道的資深程序員表示,Julia十分具備吸引力,願意花時間去嘗試該語言。親愛的讀者朋友,你眼中最好的機器學習編程語言又是哪一個呢?

相關文章
相關標籤/搜索