算法链与管道接口通用性探讨:如何构建高效通用管道?

2026-05-05 20:471阅读0评论SEO资讯
  • 内容介绍
  • 相关推荐

本文共计701个文字,预计阅读时间需要3分钟。

算法链与管道接口通用性探讨:如何构建高效通用管道?

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))] ```

本文共计701个文字,预计阅读时间需要3分钟。

算法链与管道接口通用性探讨:如何构建高效通用管道?

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))] ```