用於數據科學的頂級 C/C++ 機器學習庫整理
- 2022 年 11 月 9 日
- 筆記
用於數據科學的頂級 C/C++ 機器學習庫整理
介紹和動機——為什麼選擇 C++
C++ 非常適合 動態負載平衡、 自適應快取以及開發大型大數據框架 和庫。Google 的MapReduce、MongoDB以及 下面列出 的大多數 深度學習庫都是使用 C++ 實現的。 Scylla 以其 超低延遲 和 極高 吞吐量而聞名,它 使用 C++ 進行編碼,作為 Apache Cassandra 和 Amazon DynamoDB的替代品。
憑藉 C++ 作為程式語言的 一些獨特優勢(包括記憶體管理、 性能特徵和 系統編程),它無疑是開發快速可擴展的數據科學和大資料庫的最有效工具之一。
此外, Julia (一種 由MIT開發的編譯型 和 互動式 語言)正在成為 Python 在科學計算和數據處理領域的潛在競爭對手。它的快速處理速度、並行性、靜態以及用於插入庫的動態類型和 C++ 綁定,簡化了開發人員/數據科學家集成和使用 C++ 作為數據科學和大資料庫的工作。
讓我們仔細研究一下不同的 C++ 庫,這些庫對於傳統和深度學習模型的每位數據科學家來說都很有用。
1.來自 Google AI 的 TensorFlow
由 Google 開發的流行深度學習庫,擁有自己的工具、庫和社區資源生態系統,可讓研究人員和開發人員輕鬆構建和部署基於 ML 的應用程式
//www.tensorflow.org/lite/microcontrollers/library//github.com/tensorflow/serving
2.來自伯克利的 Caffe
用於快速特徵嵌入或 Caffe 的卷積架構是用 C++ 編寫的,用於深度學習框架,由伯克利視覺和學習中心開發。
3.微軟認知工具包(CNTK)
Microsoft Cognitive Toolkit 是一個統一的深度學習工具包,有助於通過有向圖將神經網路轉換為一系列計算步驟。
4.mlpack 庫
mlpack:它是一個快速、靈活的機器學習庫,用 C++ 編寫。它提供了具有 Python 綁定、Julia 綁定和 C++ 類的尖端機器學習演算法。
5.DyNet
Dynamic Neural Network Toolkit (支援動態計算圖)或 DyNet 是一個用 C++(在 Python 中綁定)編寫的高性能神經網路庫,可在 CPU 或 GPU 上高效運行。它支援自然語言處理、圖結構、強化學習等。
6.Shogun
Shogun 是一個開源機器學習庫,它提供了廣泛的高效和統一的機器學習方法,例如多種數據表示、演算法類和通用工具的組合,用於數據管道的快速原型設計。
7. FANN
快速人工神經 網路 是 C 語言中的多層人工神經網路,支援全連接和稀疏連接網路。它支援定點和浮點的跨平台執行。此外,它還支援進化的基於拓撲的訓練和基於反向傳播的 DL 模型訓練。
8.OpenNN
開放神經網路 (OpenNN) 是用於高級分析的開源 (C/C++) 神經網路高性能庫,支援分類、回歸、預測等。
9.SHARK Library
Shark 是一個快速、模組化、通用的開源機器學習庫 (C/C++),用於應用和研究,支援線性和非線性優化、基於內核的學習演算法、神經網路和各種其他機器學習技術。
10. Armadillo
Armadillo 是一個線性代數 (C/C++) 庫,其功能類似於 Matlab。該庫以將研究程式碼快速轉換為生產環境而聞名,用於模式識別、電腦視覺、訊號處理、生物資訊學、統計學、計量經濟學等。
11.Faisis
faiss:這個庫(C/C++)用於高效的相似性搜索和密集向量的聚類。它包含在任意大小的向量集中搜索的演算法,直到那些可能不適合 RAM 的向量。它還支援通過 CUDA 提供的可選 GPU,以及可選的 Python 介面。
12.隨機森林
//github.com/zhufangzhou/RandomForest
//github.com/bjoern-andres/random-forest
13.Boosting
XGBoost – 一個並行優化的通用梯度提升庫。
ThunderGBM – GPU 上用於 GBDT 和隨機森林的快速庫。
LightGBM—— 微軟基於決策樹演算法的快速、分散式、高性能梯度提升(GBDT、GBRT、GBM 或 MART)框架,用於排名、分類和許多其他機器學習任務。
CatBoost – 具有開箱即用的分類特徵支援的決策樹庫的通用梯度提升。它易於安裝,包含快速推理實現,並支援 CPU 和 GPU(甚至多 GPU)計算。
14.推薦系統
Recommender – 使用協同過濾 (CF) 的產品推薦/建議的 AC 庫。
混合推薦系統 ——基於 scikit-learn 演算法的混合推薦系統
15.自然語言處理
BLLIP Parser – BLLIP 自然語言解析器(也稱為 Charniak-Johnson 解析器)。
colibri-core – C++ 庫、命令行工具和 Python 綁定,用於以快速且節省記憶體的方式提取和處理基本語言結構,例如 n-gram 和skiagram。
CRF++ – 條件隨機場 (CRF) 的開源實現,用於分割/標記順序數據和其他自然語言處理任務。[已棄用]
CRFsuite – CRFsuite 是用於標記順序數據的條件隨機欄位 (CRF) 的實現。[已棄用]
CRF 模型 -不同的基於深度學習的 CRF models.frog – 為荷蘭語開發的基於記憶體的 NLP 套件:PoS 標記器、詞形還原器、依賴解析器、NER、淺解析器、形態分析器。
MeTA – ModErn Text Analysis 是一個 C++ 數據科學工具包,可促進大文本數據的挖掘,包括文本標記化,包括解析樹、主題模型、分類演算法、圖形演算法、語言模型、多執行緒演算法等深度語義特徵。
MIT Information Extraction Toolkit – 用於命名實體識別和關係提取的 C、C++ 和 Python 工具
ucto – Unicode 感知的基於正則表達式的各種語言的標記器。工具和 C++ 庫。支援 FoLiA 格式。
16.流的數據挖掘
StreamDM :對挖掘大數據流很有用,它支援以下演算法
SGD 學習器和感知器:
- Naive Bayes
- CluStream
- Hoeffding Decision Trees
- Bagging
- Stream KM++
- Data Generators
HyperplaneGenerator
- RandomTreeGenerator
- RandomRBFGenerator
- RandomRBFEventsGenerato
17.數據結構/圖/動態規劃演算法
//github.com/TheAlgorithms/C-Plus-Plus
18.通用機器學習
Darknet – Darknet 是一個用 C 和 CUDA 編寫的開源神經網路框架,支援 CPU 和 GPU 計算。
cONNXr – ONNX 運行時是用純 C (99) 編寫的,零依賴於小型嵌入式設備。無論您使用哪種框架進行訓練,都可以對您的機器學習模型進行推理。易於在任何地方安裝和編譯,即使在非常舊的設備中也是如此。
BanditLib – 一個簡單的多臂 Bandit 庫。 [已棄用]
CUDA – 這是卷積深度學習的快速 C++/CUDA 實現
DeepDetect – 用 C++11 編寫的機器學習 API 和伺服器。它使最先進的機器學習易於使用並集成到現有應用程式中。
分散式機器學習工具包 (DMTK) – Microsoft 的分散式機器學習(參數伺服器)框架。啟用跨多台機器的大型數據集訓練模型。當前與之捆綁的工具包括:LightLDA 和分散式(Multisense)詞嵌入。
DLib – 一套 ML 工具,旨在輕鬆嵌入其他應用程式。
DSSTNE – 亞馬遜創建的一個軟體庫,用於使用 GPU 訓練和部署深度神經網路,強調速度和規模而不是實驗靈活性。
DyNet – 一個動態神經網路庫,可以很好地與具有隨每個訓練實例變化的動態結構的網路一起工作。用 C++ 編寫,在 Python 中綁定。
Fido – 用於嵌入式電子和機器人技術的高度模組化 C++ 機器學習庫。
igraph – 通用圖形庫。
Intel(R) DAAL – 由英特爾開發並針對英特爾架構進行了優化的高性能軟體庫。庫為數據分析的所有階段提供演算法構建塊,並允許以批處理、在線和分散式模式處理數據。
libfm – 一種通用方法,允許通過特徵工程模擬大多數分解模型。
MLDB—— 機器學習資料庫是專為機器學習而設計的資料庫。通過 RESTful API 向其發送命令以存儲數據,使用 SQL 進行探索,然後訓練機器學習模型,並將它們作為 API 公開。
mlpack – 一個可擴展的 C++ 機器學習庫。
MXNet – 輕量級、隨身、靈活的分散式/移動深度學習,具有動態、突變感知數據流 Dep 調度器;適用於 Python、R、Julia、Go、Javascript 等。
proNet-core – 通用網路嵌入框架:成對表示優化網路編輯。
PyCUDA – CUDA 的 Python 介面
ROOT – 一個模組化的科學軟體框架。它提供了處理大數據處理、統計分析、可視化和存儲所需的所有功能。
Shark – 一個快速、模組化、功能豐富的開源 C++ 機器學習庫。
Shogun – Shogun 機器學習工具箱。
sofia-ml – 快速增量演算法套件。Stan – 一種概率程式語言,使用哈密頓蒙特卡羅取樣實現完整的貝葉斯統計推斷。
Timbl – 一個軟體包/C++ 庫,實現了幾種基於記憶體的學習演算法,其中 IB1-IG 是 k 最近鄰分類的實現,IGTree 是 IB1-IG 的決策樹近似。常用於自然語言處理。
Vowpal Wabbit (VW) – 一種快速的核外學習系統。Warp-CTC – 在 CPU 和 GPU 上快速並行實現連接主義時間分類 (CTC)。
ThunderSVM – GPU 和 CPU 上的快速 SVM 庫。
LKYDeepNN – 一個只有頭文件的 C++11 神經網路庫。低依賴,原生繁體中文文檔。
xLearn – 一個高性能、易於使用且可擴展的機器學習包,可用於解決大規模機器學習問題。xLearn 對於解決大規模稀疏數據上的機器學習問題特別有用,這在在線廣告和推薦系統等互聯網服務中非常常見。
Featuretools – 用於自動化特徵工程的庫。它擅長使用可重用的特徵工程「原語」將事務和關係數據集轉換為用於機器學習的特徵矩陣。
skynet – 用於學習神經網路的庫,具有 C 介面,網路設置為 JSON。用 C++ 編寫,綁定了 Python、C++ 和 C#。
Feast – 用於管理、發現和訪問機器學習功能的功能商店。Feast 為模型訓練和模型服務提供了一致的特徵數據視圖。
Hopsworks – 具有業界首個開源功能存儲的 AI 數據密集型平台。Hopsworks Feature Store 提供了一個基於 Apache Hive 的用於訓練和批處理的特徵倉庫和一個基於 MySQL Cluster 的特徵服務資料庫,用於在線應用程式。
Polyaxon – 可重複和可擴展的機器學習和深度學習平台。
sara – C++ 電腦視覺庫,具有易於理解和高效的電腦視覺演算法實現。[Mozilla 公共許可證 2.0 版]
ANNetGPGPU – 基於 GPU (CUDA) 的人工神經網路庫。[LGPL]
btsk – 遊戲行為樹入門工具包。[zlib]
Evolving Objects – 一個基於模板的 ANSI-C++ 進化計算庫,可幫助您快速編寫自己的隨機優化演算法。[LGPL]
frugally-deep – 僅用於在 C++ 中使用 Keras 模型的標頭庫。[麻省理工學院]
Genann – C 中的簡單神經網路庫。 [zlib]
MXNet – 輕量級、隨身、靈活的分散式/移動深度學習,具有動態、突變感知數據流 Dep 調度器;適用於 Python、R、Julia、Scala、Go、Javascript 等。
PyTorch – Python 中的張量和動態神經網路,具有強大的 GPU 加速功能。
website Recast/Detour – (3D) 導航網格生成器和探路者,主要用於遊戲。[zlib]
tiny-dnn – C++11 中的僅標頭、無依賴的深度學習框架。[BSD]
Veles – 用於快速深度學習應用程式開發的分散式平台。[阿帕奇]
Kaldi – 語音識別工具包。[阿帕奇]
19.電腦視覺
CCV – 基於 C/快取/核心的電腦視覺庫,現代電腦視覺庫。
VLFeat – VLFeat 是一個開放且可移植的電腦視覺演算法庫,它具有 Matlab 工具箱。
DLib – DLib 具有用於人臉檢測和訓練通用對象檢測器的 C++ 和 Python 介面。
EBLearn – Eblearn 是一個面向對象的 C++ 庫,可實現各種機器學習模型 [已棄用]
OpenCV – OpenCV 具有 C++、C、Python、Java 和 MATLAB 介面,並支援 Windows、Linux、Android 和 Mac OS。
VIGRA – VIGRA 是一個通用的跨平台 C++ 電腦視覺和機器學習庫,用於與 Python 綁定的任意維度卷。
Openpose – 用於身體、面部、手部和足部估計的實時多人關鍵點檢測庫。來自 Facebook 研究的手電筒。
20.來自 Facebook Research 的 FlashLight
flashlight 是一個快速、靈活的機器學習庫,由 Facebook AI Research Speech 團隊和 Torch 和 Deep Speech 的創建者完全用 C++ 編寫。
21.來自阿里巴巴的移動神經網路
MNN 是一個高效、輕量級的深度學習框架。它支援深度學習模型的推理和訓練,並具有行業領先的設備推理和訓練性能。
22.來自 Facebook Research 的 Habitat-SIM
habitat-sim (C++) 庫支援在高度逼真和高效的3D 模擬器 中訓練具身 AI 代理(虛擬機器人),然後將學習到的技能轉化為現實。它使用帶有 AI 的靜態數據集(例如ImageNet、COCO、VQA),其中代理通過從中學習在現實環境中行動。
參考
//analyticsindiamag.com/top-10-libraries-in-c-c-for-machine-learning/
//github.com/topics/ml?l=c%2B%2B
//dzone.com/articles/progressive-tools10-best-frameworks-and-libraries