构建管道sklearn.pipeline
pipeline类本身具有fit、predict和score方法,其行为与Scikit-Learn中的其他模型相同。
例:使用Pipeline类来表示在使用MinMaxScaler缩放数据之后再训练一个SVM的工作流程
from sklearn.pipeline import Pipeline pipe = Pipeline([("scaler",MinMaxScaler()),("svm",SVC())]) pip.fit(X_train,y_train) pip.score(X_test,y_test)
这里 ,我们构建了一个由步骤列表组成的管道对象,每个步骤都是一个元组,包含一个名称(自定义)和一个估计器的实例。
首先对第一个步骤(缩放器)调用fit,然后使用该缩放器对训练数据进行变换,最后利用缩放后的数据来拟合SVM。利用管道,我们减少了“预处理+分类”过程所需要的代码量,而且,使用管道的主要优点在于,我们可以在cross_val_score或GridSearchCV中使用这个估计器。
例:在网格搜索中使用管道
param_grid = {'svm__C':[0.001,0.01,0.1,1,10,100],'svm__gamma':[0.001,0.01,0.1,1,10,100]} grid = GridSearchCV(pipe,param_grid=param_grid,cv=5) grid_search.fit(X_train,y_train) print("Test set score:{:.2f}".format(grid_search.score(X_test,y_test)))
我们需要为每个参数(C和gamma)指定它在管道中所属的步骤。为管道定义参数网格的语法是为每个参数指定步骤名称,后面加上__(双下划线),然后是参数名称(svm__C和svm_gamma)
例:用Pipeline类构建管道时语法有点麻烦,我们通常不需要为每一个步骤提供用户指定的名称,这种情况下,就可以用make_pipeline函数创建管道,它可以为我们创建管道并根据每个步骤所属的类为其自动命名。一般来说,自动命名的步骤名称是类名称的小写版本,如果多个步骤属于同一个类,则会附加一个数字。
from sklearn.pipeline import make_pipeline pipe = make_pipeline(MinMaxScaler(),SVC())
①pipeline.steps是由元组组成的列表,pipeline.steps[0][1]是第一个估计器,pipeline.steps[1][1]是第二个估计器。
②要想访问管道中的步骤,最简单的方法是通过named_steps属性,它是一个字典,将步骤名称映射为估计器。
③GridSearchCV找到的最佳模型保存在grid.best_estimator_中。
④如果想跳过管道中的某个步骤,则可以将该步骤设置为None。
参考:
- 《Python机器学习基础教程》
- https://blog.csdn.net/elma_tww/article/details/88427695