譯者:劉濤
人工智能(AI)和機器學習(ML)是我們日常生活的夥伴,很難想象沒有算法和統計模型會是怎樣一種生活。每當我們聽到機器學習這個詞時,首先想到的就是 Python。因為Python長期以來一直是機器學習的代言人,它在幫助實現機器學習的技術層面上發揮了重要作用。
Python可能是最優美的機器學習語言,有48.24%的開發人員使用它。由於Python具有強大便利的低級包和高級API接口,它在科學計算的所有領域中都具有無可比擬的優勢,但在用於特定任務時,它也有一些缺點。因此,對於Python替代語言的需求也越來越普遍。
目前,許多新興語言在性能上與Python相當,甚至比Python更好。所以它不再是機器學習的唯一選項。Scala,Julia,MQL5以及其他非 Python超集的語言可以用來開發和提供機器學習應用。因此機器學習不再侷限於Python。
本文將探討新機器學習語言的出現,以及它們如何侵蝕Python市場份額以及未來機器學習的變化。
性能和速度
Python開發速度很快,但是計算速度非常慢。它使用解釋器而非編譯器。由於執行順序代碼,它比其他的數據科學編程語言要慢。Python的速度比C慢,因為C有很多有用的工具和庫。除非你掌握了矢量化代碼,否則你會發現它是多麼的慢。
Cython是一個Python的超集,它將Python源代碼編譯成C語言代碼,最關鍵是提供了C語言級的運算速度,而無需額外的運算資源。很多程序員使用Cython編寫Python代碼的運行速度和C語言的一樣快,但是更簡潔易讀。
設計侷限
Python在設計方面存在著巨大的缺陷,這是由它的動態類型造成的。 通常編程語言中的動態類型變量不需要特別聲明。Python使用的是鴨子型,這種類型讓人困惑。在鴨子型中,一個對象的類或屬性沒有它的功能那麼重要。 鴨子型不需要類型檢查。 您也可以對進程或屬性進行驗證。
內存消耗效率低
Python由於其龐大的結構而佔用了大量內存。此外,Python數據類型在內存消耗方面很靈活。它不適用於內存密集型任務。其靈活的數據類型也會導致內存消耗。因此,當您創建大型且長期運行的Python系統時,Python中的內存管理變得具有挑戰性。
線程不足
與其他語言相比,Python線程效率更低。儘管Python是多線程處理任務,但每次只能執行一個線程。因此,多線程的 Python 提供了單線程的處理效率。Python有一個全局解釋器鎖 (GIL),同一時間只允許一個線程使用。只有在Python使用原生庫的情況下,才能同時運行多線程。此外,Python的超集 Jython可以實現多線程,而Python則不行。
2.為什麼數據科學家要尋找Python替代者?
Python確實很棒。但它不可能同時既是閃電俠又是無敵浩克!有人可能需要閃電俠,有人可能需要綠巨人。用戶需求是多樣性的。同樣,Python也不是專為數學和數據科學應用而設計的。它需要一個像NumPy或Tensorflow這樣的第三方庫,專門用於深度學習算法。因此,與Python相比,數據專用編程語言更具優勢。
例如,在商業領域,機器學習需要速度和可擴展性以減少執行時間。您不能讓顧客等太久。因此,您需要更快的ML語言(通用函數式編程語言)來執行。速度越快越好。
現在,Python已經很快了,但還有什麼能比Python更快的呢?有的,它是Julia,或是Scala!
在這種情況下,數據科學家更喜歡使用與Python不同的編程語言。
3.數據科學的Python替代方案
在各種應用程序環境中,有幾種Python替代方案的性能與Python相當或優於Python。以下是一些Python數據科學的替代方案:
(1)Julia
Julia是一種全新的高級動態編程語言,具有創新性、快速性和舒適性。它是一種能夠編寫各種應用程序的通用語言。值得一提的是,其軟件包生態系統和功能有很大一部分都是面向高級數值計算的,非常適合機器學習。
Julia基於多種語言構建,包括C語言和Python、R和MATLAB等高級動態類語言。Julia汲取了這些語言的可選類型、語法和特性,因為Julia的目標是整合它們的優點並消除其缺點。
Julia的創造者希望開發出一種語言,可以像C語言一樣快速地處理科學計算、機器學習、數據挖掘、大規模線性代數、分佈式和並行計算。然而,他們最終開發出的語言速度更快。 儘管Python的速度越來越快,但Julia還是勝過了它。
Julia簡化了許多用於機器學習的數學符號。它提供諸如ArrayFire這樣的多樣化GPU編程包,它能使GPU執行通用代碼。每個包都有自己獨特的編程模式,比如, NVIDIA有CUDA. Jl,AMD有AMDGPU. jl和oneAPI。
機器學習工程師可以在大型集群中快速部署Julia,受益於其強大的工具,例如MLBase.jl、Flux.jl(深度學習)、MLJ.j(通用機器學習)和Knet.jl(深度學習)。Flux是 一個高速的深度機器學習庫,它預裝了額外的工具,使Julia的能力達到了最大化。 同樣,還包括適用於 ML應用程序的ScikitLearn.jl、TensorFlow.jl和MXNet.jl。
Julia擅長解決複雜的計算問題。因此,包括斯坦福大學和東京都立大學在內的眾多著名學府都開設了Julia課程。 它在與Python的比較中,性能也很穩固。
(2)Scala
像Logan Kilpatrick這樣的眾多行業高管認為,Julia是機器學習和數據科學的未來。
Julia的主要特點:
Julia的一些核心功能可實現高效的數據科學計算:
Julia的運算速度很快。它比Python快2-20倍;
靈活豐富的庫功能;
內置包管理器;
PyCall和CCall 包直接調用Python;
使用類似shell的功能管理其他進程;
為並行和分佈式計算而開發;
自動為各種參數類型生成高效代碼;
具有MIT許可證的免費和開源軟件。
Scala是一種與Java應用程序和庫兼容的Java虛擬機 (JVM) 語言。 因為它缺乏基本數據的概念,所以經常被認為是一種靜態語言。 它的多範式、多核架構很複雜。
ApacheSpark是一種功能強大、速度快的實時數據流和數據處理工具。Scala Spark有助於複雜的映射、ETL和大型數據處理任務。Scala允許用戶通過理解代碼來實現新的Spark功能。Scala與Java的兼容性使程序員能夠快速掌握面向對象的概念。
SparkMLlib包含了Spark中的高質量算法和出色的性能,使其成為可擴展的機器學習庫。分類、迴歸、聚類、協同過濾和降維都包含在Spark的MLlib機器學習庫中。此外,Breeze、Spire、Saddle和Scalalab是其他一些有助於創建強大的數據處理應用程序的ML庫。
ApacheKafka是一種開源分佈式事件流平臺,隨著Python的流行,Spark也開始大行其道。Scala Spark中執行緩慢的內容必然會在PySpark中崩潰。此外,您可以使用TensorFlow Scala庫為機器學習模型創建一個適應性強的高性能服務系統。
Scala的靜態類型有助於複雜的應用程序。它的JVM和JavaScript運行時使高性能系統能夠輕鬆訪問庫。此外,它的性能優於Python。 它也在與Python的比較中站穩了腳跟。
Scala的主要特點
Scala的一些核心功能可實現高效的數據科學計算:
Scala的速度比Python快10倍;
具備高級類型推斷機制;
樣例類(case class)和模式匹配;
擁有簡潔但易讀的表達性語法;
提供高階函數;
使用Singleton對象而不是靜態變量;
使用OOP、FP或混合風格的代碼;
Scala源代碼編譯為“. class”文件,該文件在JVM上執行。
(3)MQL5
MQL5是一種提供高級數據分析及機器學習功能的高級面向對象編程語言。它基於廣泛使用和廣為人知的編程語言C++之上,並以速度快、通用性強著稱。
MQL5不是像Python、Julia或Scala那樣的日常ML語言。 它專門為金融市場創造,用於監控金融工具。該語言的核心與其他語言相似,但具有獨特的功能。MQL5支持整數、布爾值、文字、字符串、日期、時間和枚舉。它把結構和類都定義為複雜數據類型。
MQL5語言說明文檔列出了函數、操作、保留字等。此外,它還提供了整數、布爾值、文字、字符串、日期和時間等數據類型。它有複雜的結構和類。 此外,該說明文檔還包括交易策略、控制面板、自定義視效和文件訪問等的標準庫類定義。
此外,MQL5擁有超過1,500個用於新應用開發的源代碼庫。 您可以使用包含大量數值分析函數的ALGLIB庫。同樣,還有用於處理時間序列的TimeSeries庫和用於開發模糊模型的Fuzzy庫以及其他各種庫。
MQL5是一種功能強大的編程語言,可以幫助您構建實時系統,提供可視化的決策幫助。MQL5 支持枚舉、結構、類和事件。通過增加主嵌入式函數的數量,MQL5程序可以與DLL進行通信。
MQL5具有與C++類似的語法,可以很容易地把用不同的編程語言編寫的程序轉換成MQL5程序。因此,在使用數據分析、人工智能或金融工具作為交易機器人時,您可以獲得與C++相同的效率。
MQL5的主要特點
MQL5的一些核心功能可實現高效的數據科學計算:
MQL5是以C++為基礎的。因此,其速度與C++相當,且超過Python;
專為金融市場的工具和分析而創建;
完全事件驅動;
1500多個源代碼庫;
可預定義標準常量和枚舉。服務架構存儲信息;
更改配色方案、創建控制面板、添加自定義交易品種以及從MQL5程序導出價格圖表;
12種新的繪圖樣式,512個緩衝區,以及從過去到未來的直接索引值計算;
在圖表和多幣種測試器中調試外匯智能交易系統(Expert Advisor)
4.您應該選擇哪種Python ML替代方案?
編程語言好比駕駛賽車,一部合適的汽車是必不可少的,司機就更不用說了。同樣,作為一名數據科學家,您正是這些獨特跑車的駕駛員。
每位數據科學家或開發人員對特定技術都有自己的要求和規範。最佳的技術選擇取決於您需要的視角和功能。因此,很難做出最終選擇。
如果您希望實現多進程的運算,而且要求非常高的運算速度,則可以選擇Julia。 它是三者中最快的。另一方面,如果您正在做大型項目,Scala應該是更好的選擇,因為它能夠勝任。如果您對金融工具感興趣,MQL5則是最佳選擇。
同樣,每一種程序設計語言都有自己特點和擅長領域。因此,選擇滿足您的要求和規範的語言才是最好的做法。
5.總結
機器學習是一個持續的、不斷進化的過程。隨著時間的推移,它與標準化ML (SML) 語言一起出現,並在Python中流行起來。如今,具有不同需求的機器學習語言呈現多樣化的發展。
簡而言之,Python是一種非常出色的機器學習語言。但Python並不是一種數據科學專用語言,並且有一些更加現代的編程語言可以比它更有效地執行特定任務。
因此,新興的編程語言正在機器學習領域中獲得了市場份額並不斷增長。希望在未來幾年內,它們也能夠普及流行起來。