Something like this worked well for me (I'm not on GPU though)
#OVERWRITE _create_dmatrix
class MyXGBOther(XGBRegressor):
def __init__(self, **kwargs):
"""Initalize Trainer."""
super().__init__(**kwargs)
self.model_ = None #ensures it will have no knowledge of the regular model (see override in fit() method)
def fit(self, X, y,**kwargs: Any):
if not isinstance(X, DMatrix): raise TypeError("Input must be an xgboost.DMatrix")
if y is not None: raise TypeError("Must be used with a y argument for sklearn consistency, but y labels should be contained in DMatrix X")
self.model_ = xgb.train(params=self.get_xgb_params(), dtrain=X, **kwargs)
return self
def predict(self, X, **kwargs: Any):
if not isinstance(X, DMatrix): raise TypeError("Input must be an xgboost.DMatrix")
return self.model_.predict(data=X, **kwargs)