我使用一个sklearn.pipeline.Pipeline对象来进行集群。
pipe = sklearn.pipeline.Pipeline([('transformer1': transformer1),
('transformer2': transformer2),
('clusterer': clusterer)])然后我用剪影评分来评估结果。
sil = preprocessing.silhouette_score(X, y)我想知道如何从管道中获取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)但我只想在一条管道里完成这一切。
发布于 2017-08-11 05:25:06
如果您希望在管道的中间步骤上对数据进行匹配和转换,那么重复使用相同的管道是没有意义的,更好的做法是使用您指定的新管道,因为调用fit()将忘记以前学过的所有数据。
但是,如果您只想transform()并查看已经安装好的管道上的中间数据,则可以通过访问named_steps参数来实现。
new_pipe = sklearn.pipeline.Pipeline([('transformer1':
old_pipe.named_steps['transformer1']),
('transformer2':
old_pipe.named_steps['transformer2'])])或者直接使用内部变量steps:
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用法中讨论了它,在您的例子中:
pipe.set_params(clusterer=None)
pipe.transform(df)但是请注意,也许要将合适的clusterer存储在其他地方,否则,当您想要使用该功能时,需要重新安装整个管道。
https://stackoverflow.com/questions/45626780
复制相似问题