如何从保存的XGBoost模型中获取参数

时间:2017-07-04 07:24:08

标签: python xgboost

我正在尝试使用下面的参数训练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后,我可以看到用于训练助推器的真实参数,但不能用于初始化分类器的那些

谢谢大家。

2 个答案:

答案 0 :(得分:1)

您似乎将sklearn API与代码中的功能API混合在一起,如果您坚持使用其中任何一个,您应该将参数保留在pickle中。以下是使用sklearn API的示例。

{'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}

产生

$sql  = "SELECT * FROM comments WHERE photo_id = " . $database->escape_string($photo_id) ORDER  BY photo_id ASC";
$result = mysqli_query( $con,$sql);
$arr = array();
while ($row = mysqli_fetch_array($result)){
    $arr[] = $row;
}
echo json_encode($arr);

答案 1 :(得分:0)

要添加到@ytsaig 的答案中,如果您在 early_stopping_rounds 方法中使用 clf.fit() 参数,则会生成某些附加参数,但不会作为 clf.get_xgb_params() 方法的一部分返回。可以按如下方式直接访问它们:clf.best_scoreclf.best_iterationclf.best_ntree_limit

参考:https://xgboost.readthedocs.io/en/latest/python/python_api.html#xgboost.XGBClassifier.fit