如何在 XGBRegressor 上将重要特征设置为属性并在保存模型时保存为 json 的一部分

问题描述 投票:0回答:1

我训练了一个

XGBRegressor
模型。现在,我尝试将重要特征保存为模型上的属性,并希望该属性与模型一起保存/恢复。

我这里有 2 个问题 -

1.

regressor.fit(X=X_train, y=y_train, eval_set=[(X_train, y_train), (X_validation, y_validation)], verbose=False)

feature_importance: List[Tuple[str, float]] = sorted(
            regressor.get_booster().get_score(importance_type="gain").items(), key=lambda x: x[1]
        )
selected_features: List[str] = [x[0] for x in feature_importance if x[1] > 0]
setattr(regressor, "selected_features", selected_features)

setattr
和相应的
getattr
向我发出棉绒警告(B010和B009) - 有没有更好的方法来避免这些警告?

  1. 该属性不会保存在 json 文件中。我正在使用以下调用来保存 -

regressor.save_model(fname="model.json")

如何实现这一点?我想避免 pickle 保存/恢复。

python python-3.x xgboost xgbregressor
1个回答
0
投票

该属性未保存在 json 文件中

这是预期的行为。

XGBRegressor.save_model(fname)
方法调用只是“重定向”到
Booster.save_model(fname)
方法调用。最顶层 Scikit-Learn 层中定义的任何属性(例如自定义特征重要性属性)不会一起传播。

底层 XGBoost 模型保存程序/加载程序(通过 JSON/UBJSON)不包含任何用于维护自定义模型元数据的逻辑。只有真实的模型数据,XGBoost 本身实际上使用的。

如果您想保存具有自定义属性的 Scikit-Learn 包装器,则必须继续使用 pickle 数据格式。那里没路。

© www.soinside.com 2019 - 2024. All rights reserved.