【发布时间】:2021-05-02 13:27:04
【问题描述】:
我正在尝试制作自己的 BaseEstimator 类以将其用作管道的一部分,但我无法使其工作。这是我得到的:TypeError: score() 接受 2 个位置参数,但给出了 3 个
我已经尝试将 self 参数添加到 score 函数,但它不起作用:我有一个 ValueError 代替。 当我制作一个单独的模型然后单独使用该功能时,一切都很好
class MyRegressor(BaseEstimator):
def __init__(self, regressor_type: str = 'SGDRegressor'):
"""
"""
self.regressor_type = regressor_type
def fit(self, X, y):
if self.regressor_type == 'SGDRegressor':
self.regressor_ = SGDRegressor()
elif self.regressor_type == 'RandomForestRegressor':
self.regressor_ = RandomForestRegressor()
elif self.regressor_type == 'LinearRegression':
self.regressor_ = LinearRegression()
elif self.regressor_type == 'CatBoostRegressor':
self.regressor_ = CatBoostRegressor()
elif self.regressor_type == 'XGBRegressor':
self.regressor_ = XGBRegressor()
else:
raise ValueError('Unknown regressor type.')
self.regressor_.fit(X, y)
return self
def predict(self, X):
y_pred = self.regressor_.predict(X)
return y_pred
def score(y, y_pred):
smape = sum(abs(y - y_pred) / (abs(y) + abs(y_pred)) / 2) * 100 / len(y)
return self.estimator.smape(y, y_pred)
pipe = Pipeline([('scaler', StandardScaler()), ('MyRegressor', MyRegressor())])
pipe.fit(X_train, y_train_final)
params = {
'MyRegressor__regressor_type': ['SGDRegressor', 'RandomForestRegressor', 'LinearRegression', 'CatBoostRegressor', 'XGBRegressor']
}
search = GridSearchCV(pipe , params, n_jobs=-1, cv=5)
search.fit(X_train, y_train_final)
print('Best model:\n', search.best_params_)
请帮我解决这个问题。提前谢谢!
【问题讨论】:
标签: python scikit-learn typeerror