我训练了一个
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) - 有没有更好的方法来避免这些警告?
regressor.save_model(fname="model.json")
如何实现这一点?我想避免 pickle 保存/恢复。
该属性未保存在 json 文件中
这是预期的行为。
XGBRegressor.save_model(fname)
方法调用只是“重定向”到 Booster.save_model(fname)
方法调用。最顶层 Scikit-Learn 层中定义的任何属性(例如自定义特征重要性属性)不会一起传播。
底层 XGBoost 模型保存程序/加载程序(通过 JSON/UBJSON)不包含任何用于维护自定义模型元数据的逻辑。只有真实的模型数据,XGBoost 本身实际上使用的。
如果您想保存具有自定义属性的 Scikit-Learn 包装器,则必须继续使用 pickle 数据格式。那里没路。