標籤:

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 或許是明智之選。

原文鏈接:Python versus R for machine learning and data analysis

原文作者: Tom Radcliffe

譯作者:Vector

推薦閱讀:

特徵選擇1:用貝葉斯方法挑西瓜
機器學習系列-隨機過程
機器學習和神經科學:你的大腦也在進行深度學習嗎?
數字串識別:基於位置的硬性注意力機制

TAG:机器学习 |