如何从保存的XGBoost mod获取参数

2024-05-18 16:16:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用下面的参数来训练XGBoost模型:

xgb_params = {
    'objective': 'binary:logistic',
    'eval_metric': 'auc',
    'lambda': 0.8,
    'alpha': 0.4,
    'max_depth': 10,
    'max_delta_step': 1,
    'verbose': True
}

由于我的输入数据太大,无法完全加载到内存中,因此我采用增量训练:

xgb_clf = xgb.train(xgb_params, input_data, num_boost_round=rounds_per_batch,
                    xgb_model=model_path)

预测的代码是

xgb_clf = xgb.XGBClassifier()
booster = xgb.Booster()
booster.load_model(model_path)
xgb_clf._Booster = booster
raw_probas = xgb_clf.predict_proba(x)

结果似乎不错。但是当我试图调用xgb_clf.get_xgb_params()时,我得到了一个param dict,其中所有参数都设置为默认值。

我猜根本原因是当我初始化模型时,我没有传入任何参数。因此,该模型是使用默认值初始化的,但是当它进行预测时,它使用了一个内部的升压器,该升压器使用了一些预定义的参数进行拟合。

但是,我想知道,在我给XGBClassifier分配一个预先训练好的booster模型之后,是否有任何方法可以看到用于训练booster的实际参数,而不是用于初始化分类器的参数。

谢谢大家。


Tags: path模型参数modelparamsmaxbinaryclf
1条回答
网友
1楼 · 发布于 2024-05-18 16:16:57

您似乎在代码中混合了sklearn API和函数API,如果您坚持使用其中任何一个,那么您应该获得参数以在pickle中持久化。下面是一个使用sklearn API的示例。

import pickle
import numpy as np
import xgboost as xgb
from sklearn.datasets import load_digits


digits = load_digits(2)
y = digits['target']
X = digits['data']

xgb_params = {
    'objective': 'binary:logistic',
    'reg_lambda': 0.8,
    'reg_alpha': 0.4,
    'max_depth': 10,
    'max_delta_step': 1,
}
clf = xgb.XGBClassifier(**xgb_params)
clf.fit(X, y, eval_metric='auc', verbose=True)

pickle.dump(clf, open("xgb_temp.pkl", "wb"))
clf2 = pickle.load(open("xgb_temp.pkl", "rb"))

assert np.allclose(clf.predict(X), clf2.predict(X))
print(clf2.get_xgb_params())

产生

{'base_score': 0.5,
 'colsample_bylevel': 1,
 'colsample_bytree': 1,
 'gamma': 0,
 'learning_rate': 0.1,
 'max_delta_step': 1,
 'max_depth': 10,
 'min_child_weight': 1,
 'missing': nan,
 'n_estimators': 100,
 'objective': 'binary:logistic',
 'reg_alpha': 0.4,
 'reg_lambda': 0.8,
 'scale_pos_weight': 1,
 'seed': 0,
 'silent': 1,
 'subsample': 1}

相关问题 更多 >

    热门问题