scikit-learn:不用学习机器的机器学习外文翻译资料

 2022-04-04 22:08:12

英语原文共 5 页,剩余内容已隐藏,支付完成后下载完整资料


scikit-learn:不用学习机器的机器学习

机器学习是统计学和计算机科学交叉的延伸发展。 虽然对许多数据相关的应用很有利,但是研究文献的技术性质和相应的算法阻碍了它的应用。 Scikit-learn是一个旨在制造机器的开源软件项目所有人都可以学习,无论是在学术界还是在工业界。 它受益于通用Python

语言,这在科学界广泛采用,并得到蓬勃发展的生态系统的支持贡献者。 在这里,我们简要介绍scikit-learn以及机器学习基础知识。

一个跨社区的软件项目

项目愿景

Scikit-learn的诞生源自大多数标准机器学习算法无法满足的那些最能从中受益的用户:研究人员 - 生物学家,气候科学家,实验物理学家 - 或者Web服务或域的开发人员应用。 在科学领域,这些算法的实现主要由研究人员网页上的零散代码组成。 统一的努力可以在统计特定的环境和库中找到,例如R语言[16],Weka Java工具包[7]或Shogun C 库[18]。 其中,R是一种自定义语言,而Weka是一个具有自定义GUI的Java库,而Shogun是一个相当技术的C 代码库。 在scikit-learning中,我们选择了Python来接触许多用户,不管是否技术上,都将机器学习融入了一种通用语言,它适用于简单的交互式编程[15],复杂的脚本以及全面的应用程序。

Scikit-learn旨在通过提供一个库,而不是一个环境,在通用目的编程语言中依靠领域不可知的数据结构来弥补机器学习研究和应用程序之间的差距[14]。 重点放在质量和易用性上,这意味着关注安装问题,文档和API设计[4]。 为了使项目在实际环境中可用,计算性能也是重中之重。

Python数据生态系统

机器学习只是数据分析管道的一小部分,而scikit-learn很好地融入了丰富的Python生态系统。 这些包括强大的科学和数字工具[12,6],也广泛支持文本处理,Web服务,密码学和可视化。 为了满足数值需求,scikit-learn利用NumPy数组[20](用于高效数值计算的数据结构),SciPy(经典数值算法的集合),matplotlib [9](用于科学绘图的软件包)和Cython(一种编程语言 以类似Python的语法生成编译代码[1])。 大量的Python包可以帮助用户输入或预处理数据,特别是Pandas用于柱状数据[11],scikit-image用于图像,NLTK用于文本。 最后,IPython环境[15]对于交互式工作是非常宝贵的。

图一 工资与工作经验与受教育年数的函数关系,数据来自[2]

图二 利用工作和受教育年数,使用随机森林进行工资预测

图三 利用工作和受教育年数,使用支持向量机进行工资预测

一些历史

Scikit学习始于2007年,David Cournapeau和Matthieu Brucher的博士学位的代码,但直到2010年,在INRIA的Parietal团队通过了这个项目,聘请了一名全职工程师。 该团队定义了基本的API,并且他们开发的LibSVM [5]的高效绑定为该项目带来了极具吸引力的优势。 2011年12月,第一次国际冲刺活动由谷歌慷慨资助举办。 今天,该项目已经超越INRIA,成为全球开源项目,与200多名贡献者进行了大量的合作。

一段机器学习的简短介绍

机器学习是关于从数据中提取规则的,通常以对新数据做出决定为目标[8]。 作为一个简单的例子,我们在图1中显示了关于美国工资的数据[2]:包括工资,受教育年限和工作经验的11个特征描述了534个个体,称为机器学习术语中的样本。

这个例子展示了机器学习中的许多典型困难。样本是不规则分布的,因为大多数人在高中毕业后完成了研究。因此,二维教育与工作经验之间存在巨大差距,统计声明需要外推。数据非常嘈杂:对于给定的一对教育和工作经验值,工资差异很大。这种变化可能是由缺失因素(如活动部门)所解释的,但将它们添加到分析中可以创建更复杂的3D图像或更多图像,而不是2D,而且还有更多空白。

在图2中,我们使用流行的机器学习算法 - 随机森林来预测教育年份的工资,或者工作经验的年限,或者作为单独的特征,或者结合起来。预测的斑点状方形是由于算法的运作,并说明了相应的外推机制。这些预测很好地符合数据,可能太好了:仅仅根据教育年数(图中左侧)的预测,很难相信五年时间会出现颠簸。这种颠簸可能是一种过度拟合的情况:该算法正在从数据中的噪声中学习它的预测。因此,新数据的预测误差将与训练数据上的预测误差显着不同(通常更高,因此更差)。

在图3中,我们使用另一种流行的机器学习算法,即线性支持向量机(SVM)。 与随机森林不同,它利用线性函数来学习决策。 据说它具有较低的模型复杂性,因为从数据中学习的参数数量要小得多。 这里的风险是不适合的:算法可能无法充分利用数据的丰富性,这可能不符合线性规律。 机器学习的艺术在于选择合适的算法/模型族来很好地描述数据并找到底层和过度装备之间的最佳位置。 随着描述数据的特征数量增加,要学习的参数数量也会增加,因此过度拟合的风险会增加。 这个核心难题被称为维度的诅咒.

使用scikit-learn学习

设置模型

scikit-learn中的学习算法体现在估计器中,用控制学习的参数实例化对象。训练数据传递给fit方法,该方法接受一个(ntimes;p)数据矩阵X,表示为NumPy数组或SciPy稀疏矩阵,其中n是样本数,p是要素数。当有数量或类别标签要预测时,第二个参数y(通常是1Dntimes;1数组)包含X中行的所需结果。对于这样的回归任务作为工资预测,它们是实值的,而在分类中,它们是整数或字符串,用作每个样本所属类别的标签。 因为数据很少到达现实世界中的这种格式,scikit-learn带有灵活的特征提取代码,以使数据适合人员使用。

监督模型

学习预测。监督模型的目标是预测一些感兴趣的价值。相应的估计量具有预测方法,该方法采用数据矩阵X并返回预测的y。模型的性能测量 它正确预测新数据的能力。由于过度拟合,用于学习的训练数据一般不应用于评估模型性能,因为它可能导致对模型的真实预测误差过于乐观的估计。相反,获得无偏估计的正确方法是省去测试数据,在训练期间不触摸,仅用于模型评估。或者,也可以使用交叉验证方案,其中数据被重复分成火车和测试子集。 Scikit-learn为交叉验证提供集成支持,作为定义列车和测试子集的特定迭代器。几个函数和对象接受这些迭代器作为参数在内部执行交叉验证。例如,cross_val_score函数测量估计量的预测分数。交叉验证还可以用来调整估计器的元参数,例如稀疏模型的稀疏性。为此,特定元估计器(如GridSearchCV)在构建时采用另一个估计器,并在内部使用交叉验证来设置其参数。当与cross_val_score一起使用时,它们执行嵌套交叉验证,即元参数独立于测试数据设置。

无监督模式:学习转换

无监督学习涵盖了所有没有明确识别变量进行预测的学习应用。例如,在一个聚类应用程序中,任务是将相似的观察组合在一起。维数减少试图找到捕获良好的简化表示数据的属性。新颖性检测在新数据集中发现与火车集合中的数据不同的观察结果。由于无监督学习的用途非常多样化,因此不可能将API与监督式学习统一起来。虽然一些无监督估计器可以用来预测新数据的特性,例如在新颖性检测中,但许多数据对于数据转换都很有用,如降维。 Scikit学习估计器可以有一个变换方法,用于此目的。然后,管道估计器可以链估计器形成一个新的估计器,在调用最后一个对象的拟合或预测方法之前应用变换.

在实践中:使scikit-learn工作

一个简单的文本挖掘示例

并非每个数据集都以一组数字形式出现。对于实例在自然语言处理(NLP)中,观测值是字符串,需要将其转化为估计者期望的数据矩阵。通常,用于构建决策的特征表明某些单词或其频率的存在。在垃圾邮件过滤中,从文档中提取它包含术语“赌场”可能非常相关。在其他NLP问题中,例如找到专有名称,诸如“下一个令牌是罗马数字”之类的事件可能是相关的,因为在“JP Kennedy III“。重用变换API,scikit-learn提供了特征提取对象,将这些非结构化数据转换为数据矩阵。在这些情况下,X矩阵是计数统计的矩阵。由于每个单词通常仅存在于少数文档中,因此数据矩阵将大部分为零。 SciPy提供了一个稀疏矩阵对象,它隐式地在这些矩阵中存储零点,许多scikit-learn估计器可以使用这个对象来提高可伸缩性。在图4中,我们给出了一个功能完备的代码,用于对电影评论进行情感极性分类:给出评论后,它会输出该评论对于它所关注的电影是否是积极的。 该代码演示了管道的使用,还展示了机器学习如何与其他Python模块结合:从数据集中下载,解包和学习都是用一种编程语言完成的。 该脚本首先获取一个手动标记的电影评论数据集[13],并使用标准Python库将其解包到磁盘。 然后,它使用scikit-learn数据加载函数加载这些函数,制作一个tf-idf特征提取器[17](将字符串转换为基于词频的稀疏矩阵)和逻辑回归的流水线,最后对模型进行训练。 特征提取器和分类器的元参数是手动设置的。 我们可以在两个新的电影评论上测试我们的分类器.

在这里,我们要求估算人员预测评论是否是正面的。 第一个评论被预测为负面(0),而第二个评论是正面(1)。 我们有轶事证据表明分类器是有效的。 为了得到分类器准确度的衡量标准,我们重新进行交叉验证。 该方案在三个不同的折叠中产生正确答案的一小部分:

我们看到预期的准确率大约为88%。 使用不同的分类模型很容易:例如,用svm.LinearSVC替换LogisticRegression给出了一个线性支持向量机。

大数据?

大数据是数据分析的主要趋势:应用机器学习大数据集可以产生有用的新洞察。虽然scikit-learn在“中等数据”范围内效率最高,但使用共享内存多处理器而不是集群,它具有处理不适合任何单个机器的数据集的功能。

图四.下载电影评论和学习积极与消极评级的简单的文本处理代码

考虑到(ntimes;p)数据矩阵,我们可以区分大量样本n和大量特征p的情况。对于大型案例,scikit-learn的选项包括随机投影,这可以减少数据维度,同时保留大部分几何结构。对于大n情况,一些估计者会公开一个在线学习的partial_fit方法。用户不需要将所有数据加载到一个巨大的矩阵中,而是可以给数据的估计块提供数据,并且该算法在经过数据集几次之后找到其目标的良好近似值。在大量文本集合中,这两个挑战:随着样本量n的增加,维度会增加,因为大集合中所用的不同单词的数量更大[10,88-89]。除了前面概述的标准矢量化方法所创建的数据矩阵的大小之外,另一个挑战是矢量化必须在文档上进行两遍,因为输出矢量的大小并未预先知道。

功能哈希可以用来解决这两个挑战,并产生一个流媒体矢量化器,在scikit-learn中的HashingVectorizer。单词通过(无状态)散列函数运行,而不是查找表,将单词映射到索引。碰撞可能发生,但哈希算法[21]是专门设计来减轻它们的影响。输出向量的维度可以由用户设置;越大,越不可能会发生碰撞。在20个新闻组上进行在线学习的完整示例,图5给出了corpus2(这个语料库的下载器带有scikit-learn)。

培育一个开源项目

scikit-learn项目的最大资产是其广泛的贡献者,来自不同背景,在不同机构工作,有多种应用程序:去年共有超过200个贡献者,15个活跃核心贡献者。事实上,不仅数量上有优势,而且观点的融合使得更好的代码和更好的设计成为了可能。从开发人员的角度来看,该项目的管理目标是使新移民能够做出贡献,同时还保持着高质量。我们的开发工作流程依赖于密集的代码审查,由在线版本控制环境GitHub(http://github.com)提供支持。从所有观点来看,代码评审过程是提高代码质量的重要资产:算法,数值稳健性,API的同质性,易用性和文档。保持项目质量的另一个核心工具是使用单元测试(涵盖大约88%的代码行)。所有可能的代码贡献都会使用Travis(http://travis-ci.org)自动进行测试。开源社区驱动模型在scikit-learn中产生了一个有用的高质量工件。然而,我们发现这个模型并不适合标准的职业激励结构,无论是学术界还是行业。事实上,对于“正常工作”的基层免费软件获得应有的荣誉是极为困难的。迄今为止,核心捐助者提交的用于资助发展的赠款提案都没有被接受,也没有直接的收入模式。更具挑战性的是正确回报小型捐助者的长尾营销。确定范围和优先事项是一个关键挑战。由于scikit-learn的目的是提供经过验证的,主要是转向关键的预测工具,因此我们必须在支持强大技术和利用我们有限的项目周期的成熟技术之间走好路。 Scikit-learn已经成为一个参考机器学习工具包。因此,它应该提供各种各样的学习算法。但是,每个新功能都会带来维护成本。不受控制的增长将导致该项目的体重增加,直到它爬行。一方面,scikit-learn已经以高标准质量开发。我们努力确定并整合对预测任务有用的所有主要方法。我们喜欢经过时间考验的算法,并在选择默认参数时非常谨慎。我们

全文共6120字,剩余内容已隐藏,支付完成后下载完整资料


资料编号:[14600],资料为PDF文档或Word文档,PDF文档可免费转换为Word

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

发小红书推广免费获取该资料资格。点击链接进入获取推广文案即可: Ai一键组稿 | 降AI率 | 降重复率 | 论文一键排版