基於PyTorch重寫sklearn,《現代大資料演算法》
HyperLearn是一個基於PyTorch重寫的機器學習工具包Scikit Learn,它的一些模組速度更快、需要記憶體更少,效率提高了一倍。
專為大資料而設計,HyperLearn可以使用50%以下的記憶體,並在某些模組上執行速度提高50%以上。將支援GPU,並且所有模組都是並行化的。
專案作者Daniel Han-Chen,畢業於澳大利亞新南威爾士大學,專注於AI、NLP和無監督機器學習的推薦和匹配演算法。
基於HyperLearn,作者展示瞭如何讓很多機器學習演算法更快、更高效。
其中一些很酷的演算法:
● 最小二乘法/線性迴歸的擬合時間相比sklearn減少70%,記憶體使用減少50%● 由於新的並行演算法,非負矩陣分解的擬合時間相比sklearn減少50%
● Euclidean演算法/餘弦相似度演算法加快40%
● LSMR迭代最小二乘法時間減少50%
● 新的Reconstruction SVD演算法——使用SVD來估算丟失的資料,比mean imputation方法好約30%
稀疏矩陣運算速度提高50%——並行化
● RandomizedSVD,速度加快20%~30%
● New Incremental SVD和Incremental Eig,RandomizedSVD / Truncated SVD
● 等等
專案地址:
https://github.com/danielhanchen/hyperlearn
並且,作者寫了一本電子書:Modern Big Data Algorithms,介紹了12個新演算法以及一些更新的演算法:
紅色:新演算法;綠色:更新的演算法;藍色:即將釋出
讓我們先大致看一下“奇異值分解”(SVD)這一章,這是最重要的演算法之一。SVD將PCA、線性迴歸、嶺迴歸、QDA、LDA、LSI、推薦系統、壓縮演算法、L2 distance等多種演算法聯絡在一起,可以說是機器學習中最重要的演算法了。
提速50%+,RAM使用減少50%+
提速50%+,RAM使用減少50%+,GPU支援的重寫Sklearn,使用Statsmodels組合新的演算法。
HyperLearn完全用PyTorch, NoGil Numba, Numpy, panda, Scipy 和 LAPACK編寫,映象主要是Scikit Learn。HyperLearn還嵌入了統計推斷方法,可以被想Scikit Learn語法(model.confidence_interval_)一樣呼叫。
速度/記憶體的比較
時間表示Fit + Predict的時間。RAM(mb) = max( RAM(Fit), RAM(Predict) )
以下是N = 5000,P = 6000時的初步結果:
關鍵方法和目標
● 令人尷尬的並行迴圈● 速度提升50%+,精簡50%+
● 為什麼Statsmodels有時會慢得讓人無法忍受?
● 使用PyTorch的深度學習模組
● 程式碼量減少20%+,更清晰的程式碼
● 訪問舊演算法和令人興奮的新演算法
1. 令人尷尬的並行迴圈
● 包括記憶體共享,記憶體管理● 通過PyTorch和Numba的CUDA並行性
2. 50%+ Faster, 50%+ Leaner
● 矩陣乘法排序:https://en.wikipedia.org/wiki/Matrix_chain_multiplication
● Element Wise矩陣乘法將複雜度從O(n^3)降低到O(n^2): https://en.wikipedia.org/wiki/Hadamard_product_(matrices)
● 將矩陣運算簡化為Einstein Notation: https://en.wikipedia.org/wiki/Einstein_notation
● 連續評估一次性矩陣操作以減少RAM開銷。
● 如果p >> n,則可能分解X.T優於分解X.
● 在某些情況下,應用QR分解SVD可能會更快。
● 利用矩陣的結構來計算更快(例如三角矩陣,Hermitian矩陣)。
● 計算 SVD(X),然後獲得pinv(X) ,有時比單純計算pinv(X)更快
3. 為什麼Statsmodels有時會慢得讓人無法忍受?
● 對線性模型的置信度、預測區間,假設檢驗和擬合優度檢驗進行了優化。● 儘可能使用 Einstein Notation和Hadamard Products。
● 僅計算需要計算的內容(計算矩陣對角線,而不是整個矩陣)。
● 修復Statsmodels在符號、速度、記憶體方面的問題和變數儲存上的缺陷。
4. 使用PyTorch的深度學習模組
● 使用PyTorch建立Scikit-Learn5. 程式碼量減少20%+,更清晰的程式碼
● 儘可能使用 Decorators和Functions。● 直觀的中層函式名稱,如(isTensor,isIterable)。
● 通過hyperlearn.multiprocessing輕鬆處理並行
6. 訪問舊演算法和令人興奮的新演算法
● 矩陣補全演算法——非負最小二乘法,NNMF● 批相似性隱含狄利克雷分佈(BS-LDA)
● 相關回歸(Correlation Regression)
● 可行的廣義最小二乘法FGLS
● Outlier Tolerant Regression
● 多維樣條迴歸(Multidimensional Spline Regression)
● 廣義MICE
● 使用Uber的Pyro進行貝葉斯深度學習
原文釋出時間為:2018-11-19
本文作者:Daniel Han-Chen
本文來自雲棲社群合作伙伴新智元,瞭解相關資訊可以關注“AI_era”。