Python粉都应该知道的开源机器学习框架:Scikit-learn入门指南

对Python语言有所了解的科研人员可能都知道SciPy——一个开源的基于Python的科学计算工具包。基于SciPy,目前开发者们针对不同的应用领域已经发展出了为数众多的分支版本,它们被统一称为Scikits,即SciPy工具包的意思。而在这些分支版本中,最有名,也是专门面向机器学习的一个就是Scikit-learn。

Scikit-learn项目最早由数据科学家 David Cournapeau 在 2007 年发起,需要NumPy和SciPy等其他包的支持,是Python语言中专门针对机器学习应用而发展起来的一款开源框架。

和其他众多的开源项目一样,Scikit-learn目前主要由社区成员自发进行维护。可能是由于维护成本的限制,Scikit-learn相比其他项目要显得更为保守。这主要体现在两个方面:一是Scikit-learn从来不做除机器学习领域之外的其他扩展,二是Scikit-learn从来不采用未经广泛验证的算法。

本文将简单介绍Scikit-learn框架的六大功能,安装和运行Scikit-learn的大概步骤,同时为后续各更深入地学习Scikit-learn提供参考。原文来自infoworld网站的特约撰稿人Martin
Heller,他曾在1986-2010年间做过长达20多年的数据库、通用软件和网页开发,具有丰富的开发经验。

Scikit-learn的六大功能

Scikit-learn的基本功能主要被分为六大部分:分类,回归,聚类,数据降维,模型选择和数据预处理。

分类是指识别给定对象的所属类别,属于监督学习的范畴,最常见的应用场景包括垃圾邮件检测和图像识别等。目前Scikit-learn已经实现的算法包括:支持向量机(SVM),最近邻,逻辑回归,随机森林,决策树以及多层感知器(MLP)神经网络等等。

需要指出的是,由于Scikit-learn本身不支持深度学习,也不支持GPU加速,因此这里对于MLP的实现并不适合于处理大规模问题。有相关需求的读者可以查看同样对Python有良好支持的Keras和Theano等框架。

回归是指预测与给定对象相关联的连续值属性,最常见的应用场景包括预测药物反应和预测股票价格等。目前Scikit-learn已经实现的算法包括:支持向量回归(SVR),脊回归,Lasso回归,弹性网络(Elastic
Net),最小角回归(LARS
),贝叶斯回归,以及各种不同的鲁棒回归算法等。可以看到,这里实现的回归算法几乎涵盖了所有开发者的需求范围,而且更重要的是,Scikit-learn还针对每种算法都提供了简单明了的用例参考。

聚类是指自动识别具有相似属性的给定对象,并将其分组为集合,属于无监督学习的范畴,最常见的应用场景包括顾客细分和试验结果分组。目前Scikit-learn已经实现的算法包括:K-均值聚类,谱聚类,均值偏移,分层聚类,DBSCAN聚类等。

数据降维是指使用主成分分析(PCA)、非负矩阵分解(NMF)或特征选择等降维技术来减少要考虑的随机变量的个数,其主要应用场景包括可视化处理和效率提升。

模型选择是指对于给定参数和模型的比较、验证和选择,其主要目的是通过参数调整来提升精度。目前Scikit-learn实现的模块包括:格点搜索,交叉验证和各种针对预测误差评估的度量函数。

数据预处理是指数据的特征提取和归一化,是机器学习过程中的第一个也是最重要的一个环节。这里归一化是指将输入数据转换为具有零均值和单位权方差的新变量,但因为大多数时候都做不到精确等于零,因此会设置一个可接受的范围,一般都要求落在0-1之间。而特征提取是指将文本或图像数据转换为可用于机器学习的数字变量。

需要特别注意的是,这里的特征提取与上文在数据降维中提到的特征选择非常不同。特征选择是指通过去除不变、协变或其他统计上不重要的特征量来改进机器学习的一种方法。

总结来说,Scikit-learn实现了一整套用于数据降维,模型选择,特征提取和归一化的完整算法/模块,虽然缺少按步骤操作的参考教程,但Scikit-learn针对每个算法和模块都提供了丰富的参考样例和详细的说明文档。

安装和运行Scikit-learn

如前所述,Scikit-learn需要NumPy和SciPy等其他包的支持,因此在安装Scikit-learn之前需要提前安装一些支持包,具体列表和教程可以查看Scikit-learn的官方文档: http://scikit-learn.org/stable/install.html,以下仅列出Python、NumPy和SciPy等三个必备包的安装说明。

Python:https://www.python.org/about/gettingstarted/

NumPy:http://www.numpy.org/

SciPy:http://www.scipy.org/install.html

假定已经完整安装了所有支持包,那么利用安装Scikit-learn只需要简单的一条简单的pip命令(也可以用conda命令,详见官方文档):

$ sudo pip install -U scikit-learn

这里加上sudo是为了避免安装过程中出现一些权限问题,如果用户已经确保了管理员权限也可以省略。

当然,开发者也可以选择自己到GitHub开源平台上下载Scikit-learn的源代码,解压后在根目录键入make自行编译和连接可执行文件,效果是一样的。另外,为了确保测试方便,高级用户还可以选择安装针对Python的测试框架nose,安装方法详见其官方说明:
http://nose.readthedocs.io/en/latest/  。

通过Jupyter Notebook工具运行Scikit-learn样例的过程也很简单,用户只需要在官方给出的样例库: http://scikit-learn.org/stable/auto_examples/index.html#general-examples  选择一个样例,然后在页面中下载其Python源码和IPython notebook文件,借着通过Jupyter Notebook工具运行就可以了。假如选择了交叉验证预测的样例,那么其运行情况的截图如下所示。

原作者在这里表示,Scikit-learn是他测试过的最简单易用的机器学习框架。他表示,Scikit-learn样例的运行结果和文档描述一模一样,API接口的设计合理且一致性高,而且几乎不存在“阻抗不匹配”的数据结构,使用这种功能完善且几乎没有Bug的开源框架进行机器学习研究,无疑是一件值得高兴的事。

更深入地学习Scikit-learn

如前所述,Scikit-learn针对每个算法和模块都提供了丰富的参考样例和详细的说明文档,据官方的统计大约有200多个。而且为了清晰明白,绝大多数样例都至少给出了一张由Matplotlib绘制的数据图表。这些都是官方提供的学习Scikit-learn框架最直接有效的学习材料。

针对科学数据处理的应用场景,官方还给出了一个更为详细和全面的参考教程:A tutorial on statistical-learning for scientific data processing,其中包括统计学习、监督学习、模型选择和无监督学习等若干部分,内容覆盖全面,讲解细致,并且使用了真实的数据、代码和图表。

另外,教程中还调用了与文本相关的样例,例如下图所示的四个不同SVM分类器的比较。

这里需要指出的是,虽然运行Scikit-learn官方给出的样例后通常都能得到一致的结果,但大多数情况下系统都会抛出警告信息。作者认为抛出警告信息的原因来自两个方面:一是苹果vecLib框架本身对Scikit-learn支持不好(作者用的是MacOS),二是样例中使用的Python版本可能是早期的版本,而实际运行中是最新的版本。例如下图中是使用Python
2.7.10版本抛出的警告信息,而Scikit-learn官方页面上并没有出现。

总体上来说,作为专门面向机器学习的Python开源框架,Scikit-learn可以在一定范围内为开发者提供非常好的帮助。它内部实现了各种各样成熟的算法,容易安装和使用,样例丰富,而且教程和文档也非常详细。

另一方面,Scikit-learn也有缺点。例如它不支持深度学习和强化学习,这在今天已经是应用非常广泛的技术,例如准确的图像分类和可靠的实时语音识别和语义理解等。此外,它也不支持图模型和序列预测,不支持Python之外的语言,不支持PyPy,也不支持GPU加速。

看到这里可能会有人担心Scikit-learn的性能表现,这里需要指出的是:如果不考虑多层神经网络的相关应用,Scikit-learn的性能表现是非常不错的。究其原因,一方面是因为其内部算法的实现十分高效,另一方面或许可以归功于Cython编译器:通过Cython在Scikit-learn框架内部生成C语言代码的运行方式,Scikit-learn消除了大部分的性能瓶颈。

应该明确的一点是:虽然概括地说Scikit-learn并不适合深度学习问题,但对于某些特殊场景而言,使用Scikit-learn仍然是明智的选择。例如要创建连接不同对象的预测函数时,或者在未标记的数据集中为了训练模型对不同的对象进行分类时,面对这些场景Scikit-learn只通过普通的旧机器学习模型就能很好地解决,而并不需要建立数十层的复杂神经网络。

就好像喜欢Scala语言的人会选择Spark ML,喜欢绘制图表和偶尔编写少量Python/R语言代码的人会选择微软Cortana和Azure一样,对于那些Python语言的死忠粉而言,Scikit-learn可能是各种机器学习库中的最好选择。

本文作者:恒亮

本文转自雷锋网禁止二次转载,原文链接

雷锋网雷锋

时间: 2024-10-06 13:08:04

Python粉都应该知道的开源机器学习框架:Scikit-learn入门指南的相关文章

最牛逼的开源机器学习框架,你知道几个

文章讲的是最牛逼的开源机器学习框架,你知道几个,机器学习毫无疑问是当今最热的话题,它已经渗透到生活的方方面面,在移动互联网中混不懂点机器学习都不好意思,说几个能看的到的,经常用邮箱吧,是不是感觉垃圾邮件比N年前变少了,无聊了和siri聊过天不,想坐一下无人驾驶汽车吗,手累了用脸解个锁,智能化产品推荐是不是让你更懒了.看不到的就更多了:信用卡欺诈监测保证你的交易安全,股票交易/量化投资(知道你的高收益理财怎么来的吗?),手势识别(用过海豚浏览器的手势吗),还有医学分析等等,巨头们为了在未来占领先机

28款GitHub最流行的开源机器学习项目(二):TensorFlow排榜首

推荐:28款GitHub最流行的开源机器学习项目(一):TensorFlow排榜首 15. XGBoost XGBoot是设计为高效.灵活.可移植的优化分布式梯度 Boosting库.它实现了 Gradient Boosting 框架下的机器学习算法.XGBoost通过提供并行树Boosting(也被称为GBDT.GBM),以一种快速且准确的方式解决了许多数据科学问题.相同的代码可以运行在大型分布式环境如Hadoop.SGE.MP上.它类似于梯度上升框架,但是更加高效.它兼具线性模型求解器和树学

13个最流行机器学习框架 帮你解决网络安全机器学习的困难问题

在过去的一年中, 机器学习 发展得热火朝天,已成为主流.机器学习的"空降"并非仅仅由廉价的云环境以及 日益强大的GPU硬件驱动 ,同时也受到了开源框架的蓬勃发展的影响.这些开源框架用于提取机器学习中最困难部分,使机器学习可供广泛开发者使用. 用机器学习解决网络安全问题 开源机器学习框架能助力 < 你的机器学习到底解决了什么? >一文中指出 没有什么机器学习厂商,只有应用机器学习解决特定问题的厂商,因为它本身无法独立解决任何问题,只是解决特定问题的手段,至少应该用于事件响应.

28款GitHub最流行的开源机器学习项目(一):TensorFlow排榜首

1. TensorFlow TensorFlow 是谷歌发布的第二代机器学习系统.据谷歌宣称,在部分基准测试中,TensorFlow的处理速度比第一代的DistBelief加快了2倍之多. 具体的讲,TensorFlow是一个利用数据流图(Data Flow Graphs)进行数值计算的开源软件库:图中的节点( Nodes)代表数学运算操作,同时图中的边(Edges)表示节点之间相互流通的多维数组,即张量(Tensors).这种灵活的架构可以让使用者在多样化的将计算部署在台式机.服务器或者移动设

安卓应用豆瓣都采用了哪些开源框架?

问题描述 安卓应用豆瓣都采用了哪些开源框架? 目前我能查到的有OkVolley.picasso.okhttp.butterknife这些小型开源组建. 还有没有一些其他的?尤其是它的设计风格,是不是也采用了某些框架,我看到有好多个应用都是类似的(就比如刷新的时候那个转转的东西很多其他应用也有)风格.

摩根大通机器学习与金融大数据指南——未来的华尔街大亨|大数据+机器学习+金融工程师

更多深度文章,请关注:https://yq.aliyun.com/cloud 金融服务工作流行得快.过时得也快.2001年互联网公司的股权研究风靡一时:2006年,对担保债务凭证(CDOs)有着偏爱:2010年,信贷交易商很受欢迎:2014年,又轮到了合规专家:而在2017年,这是关于机器学习和大数据的时代,如果你能涉足该领域,那么你的未来将会有所保证. 摩根(J.P.Morgan)的定量投资和衍生策略团队发布了关于金融服务领域大数据和机器学习的最全面的报告,报告称,"大数据和人工智能(AI)战

小众精品 | 开发者弹药库升级 推荐五个机器学习框架

你可能没听过它们,但今天或许会考虑上手.至于那些不同生态.不同编程语言的工具--对于高手而言,即便没有使用需求,借鉴它们的代码执行也能为自己的产品开发带来许多灵感. 雷锋网提醒:顺序与重要性无关. 1. Scikit-plot 一帮缺乏艺术细胞的数据科学家,在某年某月某天突然心怀恐惧地意识到:可视化是数据科学最关键的东西之一,而不仅仅是一个加分项. 这就导致了 Scikit-plot 的诞生. KDnuggests 副主编 Matthew Mayo 表示: "我注意到 Scikit-plot,是

4款开源云计算框架和工具简介

本文讲的是4款开源云计算框架和工具简介,[IT168 资讯]1.Enomalism (http://www.enomaly.com/) 云计算平台.Enomalism 是一个开放源代码项目,它提供了一个功能类似于 EC2 的云计算框架.Enomalism 基于 Linux,同时支持 Xen 和 Kernel Virtual Machine(KVM).Enomalism 提供了一个基于 TurboGears Web 应用程序框架和 Python 的软件栈. 2.Euclyptus (http://

零距离观察蚂蚁+阿里中的大规模机器学习框架

本文根据蚂蚁金服的资深技术专家周俊在蚂蚁金服&阿里云在线金融技术峰会上<大规模机器学习在蚂蚁+阿里的应用>的分享整理而成.在分享中,周俊详细介绍了阿里巴巴大规模机器学习框架--参数服务器的设计理念以及优化方法,并结合支付宝.阿里妈妈直通车搜索广告等具体场景详解了参数服务器在蚂蚁金服和阿里内的应用:分享最后,他对大规模机器学习的未来发展做了展望. 直播视频:点击此处观看 幻灯片下载:点击进入 以下为整理内容. ---------------------------------------