Python机器学习软件



如今,有大量用于创建机器学习模型的软件工具。 第一个这样的工具是在科学家和统计学家之间形成的,尽管有某些Java,Lua和C ++机器学习库,但R和Python是流行的,历史悠久的生态系统,用于处理,分析和可视化这些语言的数据。 而且,解释型编程语言比编译型语言要慢得多,因此,数据的准备和模型的结构是用解释型语言描述的,而主要的计算是用编译后的语言进行的。

在本文中,我们将主要讨论在Python中实现的库,因为该语言具有大量用于集成到各种服务和系统以及编写各种信息系统的软件包。 该材料包含对知名库的一般描述,并且主要对那些开始研究ML领域并希望大致了解在哪里寻找某些方法的实现的人有用。

选择特定的解决方案包时,首先要确定的是它们是否具有解决问题的机制。 因此,例如,对于图像分析,最有可能的情况是,您将不得不处理神经网络,而对于文本处理(使用循环网络,少量数据),则可能必须放弃神经网络。

Python通用库


本节中描述的所有软件包都以某种方式用于解决几乎所有的机器学习任务。 通常,至少在一次近似中,它们足以构建整个模型。

脾气暴躁的


一个用于执行线性代数运算和数值转换的开源库。 通常,此类操作对于转换可以表示为矩阵的数据集是必需的。 该库已实现了大量用于处理多维数组,傅立叶变换和随机数生成器的操作。 numpy存储格式是在许多其他库(例如Pandas,Scikit-learn,SciPy)中存储数字数据的事实上的标准。

网址www.numpy.org

大熊猫


用于数据处理的库。 借助其帮助,您几乎可以从任何来源下载数据(与用于机器学习的主要数据存储格式集成),计算各种函数和创建新参数,使用类似于SQL的聚合函数来构建数据查询。 另外,存在多种矩阵变换函数,滑动窗口方法以及用于从数据获得信息的其他方法。

网址pandas.pydata.org

Scikit学习


拥有十多年历史的软件库包含几乎所有可能的转换的实现,通常仅一个软件就足以完全实现模型。 通常,在Python中几乎对任何模型进行编程时,总是存在使用此库进行的某些转换。
Scikit学习包含用于将数据集分为测试和训练,计算数据集上的基本指标以及进行交叉验证的方法。 该库还具有机器学习的基本算法:线性回归(及其对Lasso的修改,山脊回归),支持向量,决策树和森林等。也有主要聚类方法的实现。 此外,该库包含研究人员经常使用的用于处理参数(特征)的方法:例如,使用主成分方法降低尺寸。 imblearn库是软件包的一部分,使您可以处理不平衡的样本并生成新值。

网址www.scikit-learn.org

西皮


相当庞大的图书馆专门为研究而设计。 它包括来自数学分析的大量功能,包括积分计算,最大和最小值搜索,信号和图像处理功能。 在许多方面,对于使用Python语言的开发人员来说,该库都可以视为MATLAB软件包的类似物。 借助它的帮助,您可以求解方程式系统,使用遗传算法并执行许多优化任务。

网址www.scipy.org

特定的图书馆


在本节中,将考虑具有特定应用领域或在有限数量的用户中流行的库。

张量流


由Google开发的用于处理张量的库用于构建神经网络。 对图形卡的计算支持具有C ++语言版本。 基于此库,可以构建更高级的库,以便在整个层级上使用神经网络。 因此,不久前,流行的Keras库开始使用Tensorflow作为计算的主要后端,而不是类似的Theano库。 cuDNN库用于在NVIDIA图形卡上工作。 如果使用图片(使用卷积神经网络),则很可能必须使用此库。

网址www.tensorflow.org

凯拉斯


一个用于构建神经网络的库,该库支持图层和结构元素的主要类型。 它支持循环神经网络和卷积神经网络,并结合了著名的神经网络体系结构(例如VGG16)的实现。 不久前,该库中的图层在Tensorflow库中可用。 提供了用于处理图像和文本(嵌入的单词等)的现成功能。 使用dist-keras发行版集成在Apache Spark中。

网址www.keras.io

咖啡


伯克利大学的神经网络训练框架。 与TensorFlow一样,它使用cuDNN与NVIDIA图形卡一起使用。 它包含了更知名的神经网络的实现,这是集成到Apache Spark(CaffeOnSpark)中的第一个框架。

网站cafee.berkeleyvision.org

pyTorch


允许您将Lua语言的Torch库移植到Python语言。 它包含用于处理图像的算法,统计运算和用于神经网络的工具的实现。 另外,您可以为优化算法(特别是随机梯度下降)创建一组工具。

网址www.torch.ch

决策树上的梯度提升实现


这样的算法总是引起人们的关注,因为它们通常显示出比神经网络更好的结果。 如果您没有非常大的数据集(一个非常粗略的估计:成千上万,而不是数千万),则尤其如此。 在kaggle竞争平台上的获胜模型中,决策树上的梯度提升算法非常普遍。
通常,此类算法的实现是在基础广泛的机器学习库中进行的(例如,在Scikit-learn中)。 但是,此算法有一些特殊的实现,通常可以在各种比赛的获胜者中找到。 值得强调以下内容。

Xgboost


梯度增强的最常见实现。 自2014年问世以来,到2016年它已经获得了可观的知名度。 基于直方图分析的排序和模型用于选择分区。

网址github.com/dmlc/xgboost

Lightgbm


Microsoft于2017年发布的Gradient boost选项。基于梯度的一侧采样(GOSS)用于选择分区标准。 有一些使用分类属性的方法,即 带有未用数字明确表示的符号(例如,作者的姓名或汽车品牌)。 它是Microsoft DMTK项目的一部分,该项目致力于实施.Net的机器学习方法。

网址www.dmtk.io

Catboost


Yandex的开发与LightGBM一样,于2017年发布,它采用了一种特殊的方法来处理分类特征(基于目标编码,即基于预测值的统计数据替换分类特征)。 此外,该算法还包含一种特殊的树构建方法,该方法显示了最佳结果。 我们的比较表明,该算法比直接使用的其他算法效果更好,也就是说, 无需设置任何参数。

网址catboost.yandex

Microsoft认知工具包(CNTK)


Microsoft Corporation的框架具有C ++接口。 提供各种神经网络体系结构的实现。 与.Net可能是有趣的集成。

网站www.microsoft.com/en-us/cognitive-toolkit

其他发展资源


随着机器学习变得越来越流行,已经出现了多个项目来简化开发并通过在线访问将其转化为图形形式。 在该领域中,可以注意到几个。

Azure ML


Microsoft Azure平台上的机器学习服务,您可以在其中以图形形式构建数据处理并在远程服务器上执行计算,并能够包含Python代码和其他代码。

网站:azure.microsoft.com/ru-ru/services/machine-learning-studio

IBM DataScience经验(IBM DSX)


一种在Jupyter Notebook环境中工作的服务,能够在Python和其他程序中执行计算。 支持与知名数据集和IBM Watson项目Spark的集成。

网址ibm.com/cloud/watson-studio

社会科学配套


其中包括IBM社会科学统计软件包(SPSS),这是用于处理社会科学统计数据的IBM软件产品,它支持用于设置数据处理过程的图形界面。 不久前,将机器学习算法嵌入整个执行结构成为可能。 通常,在已经包含统计功能和可视化方法(例如Tableau和SAS)的统计学家软件包中,对机器学习算法的有限支持正变得越来越普遍。

结论


解决任务所基于的软件包的选择通常由以下条件决定。

  1. 使用模型的环境:是否需要Spark支持,需要集成哪些服务。
  2. 数据功能。 数据是什么:图像,文本或一组数字,它们需要什么样的处理?
  3. 模型对此类任务的倾向。 来自图像的数据通常由卷积神经网络处理,并且基于决策树的算法用于小数据集。
  4. 在培训和使用中对计算能力的限制。

通常,在Python中进行开发时,无法避免使用通用库(Pandas,Scikit-learn,numPy)。 这导致它们的接口支持大多数专用库这一事实,但是如果不是这样,则需要了解必须自己编写连接器或选择另一个库。

您可以使用相对较少的库来构建第一个模型,然后必须决定要花些时间:开发参数(功能工程)或选择最佳的库和算法,或并行执行这些任务。

现在介绍一些可供选择的建议。 如果您需要一种开箱即用的最佳算法,那就是Catboost。 如果您打算使用图像,则可以使用Keras和Tensorflow或Caffe。 处理文本时,需要确定是否打算构建神经网络并考虑上下文。 如果是,则与图像相同的愿望,如果一个“单词袋”(每个单词出现的频率特征)足够,则梯度增强算法是合适的。 对于小型数据集,您可以使用算法来从Scikit学习和在同一库中实现的线性方法生成新数据。

通常,所描述的库足以解决大多数问题,甚至可以赢得比赛。 机器学习领域的发展非常迅速-我们确信在撰写本文时已经出现了新的框架。

Jet信息系统机器学习小组负责人Nikolay Knyazev

Source: https://habr.com/ru/post/zh-CN415997/


All Articles