用于数据科学的顶级 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 的应用程序

https://www.tensorflow.org/lite/microcontrollers/libraryhttps://github.com/tensorflow/serving

2.来自伯克利的 Caffe

用于快速特征嵌入或 Caffe 的卷积架构是用 C++ 编写的,用于深度学习框架,由伯克利视觉和学习中心开发。

https://github.com/intel/caffe

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.随机森林

https://github.com/zhufangzhou/RandomForest
https://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.数据结构/图/动态规划算法

https://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),其中代理通过从中学习在现实环境中行动。

参考
https://analyticsindiamag.com/top-10-libraries-in-c-c-for-machine-learning/
https://github.com/topics/ml?l=c%2B%2B
https://dzone.com/articles/progressive-tools10-best-frameworks-and-libraries