我正在使用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)
但我想在一个管道中完成所有工作。
答案 0 :(得分:2)
如果你想在管道的中间步骤上拟合和转换数据,那么重用相同的管道并且更好地使用你指定的新管道是没有意义的,因为调用fit()
会忘记所有关于以前学过的数据。
但是,如果您只想transform()
并在已安装的管道上查看中间数据,则可以通过访问named_steps
参数来实现。{/ p>
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
,以便在同一管道中获得结果。它在this issue at scikit-learn github中讨论过
在您的情况下用于上述:
pipe.set_params(clusterer=None)
pipe.transform(df)
但请注意,可能会将拟合的clusterer
存储在其他地方,否则在需要使用该功能时,您需要再次适合整个管道。