首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从sklearn.pipeline.Pipeline中获取变压器结果

从sklearn.pipeline.Pipeline中获取变压器结果
EN

Stack Overflow用户
提问于 2017-08-11 04:03:37
回答 1查看 3.5K关注 0票数 10

我使用一个sklearn.pipeline.Pipeline对象来进行集群。

代码语言:javascript
复制
pipe = sklearn.pipeline.Pipeline([('transformer1': transformer1),
                                  ('transformer2': transformer2),
                                  ('clusterer': clusterer)])

然后我用剪影评分来评估结果。

代码语言:javascript
复制
sil = preprocessing.silhouette_score(X, y)

我想知道如何从管道中获取X或转换后的数据,因为它只返回clusterer.fit_predict(X)

我知道我能做到这一点,只要把管道分割成

代码语言:javascript
复制
pipe = sklearn.pipeline.Pipeline([('transformer1': transformer1),
                                  ('transformer2': transformer2)])

X = pipe.fit_transform(data)
res = clusterer.fit_predict(X)
sil = preprocessing.silhouette_score(X, res)

但我只想在一条管道里完成这一切。

EN

回答 1

Stack Overflow用户

发布于 2017-08-11 05:25:06

如果您希望在管道的中间步骤上对数据进行匹配和转换,那么重复使用相同的管道是没有意义的,更好的做法是使用您指定的新管道,因为调用fit()将忘记以前学过的所有数据。

但是,如果您只想transform()并查看已经安装好的管道上的中间数据,则可以通过访问named_steps参数来实现。

代码语言:javascript
复制
new_pipe = sklearn.pipeline.Pipeline([('transformer1': 
                                           old_pipe.named_steps['transformer1']),
                                      ('transformer2': 
                                          old_pipe.named_steps['transformer2'])])

或者直接使用内部变量steps

代码语言:javascript
复制
transformer_steps = old_pipe.steps
new_pipe = sklearn.pipeline.Pipeline([('transformer1': transformer_steps[0]),
                                  ('transformer2': transformer_steps[1])])

然后打电话给new_pipe.transform()

更新:如果您的版本为0.18或更高,则可以将管道内的非必需估计器设置为None,以获得相同管道中的结果。在上面的这一期在scikit-学习github用法中讨论了它,在您的例子中:

代码语言:javascript
复制
pipe.set_params(clusterer=None)
pipe.transform(df)

但是请注意,也许要将合适的clusterer存储在其他地方,否则,当您想要使用该功能时,需要重新安装整个管道。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45626780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档