Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何将参数从管道对象传递到转换器(scikit学习)_Python 3.x_Scikit Learn_Pipeline - Fatal编程技术网

Python 3.x 如何将参数从管道对象传递到转换器(scikit学习)

Python 3.x 如何将参数从管道对象传递到转换器(scikit学习),python-3.x,scikit-learn,pipeline,Python 3.x,Scikit Learn,Pipeline,我试图使用set_params将参数传递到封装在管道中的转换器(BaseEstimator,TransformerMixin),但它不起作用,即使包含转换器的管道上的get_params显示参数在那里 它需要传入,而不是来自全局/局部或在同一模块中。我看到的大多数示例要么使用后一种方法,要么使用硬代码作为管道定义中的参数,但有关set_params的文档非常清楚地表明,在管道(甚至嵌套管道)中传递到转换器时,它应该起作用。只是不太清楚如何真正做到这一点 下面是一个完整的玩具示例,代码本身就说明了

我试图使用
set_params
将参数传递到封装在管道中的转换器(BaseEstimator,TransformerMixin),但它不起作用,即使包含转换器的管道上的
get_params
显示参数在那里

它需要传入,而不是来自全局/局部或在同一模块中。我看到的大多数示例要么使用后一种方法,要么使用硬代码作为管道定义中的参数,但有关set_params的文档非常清楚地表明,在管道(甚至嵌套管道)中传递到转换器时,它应该起作用。只是不太清楚如何真正做到这一点

下面是一个完整的玩具示例,代码本身就说明了这一点:

import pandas as pd
from sklearn.pipeline import Pipeline
from sklearn.base import BaseEstimator, TransformerMixin

class SomeTransform(BaseEstimator, TransformerMixin):
    def __init__(self, param):
        self.param = param

    def fit(self, X, y=None):
        return self

    def transform(self, X):
        # do something with param
        print("here's our param: ", self.param)
        return X

some_pipe = Pipeline([
    #('st', SomeTransform(param='foo')),   # It works if param is hardcoded in pipe.
    ('st', SomeTransform()),                # It doesn't work if param is passed to pipe.
    ])

some_pipe[0].set_params(param='bar')
print(some_pipe[0])     #  SomeTransform(param='bar')
print(some_pipe[0].get_params())    # {'param': 'bar'}

# data doesn't matter for this toy example.
data =  [['a', 1], ['b', 2], ['c', 3]]
df = pd.DataFrame(data, columns=['letters', 'numbers'])

wat = some_pipe.transform(df) 
如前所述,如果参数是从管道本身内部传递的,那么它可以正常工作,但是当参数传递到管道时,它就不起作用了

如何传递此参数,使其可用于变压器?我发现的唯一示例都使用GridSearchCV,这不是我正在使用的。我得到的错误与类似,但我只传递了一个参数,而不是多个


我很少“放弃”并提出这样的要求,但在这里我真的遇到了麻烦,我很确定我只是错过了显而易见的东西。

不确定,但你可以在init方法中使用None作为默认值:
def\uu init\uuself(param=None):
,看看这是否可行,如果你举上面的例子并添加
param=None
它会很好,确认,thx.不确定,但您可以在init方法中使用None作为默认值:
def\uuuu init\uuuuu(self,param=None):
,查看是否同意该工作,如果您以上面的示例添加
param=None
它将正常工作是的,已确认,thx。