消除 LightGBM 中 eval、obj(目标)和指标的歧义

Disambiguating eval, obj (objective), and metric in LightGBM

提问人:Hack-R 提问时间:6/2/2017 更新时间:11/19/2022 访问量:4513

问:

我是参考 R 库问这个问题的,但我认为它同样适用于 Python 和 Multiverso 版本。lightgbm

有 3 个参数,您可以在其中为模型选择感兴趣的统计量 - 、 和 。我试图用通俗易懂的语言清楚地区分这 3 个的不同角色。metricevalobj

文档说:

obj 目标函数,可以是字符或自定义目标函数。示例包括回归、regression_l1、huber、二进制、 lambdarank、多类、多类

eval 评估函数,可以是(列表)字符或自定义 eval 函数

metric 没有 R 文档,除了 catch all 说“see paraters.md”,它也没有真正解释它,但它列出了以下选项:

metric, default={l2 for regression}, {binary_logloss for bintal 分类},{ndcg for lambdarank}, type=multi-enum, 选项=l1,l2,ndcg,auc,binary_logloss,binary_error... l1,绝对损失,别名=mean_absolute_error,mae L2,平方损失,别名=mean_squared_error,MSE l2_root,平方根损失,别名=root_mean_squared_error,rmse 胡贝尔,胡贝尔损失 公平,公平的损失 泊松, 泊松回归 ndcg, ndcg 地图, MAP AUC,AUC binary_logloss、日志丢失 binary_error。对于一个样本,0 表示正确分类,1 表示错误分类。 multi_logloss、多类分类的对数损失 multi_error。多类分类的错误率 支持多种指标,以 、 metric_freq 分隔,default=1,type=int 指标输出频率 is_training_metric,默认值=false,类型=bool 如果需要输出训练ndcg_at的指标结果,请将其设置为 true,default=1,2,3,4,5,type=multi-int,alias=ndcg_eval_at,eval_at NDCG评估位置,由,

我最好的猜测是

  1. obj是算法的目标函数,即它试图最大化或最小化的内容,例如“回归”意味着它最小化平方残差
  2. eval我猜只是您希望在算法拟合时看到计算的一个或多个额外统计数据。
  3. metric我不知道这与和 的用法有何不同objeval
R LightGBM

评论

0赞 jtlz2 1/10/2023
另请参阅 github.com/microsoft/LightGBM/issues/...

答:

4赞 Little Bobby Tables 7/27/2017 #1

正如你所说,

obj 是算法的目标函数,即它正在尝试什么 最大化或最小化,例如“回归”意味着它是最小化 残差的平方。

metric 和 eval 本质上是相同的。它们仅在使用位置上有所不同。Eval 与交叉验证方法一起使用(因为它可用于评估模型的提前停止等)。公制用于正常的列车情况。

这种混淆源于对几个 gbm 变体(xgboost、lightgbm 和 sklearn 的 gbm + 也许是 R 包)的影响,它们都具有略有不同的参数名称。例如,python 中的 xgb.cv() 使用,但对于 R,它使用 .然后在 lgbm.cv() 中用于 python 和 R。evalmetriceval

我一直很困惑在 xgboost 和 lightgbm 之间切换。Laurae 有一个绝对惊人的资源可以帮助您了解每个参数。

评论

0赞 Maths12 5/13/2020
对于 XGBoost 分类,OBJ/损失函数是否相同?
0赞 jtlz2 11/18/2022
链接已被“停用”..!
0赞 jtlz2 1/10/2023
LightGBM链接也死了