【发布时间】:2020-08-18 08:51:47
【问题描述】:
问题:
我正在使用 scikit-learn 的管道设计自定义转换器,但位置参数不匹配。我定义的类是:
class DataSubsetGenerator(BaseEstimator, TransformerMixin):
def __init__(self, sub_percentage, random_state = 42):
self.sub_percentage = sub_percentage
self.random_state = random_state
def fit(self):
return self
def transform(self, X_train, X_test, y_train, y_test):
# Do data processing stuff here, removed to simplify example here...
return X_train_sub, X_test_sub, y_train_sub, y_test_sub
然后我将其放入 1 步自定义管道中进行测试:
reduce_pipeline = Pipeline([
('Prototype dataset', DataSubsetGenerator(0.5, random_state = random_state))
])
X_train, X_test, y_train, y_test = reduce_pipeline.transform(X_train, X_test, y_train, y_test)
我收到错误:
TypeError Traceback (most recent call last)
<ipython-input-42-4b2a20eb8b63> in <module>()
3 ])
4
----> 5 X_train, X_test, y_train, y_test = reduce_pipeline.transform(X_train, X_test, y_train, y_test)
TypeError: _transform() takes 2 positional arguments but 5 were given
这没有任何意义,因为我已经将DataSubGenerator 类的transform() 函数定义为接受4 个参数。
我的测试:
我已经通过实例化DataSubGenerator 并调用transform() 在不使用sklearn 的管道的情况下对此进行了测试,并且它按照设计运行:
dsg = DataSubsetGenerator(0.5, random_state = random_state)
X_train, X_test, y_train, y_test = dsg.transform(X_train, X_test, y_train, y_test)
我的问题是:为什么transform() 函数在 sklearn 管道中使用时不能识别这 4 个参数?
相关问答:
我尝试过研究,最近的问答主题是:_transform() takes 2 positional arguments but 3 were given。但是,我无法理解该解决方案以及它如何应用于我的场景。
【问题讨论】:
标签: python scikit-learn