sklearn(scikit-learn)是什么

如果能基于“自己动手,丰衣足食”的原则,自行实现机器学习的各种经典算法,固然是好的,且好处很明显:能让自己对机器学习算法的细节了然于胸。

但即使我们使用了简单而高效的 Python 来编写代码,实现起来,代码量依然不容小觑。何况我们写的代码可能并不专业,对很多意外情况可能考虑不足(如数值计算不够稳定等),算法的性能难以保证。

这时,我们可能会有这样的需求:是否有成熟的机器学习框架,能让我们更加关注算法的业务逻辑,而不必事无巨细地“重造轮子”呢?比如,求方差、求均方根误差这类通用函数可否不必自己编写?

《荀子·劝学》中有一句名言:君子生非异也,善假于物也。意思是说,君子的资质与一般人没有什么区别,君子之所以高人一等,是因为他善于利用外物。因此,善于利用已有条件,是成为君子的一个重要途径。

上面的断言,对于机器学习而言同样适用。只有分工,才能专业。它山之石,可以攻玉。善于利用第三方工具,提高自己的开发效率,或许也是算法工程师的必备技能之一。

事实上,对于一些经典的机器学习算法,一些专家或工程达人们早已将其实现。大概率上,由他们实现的算法,在各种条件下的完备性及数值计算的稳定性都要远胜我们自己实现的算法。在机器学习领域,scikit-learn(以下简称 sklearn)就是由专业人士开发的、久经考验的机器学习框架,其标识如图 1 所示。

scikit-learn的标识

图 1:scikit-learn 的标识

sklearn简介

2007年,数据科学家大卫·库尔纳佩(David Cournapeau)等人发起了机器学习的开源项目 sklearn,至今已逾十载。到目前为止,它已成为一款非常成熟的知名机器学习框架。

sklearn 是一款开源的 Python 机器学习库,它基于 NumPy 和 SciPy,提供了大量用于数据挖掘和分析的工具,以及支持多种算法的一系列接口。和其他开源项目类似,sklearn 也是由社区成员自发组织和维护的。与其他开源项目不同的是,sklearn 更显“保守”。但这里的“保守”并非贬义,而是意味着“可靠”。

sklearn 的可靠性主要体现在两个方面:sklearn 非常专一,从不做机器学习领域之外的扩展;sklearn 非常务实,从不轻易支持未经广泛验证的机器学习算法。比如,当下比较火热的“深度学习”,愣是不在它法眼之内,它想“让子弹飞一会”。一定程度上的“保守”并非坏事,这会使 sklearn 因专注而更加专业。

作为一款“成熟稳重”的机器学习框架,sklearn 提供了很多好用的 API(Application Programming Interface,应用程序接口)。通常,我们使用寥寥几行代码,就可以很好地完成机器学习的 7 个流程,具体如下。

1) 数据处理

从磁盘中读取数据,并对数据进行预处理,如归一化、标准化、正则化、属性缩放、特征编码、插补缺失值、生成多项式特征等。

2) 分割数据

将数据随机分割成三组:训练集、验证集(有时为可选项)、测试集。

3) 训练模型

针对选取好的特征,使用训练数据来构建模型,即拟合数据,寻找最优的模型参数。这里的拟合数据,主要是指使用各种机器学习算法来学习数据中的特征,拟合出损失函数最小化参数。

4) 验证模型

使用验证集的数据接入模型。我们将模型在验证集上的表现作为模型参数优化和选择的依据。常用的方法有 Holdout 验证、留一验证(leave-one-out cross-validation)等。

5) 测试模型

在优化模型的参数以后,使用测试数据验证模型的表现,可以评估模型的泛化性能。

这里需要展开说明的是,在有些场景下,测试模型和验证模型是有区别的。如果我们不设置验证集,而不断地使用相同的测试集来评估模型性能,久而久之,作为“裁判”的测试集,其角色慢慢就会“蜕变”成训练集,从而让模型陷入过拟合状态。

为了解决这个问题,有时就把数据集一分为三:一部分用于训练,即作为训练集;一部分用于模型优化,即作为验证集;最后一部分用来评估模型的泛化误差,即作为测试集,通常不参与模型的优化。

6) 使用模型

正所谓“养兵千日,用兵一时”。模型训练完毕后,就该“上战场”了,在全新数据集上进行预测。所有机器学习算法的终极价值,都体现在对新数据的预测上。过往的历史数据(即训练数据)的价值,就在于“喂养”出一个靠谱的数据预言家,对我们从未接触过的新数据做出预测,从而指导我们未来的行为方向,实现基于数据的“洞察”。

7) 调优模型

当我们不断使用更多的数据(包括预测的新数据)时,就会得到反馈,然后根据反馈重新调整数据使用策略,包括收集更为全面的数据、使用不同的特征、调整过往模型参数等,以此来迭代优化模型。实际上,以上 1~7 可以算作一个无限循环、迭代升级的过程。

https://docs.qq.com/pdf/DR1doYmNBYUZ3RVNX

你可以思考一下,为何诸如今日头条、京东、淘宝等应用会不断地迭代升级,不光是为了软件缺陷的修复,App 界面的优化,更多的可能还是对深嵌其内的模型算法进行迭代升级。

sklearn的功能

sklearn 的功能主要分为六大部分:分类、回归、聚类、数据降维、模型选择和数据预处理。

简单来说,如果定性输出预测(预测变量是离散值),可称之为分类(classification),比如预测花的品类、顾客是否购买商品等。sklearn 中已实现的经典分类算法包括:支持向量机(SVM)、最近邻算法、Logisti c回归、随机森林、决策树,以及多层感知器(Multilayer Perceptron,MLP)等。

相比而言,如果定量输出预测(预测变量是连续值),则称之为回归(regression),比如预测花的长势、房价的涨势等。目前 sklearn 中已经实现的回归算法包括:线性回归、支持向量回归(SVR)、岭回归、Lasso 回归、贝叶斯回归等。常见的应用场景有股价预测等。

聚类(clustering)的功能是将相似的对象自动分组。sklearn 中常用的聚类算法包括:k 均值聚类、谱聚类(spectral clustering)、均值漂移(Mean shift)等。常见的应用场景有客户细分、实验结果分组及数据压缩等。

数据降维(dimension reduction)的目的在于,减少要考虑的随机变量的数量。sklearn中常见的数据降维算法有主成分分析(Principal Components Analysis,PCA)、特征选择(feature selection)、非负矩阵分解(non-negative matrix factorization)等。常见的应用场景包括数据压缩、模型优化等。

模型选择是指评估与验证模型,对模型参数进行选择与平衡。sklearn 提供了很多有用的模块,可实现许多常见功能,包括模型度量(metrics)、网格搜索(grid search)、交叉验证(cross validation)等。其目的在于,通过调整模型参数来提高模型性能(预测准确度、泛化误差等)。

数据预处理的功能在于,把输入数据(如文本、图形图像等)转换为机器学习算法适用的数据,主要包括数据特征的提取和归一化。在 sklearn 中,常用的模块有数据预处理(preprocessing)、特征抽取(feature extraction)等。

sklearn 不仅功能强大,而且官方文档还很齐全,它针对每种算法都提供了简明扼要的参考用例,实在是机器学习爱好者应该常去的“游览胜地”。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容