我正在使用一个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)
但我想在一条管道中完成这一切。
如果您想要在管道的中间步骤上拟合和转换数据,那么重用相同的管道是没有意义的,最好使用您指定的新管道,因为调用fit()
会忘记所有以前学到的数据。
但是如果你只想transform()
并查看已安装管道上的中间数据,然后可以通过访问named_steps http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html范围。
new_pipe = sklearn.pipeline.Pipeline([('transformer1':
old_pipe.named_steps['transformer1']),
('transformer2':
old_pipe.named_steps['transformer2'])])
或者直接使用内部变量steps
like:
transformer_steps = old_pipe.steps
new_pipe = sklearn.pipeline.Pipeline([('transformer1': transformer_steps[0]),
('transformer2': transformer_steps[1])])
然后调用new_pipe.transform()
.
Update:如果您有0.18或更高版本,那么您可以将管道内的非必需估计器设置为None
在同一管道中获得结果。其讨论于这个问题在 scikit-learn github https://github.com/scikit-learn/scikit-learn/issues/7536在您的情况下上述用法:
pipe.set_params(clusterer=None)
pipe.transform(df)
但请注意,也许可以存放已安装的clusterer
在其他地方这样做,否则当您想要使用该功能时,您需要再次安装整个管道。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)