我正在使用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))
模型正确地进行了训练,但是print函数引发了以下错误:
TypeError: 'str' object is not callable
如何获取模型的最佳迭代次数?
此外,如何打印每一轮的训练误差?
回答:
对于您的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_limitpredict(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的作用,请在这里阅读verbose部分。这直接影响您的第三个问题。