Код: Выделить всё
class MSLELGBM(LGBMRegressor):
def __init__(self, **kwargs):
super().__init__(**kwargs)
def predict(self, X):
return np.exp(super().predict(X))
def fit(self, X, y, eval_set=None, callbacks=None):
y_log = np.log(y.copy())
print(super().get_params()) # This doesn't print any kwargs
if eval_set:
eval_set = [(X_eval, np.log(y_eval.copy())) for X_eval, y_eval in eval_set]
super().fit(X, y_log, eval_set=eval_set, callbacks=callbacks)
Однако моя оболочка не работает. Я звоню в класс с помощью;
Код: Выделить всё
model = MSLELGBM(**lgbm_params)
model.fit(data[X_cols_all], data[y_col_train])
Код: Выделить всё
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Cell In[31], line 38
32 callbacks = [
33 lgbm.early_stopping(10, verbose=0),
34 lgbm.log_evaluation(period=0),
35 ]
37 model = MSLELGBM(**lgbm_params)
---> 38 model.fit(data[X_cols_all], data[y_col_train])
40 feature_importances_df = pd.DataFrame([model.booster_.feature_importance(importance_type='gain')], columns=X_cols_all).T.sort_values(by=0, ascending=False)
41 feature_importances_df.iloc[:30]
Cell In[31], line 17
15 if eval_set:
16 eval_set = [(X_eval, np.log(y_eval.copy())) for X_eval, y_eval in eval_set]
---> 17 super().fit(X, y_log, eval_set=eval_set, callbacks=callbacks)
File c:\X\.venv\lib\site-packages\lightgbm\sklearn.py:1189, in LGBMRegressor.fit(self, X, y, sample_weight, init_score, eval_set, eval_names, eval_sample_weight, eval_init_score, eval_metric, feature_name, categorical_feature, callbacks, init_model)
1172 def fit( # type: ignore[override]
1173 self,
1174 X: _LGBM_ScikitMatrixLike,
(...)
1186 init_model: Optional[Union[str, Path, Booster, LGBMModel]] = None,
1187 ) -> "LGBMRegressor":
1188 """Docstring is inherited from the LGBMModel."""
...
--> 765 if isinstance(params["random_state"], np.random.RandomState):
766 params["random_state"] = params["random_state"].randint(np.iinfo(np.int32).max)
767 elif isinstance(params["random_state"], np.random.Generator):
KeyError: 'random_state'
Если это вам поможет, я попытался проиллюстрировать то, что хочу, используя более простую структуру, отличную от lgbm;

Я просто хочу передать любые параметры, которые я предоставляю MSLELGBM, в оригинал ЛГБМ, но при этом у меня возникает масса проблем.
Подробнее здесь: https://stackoverflow.com/questions/793 ... -wrap-lgbm
Мобильная версия