作为Pipelin的一部分时,无法将y传入FunctionTransform实例

2024-10-03 23:28:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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())])

问题是,当我通过传递pass_y = True将FunctionTransform实例嵌入到包装我的实现函数的管道中时(因为y也需要转换),管道会有意地通过调用<;FunctionTransform instance>;.fit(x,y).transform(x)而不返回转换后的y

因此,训练示例会被转换和排序,但不会关联真正的标签。在

我目前的工作是使用fit_变换和旁路调用实现patch FunctionTransformsklearn.FunctionTransform.transform在fit_transform body中显式但隐式地强制y的方法也被转换。在

我不确定这个用例对于FunctionTransform的设计是否合法。如果有任何scikit learn专家能提供建议或更好的解决方案,我将不胜感激,如何将培训示例和相应的标签转换为自动管道

Related Quesiton


Tags: nonetrue示例管道排序transform标签用例