淘新聞

Python vs R : 在機器學習和資料分析領域中的對比

為了鼓勵新工具的出現,機器學習和資料分析領域似乎已經成了 “開源” 的天下。Python 和 R 語言都具有健全的生態系統,其中包括了很多開源工具和資源庫,從而能夠幫助任何水準層級的資料科學家展示其分析工作。

機器學習和資料分析之間的差異有些難以言明,但二者最主要的不同就在於,比起模型的可解釋性,機器學習更加強調預測的準確性;而資料分析則更加看重模型的可解釋性以及統計推斷。Python ,由於更看重預測結果的準確性,使其成為機器學習的一把利器。 R ,作為一種以統計推斷為導向的程式設計語言,在資料分析界也得到廣泛應用。

當然,這並不代表二者只能在各自的一個領域中得到應用。Python 也可以高效地完成資料分析工作,R 在機器學習中也具有一定的靈活性。它們都擁有相當多的資源庫去實現彼此特定的函數功能,比如 Python 就有很多資源庫來提高自己統計推斷的能力,R 也有很多包可以提升預測的準確率。

Python 中關於機器學習和資料分析的包

雖然 Python 本身就更傾向於機器學習, 但它還是有很多包可以進一步優化這一屬性。PyBrain 是一個模組化的機器學習資源庫,其中包含很多有效的演算法可以滿足機器學習任務的需要。除了很多直觀靈活的演算法,這個資源庫還內置很多環境可以用來核對總和比較這些機器學習演算法的效果。

Scikit-learn 可能是 Python 最受歡迎的機器學習資源庫了。基於 Numpy 和 Scipy ,scikit-learn 提供大量用於資料採擷和分析的工具,從而提高了 Python 本就出色的機器學習可用性。NumPy 和 SciPy 各自為戰,雖然它們是 Python 中資料分析的核心部分,但資料分析家更可能僅僅原生地去使用它們,而不是基於一個更高的角度。 Scikit-learn 卻將二者結合成為一個機器學習資源庫,同時也降低了大家的學習門檻。

在資料分析領域,Python 也因幾個庫而包受推崇。 作為其中最為著名的庫之一,Pandas 為 Python 提供了高性能處理的資料結構和資料分析工具。如同其他很多 Python 的庫一樣,從你著手一個新專案到真正做些有價值的工作這過程的時間將會因它大大縮短。如果你執著於 Python 同時又希望使用 R 的功能, RPy2 庫能夠提供所有 R 的主要功能,並給你一個 R 在 Python 中使用的流暢化體驗。

R 中關於機器學習和資料分析的包

就像 Python 一樣,R 也擁有大量的包來提升它的表現。要想在機器學習領域媲美 Python,R 中的 Nnet 包具有快速構建神經網路模型的能力。通過提供一系列函數來提升所構建模型的有效性,Caret 包也可以加強 R 在機器學習的能力。

就 R 在資料分析領域的表現,仍然有很多包可以用來提升它本就出色的能力。不管是建模前的準備,建模,以及建模後的分析工作,R 都有很多包可以勝任。這些包大多專門用來完成特定的任務,比如資料的視覺化,連續變數回歸和模型驗證。

兩種程式設計語言都擁有如此多交叉功能的資源庫和包,你會選擇哪種程式設計語言作為伴你在資料戰場廝殺的武器呢?

在機器學習和資料分析中的 Python

如果你已經有一些程式設計的基礎了,Python 可能更加適合你。相較於 R ,Python 的語法結構與其他程式設計語言更加類似,便於上手。此外,就像是口頭語一樣, Python 代碼的可讀性也是無人能及的。這種代碼的可讀性更加強調提高生產力,而 R 非標準的代碼可能會導致在程式設計進程中的磕絆。

Python 是一種很靈活的程式設計語言,所以如果你打算把已經完成的機器學習或者資料分析的專案移植到其他領域,那麼使用 Python 可以使你不必再去學習新的程式設計語言。

Python 的靈活性也使得它非常適用於生產。舉個例子,當資料分析的任務需要與 Web 應用程式相整合的時候,你仍然可以使用 Python 且不需要和其他程式設計語言相整合。而雖然 R 是一個很好的資料分析的工具,但它在資料分析之外的領域卻有所限制。

如果你剛入門程式設計,對那些 “標準化” 的語法並不熟悉,那麼無論哪種程式設計語言的學習曲線對你而言都差不多。但要是你希望跨過機器學習和資料分析的門檻,Python 可能是更好的選擇。特別是 Python 有 scikit-learn 庫的加持。這個庫表現良好且更新頻繁。 R 可能有很多包,但顯得有些零亂且一致性較差。

在機器學習和資料分析中的 R

目前, R 主要是用在科研和調查工作中。然而,隨著 R 逐漸擴展到商業領域,這一現狀也開始得到改變。 R 是由統計學家所創造出來的,因此它可以很輕易地管理基本的資料結構。給資料打標籤,填充缺失值,篩選等等這些對於 R 而言很容易就可以實現,R 也更加強調易於操作的資料分析,統計和圖形化模型工作。

由於 R 是作為統計性的程式設計語言而構建的,因此它具有很好的統計方面的支持。它能夠很好地展現統計學家的思維,所以如果你具有統計背景的話,用起來會很順手。諸如像 statsmodels 包能夠基本覆蓋 Python 中的統計模型,而且 R 中與統計模型相關的包功能會更加強大。對於剛入門的程式師, R 只需要寫幾行代碼就能夠構建模型了,這樣一來,它會比 Python 更容易解釋一些。

R 中與 Python 的 pandas 庫功能最為接近的大概就是 dplyr 包了,只不過它會比 pandas 庫限制得更多。雖然這聽起來不太好,但實際上使用 dplyr 包時會促使你更專注於尋求問題的解決之道,而且 dplyr 包的代碼也比 pandas 庫更容易理解。

選擇你自己的程式設計語言吧

R 最大的問題在於一致性不夠好。其中的演算法流程被分成三塊,使得它們相對而言不夠統一。你不得不學習新的方法來建模並用新的演算法來做預測,伴隨這個過程,結果的有效性將會明顯下降。你需要理解每個包是怎麼用的,同樣地,R 中包的幫助文檔由於不夠完整,一致性也不好。

不過,要是你需要一個資料分析的工具用於學術, R 絕對可以勝任這項工作。 Python 則被廣泛地用於商業也更便於協作,不過 R 也越來越得到重視了。不管是日常的使用和機器學習,還是通過和 R 一般眾多的包來做資料分析, Python 都能做到,因此也更推薦使用 Python 。

如果你對 R 還比較陌生,不如學習 Python 並通過 RPy2 包來實現 R 的功能。 這樣一來,你就可以在一種程式設計語言裡同時使用二者的功能,而且由於很多公司已經開發了在 Python 中使用的生產系統, Python 可謂生產力高效。這點在 R 中就不適用了。一旦你學會了 RPy2 ,再想跳到 R 裡面並沒有那麼複雜,不過反過來就相對而言困難得多了。

不管你想解決什麼類型的問題, Python 和 R 都有功能相近的資源庫可以使用。每種程式設計語言都有很多的分支、模組、整合式開發環境和演算法,以至於你難以出什麼大的紕漏。不過要是你希望使用一個靈活性強,擴展性好,多功能又能勝任機器學習和資料分析工作的程式設計語言, Python 或許是明智之選。

雷鋒網按:本文原載於公眾號Datartisan資料工匠。英文原文 

Python versus R for machine learning and data analysis

。譯者

Vector