如何将 XGBClassifier/XGBRegressor 模型分割成子模型?

How to slice a XGBClassifier/XGBRegressor model into sub-models?

This document 显示 XGBoost API 训练的模型可以通过以下代码进行切片:

from sklearn.datasets import make_classification
import xgboost as xgb

booster = xgb.train({
    'num_parallel_tree': 4, 'subsample': 0.5, 'num_class': 3},
                    num_boost_round=num_boost_round, dtrain=dtrain)    
sliced: xgb.Booster = booster[3:7]

我试过了,成功了。

由于 XGBoost 提供了 Scikit-Learn Wrapper 接口,我尝试了这样的操作:

from xgboost import XGBClassifier

clf_xgb = XGBClassifier().fit(X_train, y_train)
clf_xgb_sliced: clf_xgb.Booster = booster[3:7]

但出现以下错误:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-18-84155815d877> in <module>
----> 1 clf_xgb_sliced: clf_xgb.Booster = booster[3:7]

AttributeError: 'XGBClassifier' object has no attribute 'Booster'

由于 XGBClassifier 没有属性 'Booster',是否有任何方法可以对 Scikit-Learn Wrapper 接口训练的 XGBClassifier(/XGBRegressor) 模型进行切片?

问题在于您提供的类型提示 clf_xgb.Booster 与现有参数不匹配。尝试:

clf_xgb_sliced: xgb.Booster = clf_xgb.get_booster()[3:7]

相反。