首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XGBoost:# rounds等于n_estimators?

XGBoost:# rounds等于n_estimators?
EN

Data Science用户
提问于 2019-08-26 17:19:05
回答 1查看 6.4K关注 0票数 3

我正在运行一个回归XGBoost模型,并试图通过使用以下代码查看火车和测试错误来防止过度拟合:

代码语言:javascript
复制
eval_set = [(X_train, y_train), (X_test, y_test)]

xg_reg = xgb.XGBRegressor(booster='gbtree',
                          objective ='reg:squarederror',
                          max_depth = 6,
                          n_estimators = 100,
                          min_child_weight = 1,
                          learning_rate = 0.05,
                          seed = 1,early_stopping_rounds = 10)


xg_reg.fit(X_train,y_train,eval_metric="rmse", eval_set = eval_set, verbose = True)

打印如下:

代码语言:javascript
复制
[93]    validation_0-rmse:0.233752      validation_1-rmse:0.373165
[94]    validation_0-rmse:0.2334        validation_1-rmse:0.37314
[95]    validation_0-rmse:0.232194      validation_1-rmse:0.372643
[96]    validation_0-rmse:0.231809      validation_1-rmse:0.372675
[97]    validation_0-rmse:0.231392      validation_1-rmse:0.372702
[98]    validation_0-rmse:0.230033      validation_1-rmse:0.372244
[99]    validation_0-rmse:0.228548      validation_1-rmse:0.372253

但是,我注意到打印出的训练轮数,并且在evals_results中总是等于n_estimators。

代码语言:javascript
复制
In [92]: len(results['validation_0']['rmse'])
Out[92]: 100

如果我把树的数量改为600,那么轮数就会上升到600,等等。我的印象是每一轮训练的结果都是公制的,包括同时训练所有的树木。

这里发生什么事情?每一层树都被认为是单独的训练轮吗?

EN

回答 1

Data Science用户

回答已采纳

发布于 2019-08-26 19:36:36

对于梯度提升,真的没有“一层树”的概念,我认为这就是混乱发生的地方。每一次迭代(轮)适合于一棵树的一些损失函数的负梯度(在所有以前的迭代中使用更新模型的预测计算),在你的例子中,根均方误差。该算法在每一次迭代中都不适合树的集合。然后,将每棵树添加到所有先前拟合的树中,加上先前迭代中的最优权重,从而得到最终的预测结果。

你所看到的验证分数是,因此,你的完整模型的分数符合树的迭代。例如,这里的这一行:

代码语言:javascript
复制
[93]    validation_0-rmse:0.233752      validation_1-rmse:0.373165

是您的模型在validation_ 0和validation_1上的性能,该模型适合在以前迭代生成的过去梯度上的93棵树。

票数 6
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/58225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档