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。