XGBoost 继承:__init__() 有一个意外的关键字参数“标签”
Posted
技术标签:
【中文标题】XGBoost 继承:__init__() 有一个意外的关键字参数“标签”【英文标题】:XGBoost Inheritance: __init__() got an unexpected keyword argument 'labels' 【发布时间】:2021-02-08 04:17:51 【问题描述】:我正在重构一些 XGBoost 功能,以尽量减少我的数据科学项目中的重复代码。我在任何模型构建开始时都会运行一组通用的预处理步骤,并希望创建一个父类Model
,以便为算法准备好我的数据。
import xgboost as xgb
from sklearn.preprocessing import OrdinalEncoder
from sklearn.compose import make_column_transformer
class Model:
def __init__(self, dataframe, features, target, encoder):
self.source = dataframe
self.subset = self.source [self.source[target].notna()]
self.X = self.subset[features]
self.y = self.subset[target]
self.categorical_features = list(self.X.select_dtypes(include = 'object').columns)
self.encoder = encoder
self.preprocessor = make_column_transformer((self.encoder, self.categorical_features), remainder = 'passthrough')
self.preprocessor.fit (self.source[features])
self.X = self.preprocessor.transform (self.X)
self.X_train, self.X_test, self.y_train, self.y_test = train_test_split (self.X, self.y, test_size = 0.2)
class Model_XGB(Model):
def fit(self, verbose = False):
self.dtrain = xgb.DMatrix (self.X_train, labels = self.y_train)
self.dtest = xgb.DMatrix (self.X_test, labels = self.y_test)
params = 'max_depth': 2, 'eta': 1, 'objective': 'reg:squarederror', 'eval_metric': 'mae'
evallist = [(self.dtrain, 'train'), (self.dtest, 'eval')]
num_round = 300
self.booster = xgb.train (param, self.dtrain, num_round, evallist, early_stopping_rounds=10, verbose_eval = verbose)
model_xgb = Model_XGB(data, best_features, 'area', OrdinalEncoder())
model_xgb.fit (verbose = True)
我的问题是,当我创建一个名为 Model_XGB
的子类并尝试添加一个新方法 fit
时,我收到以下错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-71-e24c05d6f4dc> in <module>
34
35 model_xgb = Model_XGB(data, best_features, 'area', OrdinalEncoder())
---> 36 model_xgb.fit (verbose = True)
37 model_xgb.predict (data[best_features])
<ipython-input-71-e24c05d6f4dc> in fit(self, verbose)
19 class Model_XGB(Model):
20 def fit(self, verbose = False):
---> 21 self.dtrain = xgb.DMatrix (self.X_train, labels = self.y_train)
22 self.dtest = xgb.DMatrix (self.X_test, labels = self.y_test)
23
TypeError: __init__() got an unexpected keyword argument 'labels'
我何时将labels
传递给__init__()
? labels
是 xgb
的方法参数。我对python中的继承有什么误解,还是与这些包有关?
【问题讨论】:
请使用完整的错误回溯更新您的问题。 【参考方案1】:想通了 - 参数名称是 label
而不是 labels
!我以为__init__()
指的是对象而不是DMatrix
!
【讨论】:
以上是关于XGBoost 继承:__init__() 有一个意外的关键字参数“标签”的主要内容,如果未能解决你的问题,请参考以下文章