摘要: 机器学习或 ML 由 Arthur Samuel 于 1959 年首次提出,它是人工智能的一部分,赋予机器学习并使其实现自我改进的能力。 通过机器学习,开发人员可以训练机器从自己的经验中学习,而无需显式编程来执行上述操作。为了使用机器学习完成如此多的任务,需...
机器学习或 ML 由 Arthur Samuel 于 1959 年首次提出,它是人工智能的一部分,赋予机器学习并使其实现自我改进的能力。
通过机器学习,开发人员可以训练机器从自己的经验中学习,而无需显式编程来执行上述操作。为了使用机器学习完成如此多的任务,需要拥有一系列框架、工具(套件)、模块、库等。我们将在这里重点关注机器学习(ML)库。
机器学习库
通常,机器学习库是可供随时使用的函数和例程的编译。一组强大的库是开发人员研究和编写复杂程序、同时避免编写大量代码的工具库中不可或缺的一部分。
库使开发人员免于一遍又一遍地编写冗余代码。此外,还有各种各样的库来处理不同的事情。例如,有文本处理库、图形库、数据操作和科学计算等。
随着机器学习不断为人类带来新的可能性并吸引新人,数百个机器学习库也在积极开发。接下来,我们将讨论机器学习爱好者和专业人士最青睐的其中 10 个最佳机器学习库,排名不分先后。
PS:本文仅限于解释 ML 库!因此,不包含模块和软件包。例如,statsmodels是实现统计学习算法和时间序列建模的一种极其有效的 ML 选项;但是,它是一个软件包,而不是一个库。
1.Armadillo
- 编写语言:C++
- 时间:N/A
- 开发者:澳大利亚 NICTA 研究中心及独立贡献者
- 用于:线性代数和科学计算
Armadillo 使用 C++ 编程语言实现,是一个用于实现科学计算目的的线性代数库。除了机器学习之外,Armadillo 还可用于:
- 生物信息学
- 计算机视觉
- 计量经济学
- 模式识别
- 信号处理
- 统计数字
Armadillo 采用延迟求值方法,该方法通过模板元编程实现,用于将多个操作组合成一个统一的操作,这减少甚至消除了对临时变量的需求。
Armadillo 库提供类似于 MATLAB 的功能和高级语法。该库适合用 C++ 开发ML 算法。它还能够快速将研究代码实现到可用于生产的环境中。
亮点
- 自动使用 OpenMP 多线程来加速计算密集型操作
- 平衡易用性和速度
- 配有易于使用、直观的界面
- 提供支持:
- 统计和三角函数的子集
- 复数
- 浮点数(单精度和双精度)
- 整数
- 稀疏矩阵和密集矩阵
通过与ARPACK、ATLAS和LAPACK集成,支持多种矩阵分解。
2.FANN
- 编写语言:C
- 时间:2003 年 11 月
- 开发者:Steffen Nissen(原),多名合作者(现)
- 用于:开发多层前馈人工神经网络
FANN 是Fast A rtificial Neural N etwork的缩写。顾名思义,这个开源机器学习库可以帮助开发神经网络,具体来说是多层前馈人工神经网络。
FANN 用 C 编程语言编写,支持完全连接和稀疏连接的神经网络。自 2003 年问世以来,该机器学习库已广泛应用于以下研究:
- 航空航天工程
- 人工智能
- 生物学
- 环境科学
- 遗传学
- 图像识别
- 机器学习
FANN 是一个极其易于使用的库,并附带详尽、深入的文档。它适用于反向传播训练以及演化拓扑训练。
亮点
- 提供多种 GUI,例如:
- 敏捷神经网络
- FANNTool
- 神经视图
- 能够使用定点数和浮点数
- 适用于 20 多种编程语言和技术的绑定,其中包括:
- C#
- Erlang
- Go
- Grass
- Java
- Lua
- MATLAB
- NodeJS
- PHP
- Python
- R and
- Rust
能够将训练好的 ANN 存储为 .net
文件。这样可以更快地保存和加载 ANN 以供将来使用。支持单层和多层网络的跨平台执行。
3.Keras
- 编写语言:Python
- 时间:2015 年 3 月
- 开发者:François Chollet(最初)、多名(现)
- 用于:深度学习
Keras 是一个开源库,可在 CPU 和 GPU 上高效运行。它用于深度学习,特别是神经网络。这个流行的 ML 库与神经网络的构建块配合使用,例如:
- 激活函数
- 图层
- 目标
- 优化器
除了标准神经网络之外,Keras 还支持卷积和循环神经网络。ML 库还包含大量用于处理图像和文本图像的功能。
亮点
可以在其上运行的如下:
- 微软认知工具包(CNTK)
- PlaidML
- R
- TensorFlow
-
Theano
-
支持对深度神经网络进行快速实验
- 它提供了一组高级、直观的抽象,以简化深度学习模型的开发
- 卓越的社区支持
- TensorFlow 核心库中提供支持
4.Matplotlib
- 编写语言:Python
- 时间:2003 年
- 开发者:John D. Hunter(最初)、Michael Droettboom 等人(现)
- 用于:数据可视化和绘图
Matplotlib 是一个 ML 库,用于通过 2D 绘图生成各种格式的可发布的图形、图像,仅使用几行代码,Matplotlib 库就可以生成详细的高质量数据:
- 条形图
- 错误图表
- 直方图
- 散点图等
尽管 Matplotlib 相当用户友好,但习惯了 MATLAB 界面的用户会发现它更容易上手,尤其是使用 pyplot 模块时。ML 库提供了一个面向对象的 API,使用标准 GUI 工具包(如 GTK+、Qt 和 wxPython)在应用程序中嵌入图形和图表。
亮点
- 充足的文献资料。
- 出色的社区支持。
- 使用许多工具包进行功能扩展,包括:
- Cartopy
- Excel 工具
- GTK 工具
- Qt 界面
- 定制程度更高
- SciPy 使用 Matplotlib
5.mlpack
- 编写语言:C++
- 时间:2008 年 2 月
- 开发者:佐治亚理工学院和 mlpack 社区
- 用途:软件库
mlpack 是基于流行的线性代数库 Armadillo 构建的 ML 库,它强调易用性、可扩展性和速度。mplack 库的主要目的是提供一种可扩展、快速且灵活的 ML 算法实现方法。
尽管 mlpack 是为 C++ 设计的,但它也适用于 Go、Julia、Python 和 R 编程语言。它还具有简单的命令行程序和 C++ 类,可以集成到大型 ML 解决方案中。
亮点
- 适合初学者
- 高质量文档
- 通过利用 C++ 特性,最大限度地提高高级用户的灵活性和性能
- 为各种 ML 算法和模型提供支持,包括:
- 协同过滤
- 密度估计树
- 欧几里得最小生成树
- Gaussian混合模型(GMMs)
- K均值聚类
- 逻辑回归
- Naive Bayes classifier(朴素贝叶斯分类器)
- 稀疏编码和稀疏字典学习和
- 基于树的范围搜索。
- 通过为 GRU 和 LSTM 结构提供模板类来支持循环神经网络。
- 绑定系统可扩展到其他编程语言。
6.NLTK
- 编写语言: Python
- 时间:2001 年
- 开发者:Steven Bird、Edward Loper 和 Ewan Klein(原)、NLTK 团队(现)
- 用于:文本处理
NLTK 代表自然语言工具。顾名思义,它是一个用于 NLP 任务的 Python 库,例如语言建模、命名实体识别和神经机器翻译。机器学习库满足所有文本处理需求,包括:
- 分块
- 依赖性解析
- 词形还原
- 词干提取
- 词语标记
有趣的是,NLTK 不仅仅是一个 ML 库,而是一个库(和程序)的集合。
亮点
- 附带一本详细介绍基本概念和食谱的书
- 非常适合教育和研究
- 可以使用 N-gram 和搭配
- 提供一个名为wordnet的同义词库
- 支持命名实体识别
7.NumPy
- 编写语言: Python
- 时间:2006 年
- 开发者:Travis Oliphant(原)、NumPy 社区(现)
- 用于:科学计算
NumPy 是Numerical Python的缩写。该名字清楚地表明它是一个用于计算的库。使用基于 Python的库可以让开发人员在涉及繁重矩阵运算的科学计算中节省大量时间。
NumPy 库利用一类特殊的数组(称为 Numpy 数组),这些数组可以在短短几毫秒内执行大量基于矩阵的计算。这是由于 Numpy 数组在 C 编程语言中的实现而实现的。
由于上述原因,NumPy 已成为机器学习,尤其是自然语言处理最受欢迎的库/包之一。
亮点
- 能够作为任何数据类型的任何通用数据的有效多维容器
- 具有一套详尽的高复杂度数学函数来处理巨大的多维数组和矩阵
- 非常适合处理傅里叶变换线性代数和随机数
- 卓越的社区支持
- TensorFlow 使用它在后端操纵张量
- 用于集成 C、C++ 和 Fortran 代码的开箱即用工具
8.OpenNN
- 编写语言:C++开发
- 时间:2003年
- 开发者:国际工程数值方法中心(原)、Artelnics(现)
- 用于:高级分析和神经网络实现
OpenNN 是一个开源机器学习库,它利用 ML 技术解决各个领域的数据挖掘和预测分析问题。该库已用于处理化学、能源和工程领域的问题。
使用 OpenNN 的主要优势是其高性能。这归功于使用C++ 编程语言开发的库。ML 库具有复杂的算法和实用程序来完成分类、预测、回归等。
亮点
- 能够实现任意数量的非线性处理单元层,用于监督学习
- 使用 OpenMP 实现多处理编程
- 它以一组功能为特色,通过 API 集成到其他软件工具中
- 不仅仅是一个库,一个通用的人工智能软件包
9.Pandas
- 编写语言: C、Cython 和 Python
- 时间:2008 年 1 月
- 开发者:Wes McKinney(原)、pandas 社区(现)
- 用于:管理表格数据
当需要处理大量表格数据时,pandas 是首选的机器学习库。Pandas 之于 Python 就像 Microsoft Excel 之于 Windows。ML 库将大型复杂计算所需的工作量缩减为仅几行代码。
此外,pandas 具有一长串预先存在的命令,这将使 ML 开发人员无需添加各种数学运算的代码。除了数据操作之外,Pandas 库还有助于转换和可视化数据。pandas 库利用两种主要类型的数据结构:
- 系列(一维)
- DataFrame(二维)
使用这种组合可以让开发人员处理属于工程、金融、科学、统计等领域的广泛数据需求和场景。数据科学家依靠 pandas 来减少编写样板代码的混乱,并将更多精力放在与手头的表格数据相关的实际问题解决上。
亮点
- 能够有效处理
- 任何形式的统计或观察数据集
- 具有同质或异构数据的任意矩阵数据
- 有序和无序的时间序列数据
- 具有异构数据列的表格数据
- 出色的社区支持
- 在处理不均匀的时间序列数据方面具有卓越的性能
- 使用 Python 解决实际数据分析的首选库
- 支持富有表现力、快速且灵活的数据结构, 可处理标记数据和关系数据
10.Scikit-Learn
- 编写语言:C、C++、Cython 和 Python
- 时间:2007 年 6 月
- 开发人员:David Cournapeau(原)、Inria
- 用于:数据预处理和建模
无论是决策树、线性回归、逻辑回归还是 SVM,只要说得出问题,Scikit-Learn 都能满足要求。它是用于构建机器学习算法的最流行的机器学习库之一。Scikit-Learn 还具有以下功能:
- 预处理数据
- 使用 BOW、散列矢量化、TF-IDF 等对文本进行矢量化
Scikit-Learn 用 C 和 Python 编写,拥有一个不断壮大的忠诚社区,其中包括世界各地的程序员、机器学习爱好者和 IT 专业人士。它建立在 NumPy 和 SciPy 之上,这两个库是用于科学计算的最流行的 ML 库。
Scikit-learn 库的唯一问题是它无法为针对大规模生产环境应用的分布式计算提供良好的支持。希望在即将发布的流行 ML 库中能够修复此问题。
亮点
- 它还可以用于数据分析和数据挖掘。
- 具有广泛的监督和无监督学习算法。
- 社区支持如雨后春笋般涌现。
- 除了模型处理和预处理之外,ML 库还可以处理以下功能:
- 分类
- 聚类
- 降维
- 回归
结论
无论开发人员从事何种编程语言或领域,学习使用库都很重要。这样做有助于简化事情并减少繁琐的工作。