jbo*_*lia 7 pipeline python-2.7 scikit-learn
我正在使用一个sklearn.pipeline.Pipeline对象来进行聚类.
pipe = sklearn.pipeline.Pipeline([('transformer1': transformer1),
('transformer2': transformer2),
('clusterer': clusterer)])
Run Code Online (Sandbox Code Playgroud)
然后我通过使用轮廓分数来评估结果.
sil = preprocessing.silhouette_score(X, y)
Run Code Online (Sandbox Code Playgroud)
我想知道如何X从管道获取或转换数据,因为它只返回clusterer.fit_predict(X).
我知道我可以通过将管道拆分为:
pipe = sklearn.pipeline.Pipeline([('transformer1': transformer1),
('transformer2': transformer2)])
X = pipe.fit_transform(data)
res = clusterer.fit_predict(X)
sil = preprocessing.silhouette_score(X, res)
Run Code Online (Sandbox Code Playgroud)
但我想在一个管道中完成所有工作.
如果您想在管道的中间步骤上拟合和转换数据,那么重用相同的管道是没有意义的,最好使用您指定的新管道,因为调用fit()会忘记所有先前学习的数据。
但是,如果您只想transform()查看已安装管道上的中间数据,则可以通过访问named_steps参数来实现。
new_pipe = sklearn.pipeline.Pipeline([('transformer1':
old_pipe.named_steps['transformer1']),
('transformer2':
old_pipe.named_steps['transformer2'])])
Run Code Online (Sandbox Code Playgroud)
或者直接使用内部变量,steps例如:
transformer_steps = old_pipe.steps
new_pipe = sklearn.pipeline.Pipeline([('transformer1': transformer_steps[0]),
('transformer2': transformer_steps[1])])
Run Code Online (Sandbox Code Playgroud)
然后调用new_pipe.transform().
更新:
如果您有0.18或更高版本,那么您可以将管道内的非必需估计器设置为None在同一管道中获取结果。它在scikit-learn github 上的本期讨论中
在您的案例中使用上述内容:
pipe.set_params(clusterer=None)
pipe.transform(df)
Run Code Online (Sandbox Code Playgroud)
但请注意,可能会将安装的内容存储clusterer在其他地方来执行此操作,否则当您想要使用该功能时,您需要再次安装整个管道。
| 归档时间: |
|
| 查看次数: |
1347 次 |
| 最近记录: |