如何解决XGBoost继承:__init __得到了意外的关键字参数'labels'
我正在重构一些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,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中的继承有什么误解吗,或者这与这些软件包有关?
解决方法
弄清楚了-参数名称是label
而不是labels
!我以为__init__()
是指对象而不是DMatrix
!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。