Image by: Opensource.com
為了鼓勵(lì)新工具的出現(xiàn)榄融,機(jī)器學(xué)習(xí)和數(shù)據(jù)分析領(lǐng)域似乎已經(jīng)成了“開(kāi)源”的天下。Python 和 R 語(yǔ)言都具有健全的生態(tài)系統(tǒng)救湖,其中包括了很多開(kāi)源工具和資源庫(kù)愧杯,從而能夠幫助任何水平層級(jí)的數(shù)據(jù)科學(xué)家展示其分析工作。
機(jī)器學(xué)習(xí)和數(shù)據(jù)分析之間的差異有些難以言明鞋既,但二者最主要的不同就在于力九,比起模型的可解釋性,機(jī)器學(xué)習(xí)更加強(qiáng)調(diào)預(yù)測(cè)的準(zhǔn)確性邑闺;而數(shù)據(jù)分析則更加看重模型的可解釋性以及統(tǒng)計(jì)推斷跌前。Python ,由于更看重預(yù)測(cè)結(jié)果的準(zhǔn)確性陡舅,使其成為機(jī)器學(xué)習(xí)的一把利器抵乓。 R ,作為一種以統(tǒng)計(jì)推斷為導(dǎo)向的編程語(yǔ)言靶衍,在數(shù)據(jù)分析界也得到廣泛應(yīng)用臂寝。
當(dāng)然,這并不代表二者只能在各自的一個(gè)領(lǐng)域中得到應(yīng)用摊灭。Python 也可以高效地完成數(shù)據(jù)分析工作,R 在機(jī)器學(xué)習(xí)中也具有一定的靈活性败徊。它們都擁有相當(dāng)多的資源庫(kù)去實(shí)現(xiàn)彼此特定的函數(shù)功能帚呼,比如 Python 就有很多資源庫(kù)來(lái)提高自己統(tǒng)計(jì)推斷的能力,R 也有很多包可以提升預(yù)測(cè)的準(zhǔn)確率。
Python 中關(guān)于機(jī)器學(xué)習(xí)和數(shù)據(jù)分析的包
雖然 Python 本身就更傾向于機(jī)器學(xué)習(xí)煤杀, 但它還是有很多包可以進(jìn)一步優(yōu)化這一屬性眷蜈。PyBrain 是一個(gè)模塊化的機(jī)器學(xué)習(xí)資源庫(kù),其中包含很多有效的算法可以滿足機(jī)器學(xué)習(xí)任務(wù)的需要沈自。除了很多直觀靈活的算法酌儒,這個(gè)資源庫(kù)還內(nèi)置很多環(huán)境可以用來(lái)檢驗(yàn)和比較這些機(jī)器學(xué)習(xí)算法的效果。
Scikit-learn 可能是 Python 最受歡迎的機(jī)器學(xué)習(xí)資源庫(kù)了枯途〖稍酰基于 Numpy 和 Scipy ,scikit-learn 提供大量用于數(shù)據(jù)挖掘和分析的工具酪夷,從而提高了 Python 本就出色的機(jī)器學(xué)習(xí)可用性榴啸。NumPy 和 SciPy 各自為戰(zhàn),雖然它們是 Python 中數(shù)據(jù)分析的核心部分晚岭,但數(shù)據(jù)分析家更可能僅僅原生地去使用它們鸥印,而不是基于一個(gè)更高的角度。 Scikit-learn 卻將二者結(jié)合成為一個(gè)機(jī)器學(xué)習(xí)資源庫(kù)坦报,同時(shí)也降低了大家的學(xué)習(xí)門(mén)檻库说。
在數(shù)據(jù)分析領(lǐng)域,Python 也因幾個(gè)庫(kù)而包受推崇片择。 作為其中最為著名的庫(kù)之一潜的,Pandas 為 Python 提供了高性能處理的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具。如同其他很多 Python 的庫(kù)一樣构回,從你著手一個(gè)新項(xiàng)目到真正做些有價(jià)值的工作這過(guò)程的時(shí)間將會(huì)因它大大縮短夏块。如果你執(zhí)著于 Python 同時(shí)又希望使用 R 的功能, RPy2 庫(kù)能夠提供所有 R 的主要功能纤掸,并給你一個(gè) R 在 Python 中使用的流暢化體驗(yàn)脐供。
R 中關(guān)于機(jī)器學(xué)習(xí)和數(shù)據(jù)分析的包
就像 Python 一樣,R 也擁有大量的包來(lái)提升它的表現(xiàn)借跪。要想在機(jī)器學(xué)習(xí)領(lǐng)域媲美 Python政己,R 中的 Nnet 包具有快速構(gòu)建神經(jīng)網(wǎng)絡(luò)模型的能力。通過(guò)提供一系列函數(shù)來(lái)提升所構(gòu)建模型的有效性掏愁,Caret 包也可以加強(qiáng) R 在機(jī)器學(xué)習(xí)的能力歇由。
就 R 在數(shù)據(jù)分析領(lǐng)域的表現(xiàn),仍然有很多包可以用來(lái)提升它本就出色的能力果港。不管是建模前的準(zhǔn)備沦泌,建模,以及建模后的分析工作辛掠,R 都有很多包可以勝任谢谦。這些包大多專(zhuān)門(mén)用來(lái)完成特定的任務(wù)释牺,比如數(shù)據(jù)的可視化,連續(xù)變量回歸和模型驗(yàn)證回挽。
兩種編程語(yǔ)言都擁有如此多交叉功能的資源庫(kù)和包没咙,你會(huì)選擇哪種編程語(yǔ)言作為伴你在數(shù)據(jù)戰(zhàn)場(chǎng)廝殺的武器呢?
在機(jī)器學(xué)習(xí)和數(shù)據(jù)分析中的 Python
32
如果你已經(jīng)有一些編程的基礎(chǔ)了千劈,Python 可能更加適合你祭刚。相較于 R ,Python 的語(yǔ)法結(jié)構(gòu)與其他編程語(yǔ)言更加類(lèi)似墙牌,便于上手涡驮。此外,就像是口頭語(yǔ)一樣憔古, Python 代碼的可讀性也是無(wú)人能及的遮怜。這種代碼的可讀性更加強(qiáng)調(diào)提高生產(chǎn)力,而 R 非標(biāo)準(zhǔn)的代碼可能會(huì)導(dǎo)致在編程進(jìn)程中的磕絆鸿市。
Python 是一種很靈活的編程語(yǔ)言锯梁,所以如果你打算把已經(jīng)完成的機(jī)器學(xué)習(xí)或者數(shù)據(jù)分析的項(xiàng)目移植到其他領(lǐng)域,那么使用 Python 可以使你不必再去學(xué)習(xí)新的編程語(yǔ)言焰情。
Python 的靈活性也使得它非常適用于生產(chǎn)陌凳。舉個(gè)例子,當(dāng)數(shù)據(jù)分析的任務(wù)需要與 Web 應(yīng)用程序相整合的時(shí)候内舟,你仍然可以使用 Python 且不需要和其他編程語(yǔ)言相整合合敦。而雖然 R 是一個(gè)很好的數(shù)據(jù)分析的工具,但它在數(shù)據(jù)分析之外的領(lǐng)域卻有所限制验游。
如果你剛?cè)腴T(mén)編程充岛,對(duì)那些“標(biāo)準(zhǔn)化”的語(yǔ)法并不熟悉,那么無(wú)論哪種編程語(yǔ)言的學(xué)習(xí)曲線對(duì)你而言都差不多耕蝉。但要是你希望跨過(guò)機(jī)器學(xué)習(xí)和數(shù)據(jù)分析的門(mén)檻崔梗,Python 可能是更好的選擇。特別是 Python 有 scikit-learn 庫(kù)的加持垒在。這個(gè)庫(kù)表現(xiàn)良好且更新頻繁蒜魄。 R 可能有很多包,但顯得有些零亂且一致性較差场躯。
在機(jī)器學(xué)習(xí)和數(shù)據(jù)分析中的 R
目前谈为, R 主要是用在科研和調(diào)查工作中。然而踢关,隨著 R 逐漸擴(kuò)展到商業(yè)領(lǐng)域伞鲫,這一現(xiàn)狀也開(kāi)始得到改變。 R 是由統(tǒng)計(jì)學(xué)家所創(chuàng)造出來(lái)的签舞,因此它可以很輕易地管理基本的數(shù)據(jù)結(jié)構(gòu)榔昔。給數(shù)據(jù)打標(biāo)簽驹闰,填充缺失值,篩選等等這些對(duì)于 R 而言很容易就可以實(shí)現(xiàn)撒会,R 也更加強(qiáng)調(diào)易于操作的數(shù)據(jù)分析,統(tǒng)計(jì)和圖形化模型工作师妙。
由于 R 是作為統(tǒng)計(jì)性的編程語(yǔ)言而構(gòu)建的诵肛,因此它具有很好的統(tǒng)計(jì)方面的支持。它能夠很好地展現(xiàn)統(tǒng)計(jì)學(xué)家的思維默穴,所以如果你具有統(tǒng)計(jì)背景的話怔檩,用起來(lái)會(huì)很順手。諸如像 statsmodels 包能夠基本覆蓋 Python 中的統(tǒng)計(jì)模型蓄诽,而且 R 中與統(tǒng)計(jì)模型相關(guān)的包功能會(huì)更加強(qiáng)大薛训。對(duì)于剛?cè)腴T(mén)的程序員, R 只需要寫(xiě)幾行代碼就能夠構(gòu)建模型了仑氛,這樣一來(lái)乙埃,它會(huì)比 Python 更容易解釋一些。
R 中與 Python 的 pandas 庫(kù)功能最為接近的大概就是 dplyr 包了锯岖,只不過(guò)它會(huì)比 pandas 庫(kù)限制得更多介袜。雖然這聽(tīng)起來(lái)不太好,但實(shí)際上使用 dplyr 包時(shí)會(huì)促使你更專(zhuān)注于尋求問(wèn)題的解決之道出吹,而且 dplyr 包的代碼也比 pandas 庫(kù)更容易理解遇伞。
選擇你自己的編程語(yǔ)言吧
R 最大的問(wèn)題在于一致性不夠好。其中的算法流程被分成三塊捶牢,使得它們相對(duì)而言不夠統(tǒng)一鸠珠。你不得不學(xué)習(xí)新的方法來(lái)建模并用新的算法來(lái)做預(yù)測(cè),伴隨這個(gè)過(guò)程秋麸,結(jié)果的有效性將會(huì)明顯下降渐排。你需要理解每個(gè)包是怎么用的,同樣地竹勉,R 中包的幫助文檔由于不夠完整飞盆,一致性也不好。
不過(guò)次乓,要是你需要一個(gè)數(shù)據(jù)分析的工具用于學(xué)術(shù)吓歇, R 絕對(duì)可以勝任這項(xiàng)工作。 Python 則被廣泛地用于商業(yè)也更便于協(xié)作票腰,不過(guò) R 也越來(lái)越得到重視了城看。不管是日常的使用和機(jī)器學(xué)習(xí),還是通過(guò)和 R 一般眾多的包來(lái)做數(shù)據(jù)分析杏慰, Python 都能做到测柠,因此也更推薦使用 Python 炼鞠。
如果你對(duì) R 還比較陌生,不如學(xué)習(xí) Python 并通過(guò) RPy2 包來(lái)實(shí)現(xiàn) R 的功能轰胁。 這樣一來(lái)谒主,你就可以在一種編程語(yǔ)言里同時(shí)使用二者的功能,而且由于很多公司已經(jīng)開(kāi)發(fā)了在 Python 中使用的生產(chǎn)系統(tǒng)赃阀, Python 可謂生產(chǎn)力高效霎肯。這點(diǎn)在 R 中就不適用了。一旦你學(xué)會(huì)了 RPy2 榛斯,再想跳到 R 里面并沒(méi)有那么復(fù)雜观游,不過(guò)反過(guò)來(lái)就相對(duì)而言困難得多了。
不管你想解決什么類(lèi)型的問(wèn)題驮俗, Python 和 R 都有功能相近的資源庫(kù)可以使用懂缕。每種編程語(yǔ)言都有很多的分支、模塊王凑、集成開(kāi)發(fā)環(huán)境和算法搪柑,以至于你難以出什么大的紕漏。不過(guò)要是你希望使用一個(gè)靈活性強(qiáng)荤崇,擴(kuò)展性好拌屏,多功能又能勝任機(jī)器學(xué)習(xí)和數(shù)據(jù)分析工作的編程語(yǔ)言, Python 或許是明智之選术荤。
原文鏈接:Python versus R for machine learning and data analysis
原文作者: Tom Radcliffe
譯作者:Vector