XGBoost最佳迭代

时间:2018-08-21 19:12:55

标签: python-3.x machine-learning regression xgboost

我正在使用XGBoost算法进行回归,

clf = XGBRegressor(eval_set = [(X_train, y_train), (X_val, y_val)],
                       early_stopping_rounds = 10, 
                       n_estimators = 10,                    
                       verbose = 50)

clf.fit(X_train, y_train, verbose=False)
print("Best Iteration: {}".format(clf.booster().best_iteration))

它可以正确训练自己,但是打印功能会引发以下错误,

TypeError: 'str' object is not callable

如何获取模型的最佳 迭代次数

此外,如何打印每个 一轮中的培训 错误

2 个答案:

答案 0 :(得分:1)

您的错误是XGBRegressorbooster属性是一个字符串,它指定要使用的增强器类型,而不是实际的增强器实例。从文档中:

  

增强器:字符串
  指定要使用的增强器:gbtree,gblinear或dart。

为了获得实际的助推器,您可以改为致电get_booster()

>>> clf.booster
'gbtree'
>>> clf.get_booster()
<xgboost.core.Booster object at 0x118c40cf8>
>>> clf.get_booster().best_iteration
9
>>> print("Best Iteration: {}".format(clf.get_booster().best_iteration))
Best Iteration: 9

我不确定您问题的后半部分,即:

  

此外,如何打印每轮**的训练错误

但希望您不受阻碍!

答案 1 :(得分:1)

对于您的TypeError:使用get_booster()而不是booster()

print("Best Iteration: {}".format(clf.get_booster().best_iteration))

要在预测时使用最佳迭代次数,请使用一个名为ntree_limit的参数,该参数指定要使用的增强器数量。训练过程生成的值是best_ntree_limit,可以在对模型进行以下主题的训练后调用:clg.get_booster().best_ntree_limit。更具体地说,当您进行预测时,请使用:

best_iteration = clg.get_booster().best_ntree_limit
predict(data, ntree_limit=best_iteration)

如果您在.fit()命令中指定了这些参数,则可以打印训练和评估过程

clf.fit(X_train, y_train,
        eval_set = [(X_train, y_train), (X_val, y_val)],
        eval_metric = 'rmse',
        early_stopping_rounds = 10, verbose=True)

注意::Early_stopping_rounds参数应该位于.fit()命令中,而不是XGBRegressor()实例中。

另一个注意事项: verbose = 50中的XGBRegressor()是多余的。 verbose变量应该在您的.fit()函数中,并且为True或False。对于verbose = True所做的操作,在详细部分下的read here。这直接影响到您的第三个问题。