【问题标题】:Pass arguments to FunctionTransformer in Pipeline将参数传递给管道中的 FunctionTransformer
【发布时间】:2021-08-23 18:50:50
【问题描述】:

我一直在学习 sklearn 预处理和管道,并遇到了 FunctionTransformer 的概念。我想了解是否必须将其集成到管道中并将参数传递给 FunctionTransformer 所指的函数,该怎么做。考虑下面的例子,为简单起见,我写了一个小函数:

def return_selected_dataset(dataset, columns):
    return dataset[columns]

pipe = Pipeline([('Return_Col', FunctionTransformer(return_selected_dataset))])
pipe.fit_transform(dataset, columns = ['Col1', 'Col2'])

我收到以下错误: ValueError: Pipeline.fit does not accept the columns parameter. You can pass parameters to specific steps of your pipeline using the stepname__parameter format, e.g. `Pipeline.fit(X, y, logisticregression__sample_weight=sample_weight)`.

如何将columns 的值传递给函数? 另外,有人可以推荐任何书籍或网站,我可以在其中详细研究 sklearn 管道和预处理以及如何自定义这些过程?

【问题讨论】:

    标签: python scikit-learn pipeline


    【解决方案1】:

    示例数据集:

    import numpy as np
    from sklearn.preprocessing import FunctionTransformer
    from sklearn.pipeline import Pipeline
    import pandas as pd
    
    X = pd.DataFrame({'Col1':[1,2],'Col2':[3,4],'Col3':[5,6]})
    

    你的功能:

    def return_selected_dataset(dataset, columns):
        return dataset[columns]
    

    如果没有管道,它会是这样的:

    FunctionTransformer(return_selected_dataset,
    kw_args={'columns':['Col1','Col2']}).transform(X)
    

    注意管道,您只能将参数传递给每个拟合步骤, 见the help page:

    **fit_paramsdict of string -> object 传递给每个 step 的 fit 方法的参数,其中每个参数名称都有前缀,这样 步骤 s 的参数 p 具有键 s__p。

    所以我认为你可以做的是:

    pipe = Pipeline([
    ('Return_Col',
    FunctionTransformer(return_selected_dataset,
    kw_args={'columns':['Col1','Col2']})
    )
    ])
    
    pipe.fit_transform(X)
     
       Col1  Col2
    0     1     3
    1     2     4
    

    【讨论】:

      猜你喜欢
      • 2021-09-25
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      • 2016-07-03
      • 1970-01-01
      • 2021-11-22
      • 1970-01-01
      相关资源
      最近更新 更多