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

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

此外,如何打印的训练误差

对于你的类型错误:使用 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()实例化中。

XGBRegressor()的另一个注:verbose = 50是多余的。verbose变量应位于.fit()函数中,并且为 True 或 False。有关 verbose=True 的作用,请阅读此处的详细部分。它直接影响您的第三个问题。

您的错误是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

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

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

但希望你畅通无阻!

最新更新