我有一个FunctionTransform的用例,其中训练示例需要根据某些标准与其真实标签一起进行排序。
def sort_examples(X, y=None):
Xt, indices = zip(*map(itemgetter(1, 2),
sorted([(x.nnz, x, i) for i, x in
enumerate(X)], key = itemgetter(0))))
if y is not None:
yt = [yy[idx] for idx in indices]
return(Xt, yt)
classifier = Pipeline(steps=[
('sorter', FunctionTransformer(func=sort_examples,
validate=False,
accept_sparse=True,
pass_y=True)),
('classifier', DummyClassifier())])
问题是当我在Pipeline中嵌入FunctionTransform实例时,它通过传递pass_y = True
来包装我的实现函数(因为y也需要转换),Pipeline将通过调用< FunctionTransform instance&gt故意删除y ; .fit(x,y).transform(x),不返回变换后的y。
因此,培训示例将被转换和排序,但不会关联真实标签。
我目前的工作是使用fit_transform修补FunctionTransform,并通过调用显式调用sklearn.FunctionTransform.transform方法,但隐式调整fit_transform体内的强制y也会被转换。
我不确定这个用例对于FunctionTransform的设计是否合法。我将深表感激如果有任何scikit-learn专家可以提供建议或更好的解决方案如何在自动管道中获取培训示例和相应的标签