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

 一个开源机器学习结构新手入门,Scikit-learn的那些事儿(使用scikit-learn构建模型) 开源 机器学习 框架 第1张

对Python言语有所了解的科研人员或许都知道SciPy——一个开源的根据Python的科学核算东西包。根据SciPy,现在开发者们针对不同的运用领域现已开展出了为数很多的分支版别,它们被共同称为Scikits,即SciPy东西包的意思。而在这些分支版别中,最有名,也是专门面向机器学习的一个便是Scikit-learn。

Scikit-learn项目最早由数据科学家 D**id 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指令,详见官方文档):

  1. $sudopipinstall-Uscikit-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构建模型) 开源 机器学习 框架 第2张

原作者在这儿表明,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的那些事儿(使用scikit-learn构建模型) 开源 机器学习 框架 第3张

这儿需求指出的是,尽管运转Scikit-learn官方给出的样例后一般都能得到共同的成果,但大多数状况下体系都会抛出正告信息。作者以为抛出正告信息的原因来自两个方面:一是苹果vecLib结构自身对Scikit-learn支撑欠好(作者用的是MacOS),二是样例中运用的Python版别或许是前期的版别,而实践运转中是***的版别。例如下图中是运用Python 2.7.10版别抛出的正告信息,而Scikit-learn官方页面上并没有呈现。

 一个开源机器学习结构新手入门,Scikit-learn的那些事儿(使用scikit-learn构建模型) 开源 机器学习 框架 第4张

总体上来说,作为专门面向机器学习的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或许是各种机器学习库中的***挑选。

转载请说明出处
知优网 » 一个开源机器学习结构新手入门,Scikit-learn的那些事儿(使用scikit-learn构建模型)

发表评论

您需要后才能发表评论