1. 程式人生 > >入門機器學習需要會哪些程式語言?

入門機器學習需要會哪些程式語言?

對“機器學習”躍躍欲試的你,可能也有這樣的問題:入門機器學習,我需要會那種(些)酷炫的程式語言呢?別問了,這個問題的“正解”可能會讓你大吃一驚。

不論你選擇哪種語言,只要對這種語言下的機器學習庫和工具足夠熟悉,語言本身就沒有那麼重要了。現在對應各種語言的機器學習庫層出不窮。根據你在公司中擔任的角色和所要完成的任務不同,某些語言和工具可能會比其他的更好用。

R

R 是一種為專統計計算而設計的語言。它在大規模的資料探勘、視覺化和報告方面已經取得了巨大的成功。你能夠輕鬆地獲取各種的包(通過 CRAN)來使用幾乎所有的機器學習演算法、統計測試和分析等。R 語言本身有著優美(雖然有些人會覺得晦澀)的語法用來表達資料的關係、變換和並行操作。

KDNuggets 最近組織了一次投票,結果表明 R 是 2015 年用於解決分析、挖掘及其他資料科學任務的最受歡迎的語言。不過,近年來 Python 的人氣也在急劇上升。

這裡寫圖片描述

MATLAB

MATLAB 在學術界很受歡迎,因為它能處理複雜的數學表示式,對代數和微積分有強大的支援,還支援符號運算。同時,從數字訊號處理到計算生物學,又或者是其他的科目,它都有對應的工具箱可用。它經常被用於開發新的機器學習演算法的原型,有時也會被用於開發最終完整的工具。它的商用許可的確非常昂貴,但也對得起它在研發方面帶來的方便。Octave 是一款免費的 MATLAB 替代品。它的語法與 MATLAB 幾乎相同,但只提供一部分工具箱,IDE 也略微遜色。

Python

雖然 Python 是一種更通用的程式語言和指令碼語言,但它在資料科學家和機器學習工程師中的人氣也是急劇上升。跟 R 和 MATLAB 不同,它並沒有內建資料處理和科學計算專用的語法,但它有像 NumPy、SciPy 和 Pandas 這樣的庫用更友好的語法提供了同樣的功能。

像 scikit-learn、Theano 和 TensorFlow 這樣的機器學習庫讓你能夠方便地訓練各種機器學習模型,還能用上分散式計算。當然,這些庫中最影響效能的部分一般還是用 C/C++ 甚至 Fortan 編寫的,而 Python 包則是作為它們的介面(這在 R 中也很常見)。

但 Python 最大的優勢在於它的生態系統使得你能夠很方便地搭建起一個複雜的端到端服務,比如用 Django 或是 Flask 搭建 Web 應用,或是用 PyQt 開發桌面應用,甚至用 ROS 搭建一個自主機器人。

這種強大的通用性也是我們在“機器學習工程師”納米學位專案中大量使用 Python 的主要原因。

Java

由於它乾淨一致的實現、面向物件程式設計的風格以及通過 JVM 獲得的平臺獨立性,Java 是很多軟體工程師的首選語言。它以簡潔性和靈活性為代價換取了明確性和可靠性,使它在實現重要的企業軟體系統時非常受歡迎。對於那些一直使用 Java 的公司,當他們需要開發機器學習產品時,為了保持同樣的可靠性和避免寫一堆混亂的介面,他們可能更傾向於繼續使用 Java。

除了一些可以用來做分析和原型開發的庫和工具(比如 Weka)以外,要用 Java 開發大規模分散式的機器學習系統,我們有很多選擇,比如 Spark+MLlib、Mahout、H2O 以及 Deeplearning4j。這些庫和框架也很方便跟工業級別的資料處理和儲存系統比如 Hadoop/HDFS 整合在一起。

C/C++

在開發像作業系統元件和網路協議這樣計算效能和記憶體使用效率極為重要的底層軟體時,C/C++ 是最理想的選擇。由於同樣的原因,它們在實現機器學習演算法的關鍵部分時也很受歡迎。但是它們沒有內建的關於資料處理操作的抽象,記憶體管理的任務也很繁重,這使得它們對新手來說不太合適,而且在開發完整的端到端系統時也比較笨重。

在開發嵌入式系統(比如智慧汽車、智慧感測器等),可能必須使用 C/C++。而在其他場景下,用它們進行開發的便利程度可能要視現有的基礎設施和具體的應用而定。不過無論如何,我們並不缺少 C/C++ 的機器學習庫,比如 LibSVM、Shark 和 mlpack。

企業級解決方案

在這些語言和庫以外,還有很多統計建模和商業分析的商用產品,用於在更為受控的資料處理環境下應用機器學習模型。這些產品,包括 RapidMiner、IBM SPSS、SAS+JMP 和 Stata 等,它們的目標是為資料分析提供可靠和端到端的解決方案,通常也會將 API 或是指令碼語法暴露給使用者。

近年來還湧現出了一批“機器學習即服務”平臺,比如 Amazon Machine Learning、Google Prediction、DataRobot、IBM Watson 和 Microsoft Azure Machine Learning 等。它們使你能夠拓展你的機器學習產品的規模,處理巨量的資料以及快速地對不同的模型進行試驗。只要你在機器學習領域打好了堅實的基礎,使用這些平臺就像學習使用一門新工具一樣簡單。

特別提示

選擇語言和庫時要注意考慮開發時間和實際效能之間的平衡。一條能夠飛速處理資料的流水線如果需要幾個月來開發,在有些情況下這可能就毫無用處。一般來說,能夠快速地搭建和測試原型會更重要,因為一開始你肯定會失敗。

這也是為什麼大部分公司都想尋找那種已經有慣用的工具 / 語言 / 庫的機器學習工程師。工業界往往會用 Python 和 R 這樣的高層次語言來開發演算法的原型,然後用 Java 或是 C/C++ 來開發生產級別的解決方案。

這篇文章對你有所啟發?不如分享到朋友圈,讓更多夥伴看到!

▲ 本文由優達學城(Udacity)原創,作者 Arpan Chakraborty,原標題 Languages and Libraries for Machine Learning