sklearn 管道错误 - fit() 采用 1 个位置参数,但给出了 3 个
sklearn pipeline error - fit() takes 1 positional argument but 3 were given
尝试运行以下内容:
class N1:
def __init__(self):
pass
def fit(self):
return self
def transform(self, X):
return X.assign(num_1="n1")
X = pd.DataFrame(
{
"n1": [1, 2, 3],
"n2": [3, 4, 4],
"c1": ["a", "b", "c"],
"c2": ["x", "y", "z"],
}
)
num_pipeline = Pipeline(
[
("num_1", N1()),
]
)
num_pipeline.fit(X)
# same error with:
# num_pipeline.fit_transform(X)
给出错误:
TypeError: fit() takes 1 positional argument but 3 were given
不过我真的不明白这是怎么回事,也不知道如何解决。
完整追溯:
387 return last_step.fit_transform(Xt, y, **fit_params_last_step)
388 else:
--> 389 return last_step.fit(Xt, y,
390 **fit_params_last_step).transform(Xt)
391
TypeError: fit() takes 1 positional argument but 3 were given
我希望数据框 X
与添加的列 num_1
一起返回
通常,fit
还需要一个 X
和一个可选的 y
参数,因此 Pipeline
可能会尝试传递这些参数。
也许尝试这样定义它:
def fit(self, X, y=None):
return self
您可能还想看看 FunctionTransformer
。
尝试运行以下内容:
class N1:
def __init__(self):
pass
def fit(self):
return self
def transform(self, X):
return X.assign(num_1="n1")
X = pd.DataFrame(
{
"n1": [1, 2, 3],
"n2": [3, 4, 4],
"c1": ["a", "b", "c"],
"c2": ["x", "y", "z"],
}
)
num_pipeline = Pipeline(
[
("num_1", N1()),
]
)
num_pipeline.fit(X)
# same error with:
# num_pipeline.fit_transform(X)
给出错误:
TypeError: fit() takes 1 positional argument but 3 were given
不过我真的不明白这是怎么回事,也不知道如何解决。
完整追溯:
387 return last_step.fit_transform(Xt, y, **fit_params_last_step)
388 else:
--> 389 return last_step.fit(Xt, y,
390 **fit_params_last_step).transform(Xt)
391
TypeError: fit() takes 1 positional argument but 3 were given
我希望数据框 X
与添加的列 num_1
通常,fit
还需要一个 X
和一个可选的 y
参数,因此 Pipeline
可能会尝试传递这些参数。
也许尝试这样定义它:
def fit(self, X, y=None):
return self
您可能还想看看 FunctionTransformer
。