当前位置 : 主页 > 编程语言 > 其它开发 >

算法链与管道(下):通用的管道接口

来源:互联网 收集:自由互联 发布时间:2022-06-03
1、通用的管道接口 Pipeline 类不但可用于预处理和分类,实际上还可以将任意数量的估计器连接在一起。 例如,你可以构建一个包含特征提取、特征选择、缩放和分类的管道,总共有
1、通用的管道接口

Pipeline 类不但可用于预处理和分类,实际上还可以将任意数量的估计器连接在一起。

  • 例如,你可以构建一个包含特征提取、特征选择、缩放和分类的管道,总共有 4 个步骤。同样,最后一步可以用回归或聚类代替分类。

对于管道中估计器的唯一要求就是,除了最后一步之外的所有步骤都需要具有 transform 方法,这样它们可以生成新的数据表示,以供下一个步骤使用。

在调用 Pipeline.fit 的过程中,管道内部依次对每个步骤调用 fit 和 transform,其输入是前一个步骤中 transform 方法的输出。对于管道中的最后一步,则仅调用 fit。

  #pipeline.steps 是由元组组成的列表, 所以 pipeline.steps[0][1] 是第一个估计器,pipeline.steps[1][1] 是第二个估计器。

  from sklearn.pipeline import Pipeline

  def fit(self,X,y):
      X_transformed = X
      for name, estimator in self.steps[:-1]:
          #遍历出最后一步之外的所有步骤
          #对数据进行拟合和变换
          X_transformed = estimator.fit_transform(X_transformed,y)
      #对最后一步进行拟合
      self.steps[-1][1].fit(X_transformed,y)
      return self

  #使用 Pipeline 进行预测时,我们同样利用除最后一步之外的所有步骤对数据进行变换 (transform),然后对最后一步调用 predict:

  def predict(self,X):
      X_transformed = X
      for step in self.steps[:-1]:
          X_transformed = step[1].transform(X_transformed)
      return self.steps[-1][1].predict(X_transformed)
2、用make_pipeline方便地创建管道

利用上述语法创建管道有时有点麻烦,我们通常不需要为每一个步骤提供用户指定的名称。有一个很方便的函数 make_pipeline,可以为我们创建管道并根据每个步骤所属的类为其自动命名。make_pipeline 的语法如下所示:

  from sklearn.pipeline import make_pipeline
  from sklearn.preprocessing import MinMaxScaler
  from sklearn.svm import SVC

  #标准写法

  pipe1 = Pipeline([("scaler",MinMaxScaler()),("svm",SVC(C=100))])

  pipe2 = make_pipeline(MinMaxScaler(),SVC(C=100))

  #管道对象 pipe1 和 pipe2 的作用完全相同,但 pipe2 的步骤是自动命名的。 我们可以通过查看 steps 属性来查看步骤的名称:

  print("pipeline1 steps:{}".format(pipe1.steps))
  print("pipeline2 steps:{}".format(pipe2.steps))

  ```
  pipeline1 steps:[('scaler', MinMaxScaler()), ('svm', SVC(C=100))]
  pipeline2 steps:[('minmaxscaler', MinMaxScaler()), ('svc', SVC(C=100))]
  ```

上一篇:秋招被虐,最终拿下腾讯和字节offer!
下一篇:没有了
网友评论