我有一个二进制分类数据集.我使用的是XGBoost.我更改了早期停止轮次的值和适配度.它每次都会给出相同的结果.我在下面分享了截图.结果相同的原因是什么?

early_stopping_rounds=10 early_stopping_rounds=10

early_stopping_rounds=16 early_stopping_rounds=16

early_stopping_rounds=30 early_stopping_rounds=30

and lastly epoch eval_metric plots: enter image description here

推荐答案

通过减少n_estimators棵树来结束训练的提前停止工作when and if最后增加的early_stopping_rounds棵树并没有提高判断集的性能.

当有多个评价集时,最后一个用于提前停止,当有多个评价指标时,再次使用最后一个.因此,在这里,我们需要注意您的曲线图中的AUC测试曲线.由于它会一直增加到100(n_estimators的默认设置),所以无论您为它设置多少次迭代以等待改进,提前停止都不会起作用.

此外,从the docs:

请注意,xgboost.train()将返回上次迭代的模型,而不是最好的模型.

这是来自原生API文档,我不确定这条注释是否同样适用于SCRICKIT-LEARN API.

Python相关问答推荐

具有多个组的条形图的不同y标度

Docker-compose:为不同项目创建相同的容器

将嵌套列表的字典转换为数据框中的行

Altair -箱形图边界设置为黑色,中线设置为红色

ambda将时间戳与组内另一列的所有时间戳进行比较

如何用symy更新分段函数

如何在具有重复数据的pandas中对groupby进行总和,同时保留其他列

比较两个数据帧并并排附加结果(获取性能警告)

try 在树叶 map 上应用覆盖磁贴

. str.替换pandas.series的方法未按预期工作

查找两极rame中组之间的所有差异

按列分区,按另一列排序

为什么这个带有List输入的简单numba函数这么慢

Python库:可选地支持numpy类型,而不依赖于numpy

在极性中创建条件累积和

如何设置视频语言时上传到YouTube与Python API客户端

ThreadPoolExecutor和单个线程的超时

如何在Polars中从列表中的所有 struct 中 Select 字段?

基于行条件计算(pandas)

freq = inject在pandas中做了什么?''它与freq = D有什么不同?''