?譯者 | 劉濤
審校 | 孫淑娟
人工智能(AI)和機(jī)器學(xué)習(xí)(ML)是我們?nèi)粘I畹幕锇椋茈y想象沒有算法和統(tǒng)計模型會是怎樣一種生活。每當(dāng)我們聽到機(jī)器學(xué)習(xí)這個詞時,首先想到的就是 Python。因為Python長期以來一直是機(jī)器學(xué)習(xí)的代言人,它在幫助實現(xiàn)機(jī)器學(xué)習(xí)的技術(shù)層面上發(fā)揮了重要作用。
Python可能是最優(yōu)美的機(jī)器學(xué)習(xí)語言,有48.24%的開發(fā)人員使用它。由于Python具有強(qiáng)大便利的低級包和高級API接口,它在科學(xué)計算的所有領(lǐng)域中都具有無可比擬的優(yōu)勢,但在用于特定任務(wù)時,它也有一些缺點。因此,對于Python替代語言的需求也越來越普遍。
目前,許多新興語言在性能上與Python相當(dāng),甚至比Python更好。所以它不再是機(jī)器學(xué)習(xí)的唯一選項。Scala,Julia,MQL5以及其他非 Python超集的語言可以用來開發(fā)和提供機(jī)器學(xué)習(xí)應(yīng)用。因此機(jī)器學(xué)習(xí)不再局限于Python。
本文將探討新機(jī)器學(xué)習(xí)語言的出現(xiàn),以及它們?nèi)绾吻治gPython市場份額以及未來機(jī)器學(xué)習(xí)的變化。
1.Python的缺點
讓我們來討論一下Python的一些缺點,這些缺點是開發(fā)者和數(shù)據(jù)科學(xué)家經(jīng)常面對的。
性能和速度
Python開發(fā)速度很快,但是計算速度非常慢。它使用解釋器而非編譯器。由于執(zhí)行順序代碼,它比其他的數(shù)據(jù)科學(xué)編程語言要慢。Python的速度比C慢,因為C有很多有用的工具和庫。除非你掌握了矢量化代碼,否則你會發(fā)現(xiàn)它是多么的慢。
Cython是一個Python的超集,它將Python源代碼編譯成C語言代碼,最關(guān)鍵是提供了C語言級的運算速度,而無需額外的運算資源。很多程序員使用Cython編寫Python代碼的運行速度和C語言的一樣快,但是更簡潔易讀。
設(shè)計局限
Python在設(shè)計方面存在著巨大的缺陷,這是由它的動態(tài)類型造成的。 通常編程語言中的動態(tài)類型變量不需要特別聲明。Python使用的是鴨子型,這種類型讓人困惑。在鴨子型中,一個對象的類或?qū)傩詻]有它的功能那么重要。 鴨子型不需要類型檢查。 您也可以對進(jìn)程或?qū)傩赃M(jìn)行驗證。
內(nèi)存消耗效率低
Python由于其龐大的結(jié)構(gòu)而占用了大量內(nèi)存。此外,Python數(shù)據(jù)類型在內(nèi)存消耗方面很靈活。它不適用于內(nèi)存密集型任務(wù)。其靈活的數(shù)據(jù)類型也會導(dǎo)致內(nèi)存消耗。因此,當(dāng)您創(chuàng)建大型且長期運行的Python系統(tǒng)時,Python中的內(nèi)存管理變得具有挑戰(zhàn)性。
線程不足
與其他語言相比,Python線程效率更低。盡管Python是多線程處理任務(wù),但每次只能執(zhí)行一個線程。因此,多線程的 Python 提供了單線程的處理效率。Python有一個全局解釋器鎖 (GIL),同一時間只允許一個線程使用。只有在Python使用原生庫的情況下,才能同時運行多線程。此外,Python的超集 Jython可以實現(xiàn)多線程,而Python則不行。
2.為什么數(shù)據(jù)科學(xué)家要尋找Python替代者?
Python確實很棒。但它不可能同時既是閃電俠又是無敵浩克!有人可能需要閃電俠,有人可能需要綠巨人。用戶需求是多樣性的。同樣,Python也不是專為數(shù)學(xué)和數(shù)據(jù)科學(xué)應(yīng)用而設(shè)計的。它需要一個像NumPy或Tensorflow這樣的第三方庫,專門用于深度學(xué)習(xí)算法。因此,與Python相比,數(shù)據(jù)專用編程語言更具優(yōu)勢。
例如,在商業(yè)領(lǐng)域,機(jī)器學(xué)習(xí)需要速度和可擴(kuò)展性以減少執(zhí)行時間。您不能讓顧客等太久。因此,您需要更快的ML語言(通用函數(shù)式編程語言)來執(zhí)行。速度越快越好。
現(xiàn)在,Python已經(jīng)很快了,但還有什么能比Python更快的呢?有的,它是Julia,或是Scala!
在這種情況下,數(shù)據(jù)科學(xué)家更喜歡使用與Python不同的編程語言。
3.數(shù)據(jù)科學(xué)的Python替代方案
在各種應(yīng)用程序環(huán)境中,有幾種Python替代方案的性能與Python相當(dāng)或優(yōu)于Python。以下是一些Python數(shù)據(jù)科學(xué)的替代方案:
(1)Julia
Julia是一種全新的高級動態(tài)編程語言,具有創(chuàng)新性、快速性和舒適性。它是一種能夠編寫各種應(yīng)用程序的通用語言。值得一提的是,其軟件包生態(tài)系統(tǒng)和功能有很大一部分都是面向高級數(shù)值計算的,非常適合機(jī)器學(xué)習(xí)。
Julia基于多種語言構(gòu)建,包括C語言和Python、R和MATLAB等高級動態(tài)類語言。Julia汲取了這些語言的可選類型、語法和特性,因為Julia的目標(biāo)是整合它們的優(yōu)點并消除其缺點。

Julia的創(chuàng)造者希望開發(fā)出一種語言,可以像C語言一樣快速地處理科學(xué)計算、機(jī)器學(xué)習(xí)、數(shù)據(jù)挖掘、大規(guī)模線性代數(shù)、分布式和并行計算。然而,他們最終開發(fā)出的語言速度更快。 盡管Python的速度越來越快,但Julia還是勝過了它。
Julia簡化了許多用于機(jī)器學(xué)習(xí)的數(shù)學(xué)符號。它提供諸如ArrayFire這樣的多樣化GPU編程包,它能使GPU執(zhí)行通用代碼。每個包都有自己獨特的編程模式,比如, NVIDIA有CUDA. Jl,AMD有AMDGPU. jl和oneAPI。
機(jī)器學(xué)習(xí)工程師可以在大型集群中快速部署Julia,受益于其強(qiáng)大的工具,例如MLBase.jl、Flux.jl(深度學(xué)習(xí))、MLJ.j(通用機(jī)器學(xué)習(xí))和Knet.jl(深度學(xué)習(xí))。Flux是 一個高速的深度機(jī)器學(xué)習(xí)庫,它預(yù)裝了額外的工具,使Julia的能力達(dá)到了最大化。 同樣,還包括適用于 ML應(yīng)用程序的ScikitLearn.jl、TensorFlow.jl和MXNet.jl。
Julia擅長解決復(fù)雜的計算問題。因此,包括斯坦福大學(xué)和東京都立大學(xué)在內(nèi)的眾多著名學(xué)府都開設(shè)了Julia課程。 它在與Python的比較中,性能也很穩(wěn)固。
(2)Scala
像Logan Kilpatrick這樣的眾多行業(yè)高管認(rèn)為,Julia是機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)的未來。
Julia的主要特點:
- Julia的一些核心功能可實現(xiàn)高效的數(shù)據(jù)科學(xué)計算:
- Julia的運算速度很快。它比Python快2-20倍;
- 靈活豐富的庫功能;
- 內(nèi)置包管理器;
- PyCall和CCall 包直接調(diào)用Python;
- 使用類似shell的功能管理其他進(jìn)程;
- 為并行和分布式計算而開發(fā);
- 自動為各種參數(shù)類型生成高效代碼;
- 具有MIT許可證的免費和開源軟件。
Scala是一種高級編程語言,它同時支持面向?qū)ο蠛秃瘮?shù)式編程技術(shù)。Martin Odersky創(chuàng)建了它,并于2004年6月正式推出。Scala在開發(fā)人員中越來越受歡迎,并且正在跨越當(dāng)今的技術(shù)。
Scala是一種與Java應(yīng)用程序和庫兼容的Java虛擬機(jī) (JVM) 語言。 因為它缺乏基本數(shù)據(jù)的概念,所以經(jīng)常被認(rèn)為是一種靜態(tài)語言。 它的多范式、多核架構(gòu)很復(fù)雜。
ApacheSpark是一種功能強(qiáng)大、速度快的實時數(shù)據(jù)流和數(shù)據(jù)處理工具。Scala Spark有助于復(fù)雜的映射、ETL和大型數(shù)據(jù)處理任務(wù)。Scala允許用戶通過理解代碼來實現(xiàn)新的Spark功能。Scala與Java的兼容性使程序員能夠快速掌握面向?qū)ο蟮母拍睢?/p>
SparkMLlib包含了Spark中的高質(zhì)量算法和出色的性能,使其成為可擴(kuò)展的機(jī)器學(xué)習(xí)庫。分類、回歸、聚類、協(xié)同過濾和降維都包含在Spark的MLlib機(jī)器學(xué)習(xí)庫中。此外,Breeze、Spire、Saddle和Scalalab是其他一些有助于創(chuàng)建強(qiáng)大的數(shù)據(jù)處理應(yīng)用程序的ML庫。
ApacheKafka是一種開源分布式事件流平臺,隨著Python的流行,Spark也開始大行其道。Scala Spark中執(zhí)行緩慢的內(nèi)容必然會在PySpark中崩潰。此外,您可以使用TensorFlow Scala庫為機(jī)器學(xué)習(xí)模型創(chuàng)建一個適應(yīng)性強(qiáng)的高性能服務(wù)系統(tǒng)。
Scala的靜態(tài)類型有助于復(fù)雜的應(yīng)用程序。它的JVM和JavaScript運行時使高性能系統(tǒng)能夠輕松訪問庫。此外,它的性能優(yōu)于Python。 它也在與Python的比較中站穩(wěn)了腳跟。
Scala的主要特點
Scala的一些核心功能可實現(xiàn)高效的數(shù)據(jù)科學(xué)計算:
- Scala的速度比Python快10倍;
- 具備高級類型推斷機(jī)制;
- 樣例類(case class)和模式匹配;
- 擁有簡潔但易讀的表達(dá)性語法;
- 提供高階函數(shù);
- 使用Singleton對象而不是靜態(tài)變量;
- 使用OOP、FP或混合風(fēng)格的代碼;
- Scala源代碼編譯為“. class”文件,該文件在JVM上執(zhí)行。
(3)MQL5
MQL5是一種提供高級數(shù)據(jù)分析及機(jī)器學(xué)習(xí)功能的高級面向?qū)ο缶幊陶Z言。它基于廣泛使用和廣為人知的編程語言C++之上,并以速度快、通用性強(qiáng)著稱。
MQL5不是像Python、Julia或Scala那樣的日常ML語言。 它專門為金融市場創(chuàng)造,用于監(jiān)控金融工具。該語言的核心與其他語言相似,但具有獨特的功能。MQL5支持整數(shù)、布爾值、文字、字符串、日期、時間和枚舉。它把結(jié)構(gòu)和類都定義為復(fù)雜數(shù)據(jù)類型。
MQL5語言說明文檔列出了函數(shù)、操作、保留字等。此外,它還提供了整數(shù)、布爾值、文字、字符串、日期和時間等數(shù)據(jù)類型。它有復(fù)雜的結(jié)構(gòu)和類。 此外,該說明文檔還包括交易策略、控制面板、自定義視效和文件訪問等的標(biāo)準(zhǔn)庫類定義。
此外,MQL5擁有超過1,500個用于新應(yīng)用開發(fā)的源代碼庫。 您可以使用包含大量數(shù)值分析函數(shù)的ALGLIB庫。同樣,還有用于處理時間序列的TimeSeries庫和用于開發(fā)模糊模型的Fuzzy庫以及其他各種庫。
MQL5是一種功能強(qiáng)大的編程語言,可以幫助您構(gòu)建實時系統(tǒng),提供可視化的決策幫助。MQL5 支持枚舉、結(jié)構(gòu)、類和事件。通過增加主嵌入式函數(shù)的數(shù)量,MQL5程序可以與DLL進(jìn)行通信。
MQL5具有與C++類似的語法,可以很容易地把用不同的編程語言編寫的程序轉(zhuǎn)換成MQL5程序。因此,在使用數(shù)據(jù)分析、人工智能或金融工具作為交易機(jī)器人時,您可以獲得與C++相同的效率。
MQL5的主要特點
MQL5的一些核心功能可實現(xiàn)高效的數(shù)據(jù)科學(xué)計算:
- MQL5是以C++為基礎(chǔ)的。因此,其速度與C++相當(dāng),且超過Python;
- 專為金融市場的工具和分析而創(chuàng)建;
- 完全事件驅(qū)動;
- 1500多個源代碼庫;
- 可預(yù)定義標(biāo)準(zhǔn)常量和枚舉。服務(wù)架構(gòu)存儲信息;
- 更改配色方案、創(chuàng)建控制面板、添加自定義交易品種以及從MQL5程序?qū)С鰞r格圖表;
- 12種新的繪圖樣式,512個緩沖區(qū),以及從過去到未來的直接索引值計算;
- 在圖表和多幣種測試器中調(diào)試外匯智能交易系統(tǒng)(Expert Advisor)
4.您應(yīng)該選擇哪種Python ML替代方案?
編程語言好比駕駛賽車,一部合適的汽車是必不可少的,司機(jī)就更不用說了。同樣,作為一名數(shù)據(jù)科學(xué)家,您正是這些獨特跑車的駕駛員。
每位數(shù)據(jù)科學(xué)家或開發(fā)人員對特定技術(shù)都有自己的要求和規(guī)范。最佳的技術(shù)選擇取決于您需要的視角和功能。因此,很難做出最終選擇。
如果您希望實現(xiàn)多進(jìn)程的運算,而且要求非常高的運算速度,則可以選擇Julia。 它是三者中最快的。另一方面,如果您正在做大型項目,Scala應(yīng)該是更好的選擇,因為它能夠勝任。如果您對金融工具感興趣,MQL5則是最佳選擇。
同樣,每一種程序設(shè)計語言都有自己特點和擅長領(lǐng)域。因此,選擇滿足您的要求和規(guī)范的語言才是最好的做法。
5.總結(jié)
機(jī)器學(xué)習(xí)是一個持續(xù)的、不斷進(jìn)化的過程。隨著時間的推移,它與標(biāo)準(zhǔn)化ML (SML) 語言一起出現(xiàn),并在Python中流行起來。如今,具有不同需求的機(jī)器學(xué)習(xí)語言呈現(xiàn)多樣化的發(fā)展。
簡而言之,Python是一種非常出色的機(jī)器學(xué)習(xí)語言。但Python并不是一種數(shù)據(jù)科學(xué)專用語言,并且有一些更加現(xiàn)代的編程語言可以比它更有效地執(zhí)行特定任務(wù)。
因此,新興的編程語言正在機(jī)器學(xué)習(xí)領(lǐng)域中獲得了市場份額并不斷增長。希望在未來幾年內(nèi),它們也能夠普及流行起來。
原文鏈接:https://hackernoon.com/not-only-python-problems-errors-and-alternatives
譯者介紹
劉濤,51CTO社區(qū)編輯,某大型央企系統(tǒng)上線檢測管控負(fù)責(zé)人,主要職責(zé)為嚴(yán)格審核系統(tǒng)上線驗收所做的漏掃、滲透測試以及基線檢查等多項檢測工作,擁有多年網(wǎng)絡(luò)安全管理經(jīng)驗,多年P(guān)HP及Web開發(fā)和防御經(jīng)驗,Linux使用及管理經(jīng)驗,擁有豐富的代碼審計、網(wǎng)絡(luò)安全測試和威脅挖掘經(jīng)驗。精通Kali下SQL審計、SQLMAP自動化探測、XSS審計、Metasploit審計、CSRF審計、webshell審計、maltego審計等技術(shù)。






















