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)或特征选择等降维技术来减少要考虑的随机变量的个数,其主要应⽤场景包括可视化处理和效率提升。
modify command模型选择是指对于给定参数和模型的⽐较、验证和选择,其主要⽬的是通过参数调整来提升精度。⽬前Scikit-learn实现的模块包括:格点搜索,交叉验证和各种针对预测误差评估的度量函数。
数据预处理是指数据的特征提取和归⼀化,是机器学习过程中的第⼀个也是最重要的⼀个环节。这⾥归⼀化是指将输⼊数据转换为具有零均值和单位权⽅差的新变量,但因为⼤多数时候都做不到精确等于零,因此会设置⼀个可接受的范围,⼀般都要求落在0-1之间。⽽特征提取是指将⽂本或图像数据转换为可⽤于机器学习的数字变量。
需要特别注意的是,这⾥的特征提取与上⽂在数据降维中提到的特征选择⾮常不同。特征选择是指通过去除不变、协变或其他统计上不重要的特征量来改进机器学习的⼀种⽅法。
总结来说,Scikit-learn实现了⼀整套⽤于数据降维,模型选择,特征提取和归⼀化的完整算法/模块,虽然缺少按步骤操作的参考教程,但Scikit-learn针对每个算法和模块都提供了丰富的参考样例和详细的说明⽂档。
安装和运⾏Scikit-learn
假定已经完整安装了所有⽀持包,那么利⽤安装Scikit-learn只需要简单的⼀条简单的pip命令(也可以⽤conda命令,详见官⽅⽂档):
$ sudo pip install -U scikit-learn
这⾥加上sudo是为了避免安装过程中出现⼀些权限问题,如果⽤户已经确保了管理员权限也可以省略。
原作者在这⾥表⽰,Scikit-learn是他测试过的最简单易⽤的机器学习框架。他表⽰,Scikit-learn样例的运⾏结果和⽂档描述⼀模⼀
样,API接⼝的设计合理且⼀致性⾼,⽽且⼏乎不存在“阻抗不匹配”的数据结构,使⽤这种功能完善且⼏乎没有Bug的开源框架进⾏机器学习研究,⽆疑是⼀件值得⾼兴的事。
更深⼊地学习Scikit-learn
cpsr和spsr的中文名称如前所述,Scikit-learn针对每个算法和模块都提供了丰富的参考样例和详细的说明⽂档,据官⽅的统计⼤约有200多个。⽽且为了清晰明⽩,绝⼤多数样例都⾄少给出了⼀张由Matplotlib绘制的数据图表。这些都是官⽅提供的学习Scikit-learn框架最直接有效的学习材料。
针对科学数据处理的应⽤场景,官⽅还给出了⼀个更为详细和全⾯的参考教程:,其中包括统计学习、监督学习、模型选择和⽆监督学习等若⼲部分,内容覆盖全⾯,讲解细致,并且使⽤了真实的数据、代码和图表。
vb编程设计例题100例 视频另外,教程中还调⽤了与⽂本相关的样例,例如下图所⽰的四个不同SVM分类器的⽐较。
delete语句判断为空这⾥需要指出的是,虽然运⾏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消除了⼤部分的性能瓶颈。python入门教程 非常详细 pdf
应该明确的⼀点是:虽然概括地说Scikit-learn并不适合深度学习问题,但对于某些特殊场景⽽⾔,使⽤Scikit-learn仍然是明智的选择。例如要创建连接不同对象的预测函数时,或者在未标记的数据集中为了训练模型对不同的对象进⾏分类时,⾯对这些场景Scikit-learn只通过普通的旧机器学习模型就能很好地解决,⽽并不需要建⽴数⼗层的复杂神经⽹络。
就好像喜欢Scala语⾔的⼈会选择Spark ML,喜欢绘制图表和偶尔编写少量Python/R语⾔代码的⼈会
选择微软Cortana和Azure⼀样,对于那些Python语⾔的死忠粉⽽⾔,Scikit-learn可能是各种机器学习库中的最好选择。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。