lv

管道模型Pipeline《Python机器学习》之十九

发布时间 2018年09月16日 18:44    编辑:landyliao    来源:陆洪春晓

1.导入

前面有过这样的比方,首要对数据进行缩放,然后手动兼并特征,再运用无监督机器学习来学习特征。因而,大多数机器学习运用不只需求运用单个算法,而且还需求将许多不同的处理进程和机器学习模型链接在一起。接下来将介绍怎样运用Pipeline 类来简化构建改换和模型链的进程,将要点介绍怎样将Pipeline 和GridSearchCV 结合起来,然后一起查找一切处理进程中的参数。

举一个比方来阐明模型链的重要性。咱们知道,能够经过运用MinMaxScaler 进行预处理来大大提高核SVM 在cancer 数据集上的功能。下面这些代码完成了区分数据、核算最小值和最大值、缩放数据与练习SVM:

上面的代码第11行,是在x_train数据中找到最大值、最小值,然后用它别离缩放练习集和测验集,如第13、15行所示。这是所要求的正确的做法。

现看下面的比方:练习集和验证集却没有遵从这个要求。

!!! 问题所在 : 穿插验证的数据集是已经在外面进行缩放处理的练习集,在穿插验证内部将其格外 练习集和验证集如图 6-1所示。

谨记一条准则:先区分数据集,再进行缩放处理或其它预处理。

那么,在穿插验证内部,怎样做到呢?

在scikit-learn 中,要想运用cross_val_score 函数和GridSearchCV 函数完成这一点,能够运用Pipeline 类。Pipeline 类能够将多个处理进程兼并(glue)为单个scikit-learn 估量器。Pipeline 类自身具有fit、predict 和score 办法,其行为与scikit-learn 中的其他模型相同。Pipeline 类最常见的用例是将预处理进程(比方数据缩放)与一个监督模型(比方分类器)链接在一起。2.构建管道的办法

咱们来看一下怎样运用Pipeline 类来表明在运用MinMaxScaler 缩放数据之后再练习一个SVM 的作业流程(对应本文最初的第一个比方)。首要,咱们构建一个由进程列表组成的管道目标。每个进程都是一个元组,其间包含一个称号和一个估量器的实例。

这儿创立了两个进程:第一个叫作"scaler",是MinMaxScaler 的实例;第二个叫作"svm",是SVC 的实例。现在来拟合这个管道,pipe.fit 首要对第一个进程(缩放器)调用fit,然后运用该缩放器对练习数据进行改换,最终用缩放后的数据来拟合SVM。要想在测验数据上进行评价,咱们只需调用pipe.score,代码如下:

在对管道调用score 办法时,首要运用缩放器对测验数据进行改换,然后运用缩放后的测验数据对SVM 调用score 办法。如你所见,这个成果与咱们从本章最初的第一个比方中的代码得到的成果是相同的。运用管道,咱们削减了“预处理+ 分类”进程所需求的代码量。

运用管道的首要长处在于,现在咱们能够在cross_val_score 或GridSearchCV 中运用这个估量器,针对本文最初的第二比方运用管道:3.解决问题:在网络查找中运用管道

咱们界说一个需求查找的参数网格,并运用管道和参数网格构建一个GridSearchCV。不过在指定参数网格时存在一处纤细的改变。咱们需求为每个参数指定它在管道中所属的进程。咱们要调理的两个参数C 和gamma 都是SVC 的参数,归于第二个进程。咱们给这个进程的称号是"svm"。为管道界说参数网格的语法是为每个参数指定进程称号,后边加上__(双下划线),然后是参数称号。因而,要想查找SVC 的C 参数,有必要运用"svm__C" 作为参数网格字典的键,对gamma 参数也是同理:

与本文最初的第二比方中所做的网格查找不同,现在关于穿插验证的每次区分来说,仅运用练习部分对MinMaxScaler 进行拟合。将图6-2 与图6-1 进行比照。

图6-2: 运用管道在穿插验证循环内部进行预处理时的数据运用情况4.简析管道的作业流程

Pipeline 类不光可用于预处理和分类,实践上还能够将恣意数量的估量器衔接在一起。例如,你能够构建一个包含特征提取、特征挑选、缩放和分类的管道,总共有4 个进程。相同,最终一步能够是回归或聚类等。

关于管道中估量器的仅有要求就是,除了最终一步之外的一切进程都需求具有transform办法,这样它们能够生成新的数据表明,以供下一个进程运用。在调用Pipeline.fit 的进程中,管道内部顺次对每个进程调用fit 和transform,其输入是前一个进程中transform 办法的输出。关于管道中的最终一步,则仅调用fit。

疏忽某些细枝末节,其完成办法如下所示。请记住,pipeline.steps 是由元组组成的列表,所以pipeline.steps[0][1] 是第一个估量器,pipeline.steps[1][1] 是第二个估量器,以此类推:

4.1 用make_pipline办法创立管道¶

咱们一般不需求为每一个进程供给用户指定的称号。有一个很便利的函数make_pipeline,能够创立管道并依据每个进程所属的类为其主动命名。make_pipeline 的语法如下所示:

4.2 拜访进程特点

一般来说,想拜访管道中的进程,最简略的办法是经过named_steps 特点,它是一个字典,将进程称号映射为估量器:

4.3 拜访网格查找管道中的特点

运用管道的首要场景就是进行网格查找。一个常见的使命是在网格查找内拜访管道的某些进程。咱们对cancer 数据集上的LogisticRegression 分类器进行网格查找,在将数据传入LogisticRegression 分类器之前,先用Pipeline 和StandardScaler对数据进行缩放。首要,咱们用make_pipeline 函数创立一个管道:

5. 运用举例一:网格查找预处理进程与模型参数

咱们能够运用管道将机器学习作业流程中的一切处理进程封装成一个scikit-learn 估量器。这么做的另一个优点在于,现在咱们能够运用监督使命(比方回归或分类)的输出来调理预处理参数。在运用岭回归之前运用boston 数据集的多项式特征,下面咱们用一个管道来重复这个建模进程,管道包含3 个进程:缩放数据、核算多项式特征与岭回归:

咱们怎样知道挑选几回多项式,或许是否挑选多项式或交互项呢?抱负情况下,咱们期望依据分类成果来挑选degree 参数。咱们能够运用管道查找degree 参数以及Ridge 的alpha参数。为了做到这一点,咱们要界说一个包含这两个参数的param_grid,并用进程称号作为前缀:

从穿插验证的成果中能够看出,运用二次多项式很有用,但三次多项式的作用比一次或二次都要差许多。从找到的最佳参数中也能够看出这一点:

正与咱们调查图6-4 中的网格查找成果所意料的那样,不运用多项式特征得到了显着更差的成果。

一起查找预处理参数与模型参数是一个十分强壮的战略。可是要记住,GridSearchCV 会测验指定参数的一切可能组合。因而,向网格中增加更多参数,需求构建的模型数量将呈指数增加。6.运用举例二:网格查找挑选运用哪个模型

进一步将GridSearchCV 和Pipeline 结合起来:查找管道中正在履行的实践进程。下面是一个比方:在iris 数据集上比较RandomForestClassifier 和SVC。咱们知道,SVC需求对数据进行缩放,运用StandardScaler。RandomForestClassifier 不需求预处理。先界说管道,显式地对进程命名。咱们需求两个进程,一个用于预处理,然后是一个分类器。咱们能够用SVC 和StandardScaler 来将其实例化:

界说需求查找的parameter_grid。咱们期望classifier 是RandomForestClassifier或SVC。因为这两种分类器需求调理不同的参数,而且需求不同的预处理,所以运用查找网格列表。为了将一个估量器分配给一个进程,运用进程称号作为参数称号。假如咱们想越过管道中的某个进程(例如,RandomForest 不需求预处理),则能够将该进程设置为None:

网格查找的成果是SVC 与StandardScaler 预处理,在C=10 和gamma=0.01 时给出最佳成果。7.小结

Pipeline 类是一种通用东西,能够将机器学习作业流程中的多个处理进程链接在一起。运用管道能够将多个进程封装为单个Python 目标,这个目标具有咱们了解的scikit-learn 接口fit、predict 和transform。特别是运用穿插验证进行模型评价与运用网格查找进行参数挑选时,运用Pipeline 类来包含一切处理进程对正确的评价至关重要。

运用Pipeline 类还能够让代码愈加简练,并削减不必pipeline 类构建处理链时可能会犯的过错(比方忘掉将一切改换器运用于测验集,或许运用次序过错)的可能性。挑选特征提取、预处理和模型的正确组合,这在某种程度上是一门艺术,一般需求一些试错。可是有了管道,这种“测验”多个不同的处理进程是十分简略的。在进行实验时,要当心不要将处理进程复杂化,而且一定要评价一下模型中的每个组件是否必要。

全文完

步骤 管道 参数
FASHION GUIDE
  • 一城画一2024秋冬「四时充美·竹鉴本心」新品发布大秀
    一城画一2024秋冬「四时充美·竹鉴本心」新品发布大秀
    四时充美竹鉴本心一城画一于2024年5月12日,在广州市紫泥堂文化创意园圆满举行2024冬「四时充美竹鉴本心」新品发布秀暨品牌15..
  • 北京国贸迎来全新时尚地标——Redline小红绳璀璨启幕
    北京国贸迎来全新时尚地标——Redline小红绳璀璨启幕
    北京,2024年5月8日,备受瞩目的Redline小红绳在北京国贸商城盛大开业,标志着这一国际知名珠宝品牌正式进驻中国首都的核心商..
  • MARCOLIN 2024秋冬媒体预览会 [Through the Lens]
    MARCOLIN 2024秋冬媒体预览会 [Through the Lens]
    全球眼镜市场的领导集团之一MARCOLIN马可林于4月25日在北京后山艺术空间举办最新眼镜系列媒体预览会,以 [THROUGH THE LENS透..
  • 最新

    lv