Bin*_*Bin 15 python artificial-intelligence machine-learning scikit-learn
是否可以删除或插入sklearn.pipeline.Pipeline对象中的步骤?
我试图在Pipeline对象中有或没有一步进行网格搜索.并想知道我是否可以在管道中插入或删除一个步骤.我在Pipeline源代码中看到,有一个self.steps对象包含所有步骤.我们可以逐步完成named_steps().在修改它之前,我想确保,我不会造成意想不到的影响.
这是一个示例代码:
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.decomposition import PCA
estimators = [('reduce_dim', PCA()), ('svm', SVC())]
clf = Pipeline(estimators)
clf
Run Code Online (Sandbox Code Playgroud)
是否有可能steps = clf.named_steps()在此列表中执行类似的操作,然后插入或删除?这是否会对clf对象造成不良影响?
Hon*_*zaB 14
我看到每个人都只提到了删除步骤.如果您还想在管道中插入一个步骤:
pipe.steps.append(['step name',transformer()])
Run Code Online (Sandbox Code Playgroud)
pipe.steps 与列表的工作方式相同,因此您还可以将项目插入特定位置:
pipe.steps.insert(1,['estimator',transformer()]) #insert as second step
Run Code Online (Sandbox Code Playgroud)
基于初步测试,您可以安全地从scikit-learn管道中删除一个步骤,就像您对任何列表项一样,只需简单
clf_pipeline.steps.pop(n)
Run Code Online (Sandbox Code Playgroud)
其中n是您要删除的单个估算器的位置.
只是插话,因为我觉得其他答案很好地回答了向管道添加步骤的问题,但并没有真正涵盖如何从管道中删除步骤。
不过要注意我的方法。在这种情况下切片列表有点奇怪。
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.decomposition import PCA
from sklearn.preprocessing import PolynomialFeatures
estimators = [('reduce_dim', PCA()), ('poly', PolynomialFeatures()), ('svm', SVC())]
clf = Pipeline(estimators)
Run Code Online (Sandbox Code Playgroud)
如果你想用 PCA/Polynomial 的步骤创建一个管道,你可以按索引一步一步地将列表切片并将其传递给 Pipeline
clf1 = Pipeline(clf.steps[0:2])
Run Code Online (Sandbox Code Playgroud)
只想使用步骤 2/3?注意这些切片并不总是最有意义
clf2 = Pipeline(clf.steps[1:3])
Run Code Online (Sandbox Code Playgroud)
只想使用步骤 1/3?我似乎无法使用这种方法
clf3 = Pipeline(clf.steps[0] + clf.steps[2]) # errors
Run Code Online (Sandbox Code Playgroud)