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

Hac*_*k-R 5 r lightgbm

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

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

文档说:

obj 目标函数,可以是字符或自定义目标函数。示例包括回归、regression_l1、huber、binary、lambdarank、multiclass、multiclass

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

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

metric, 默认={l2 for regression}, {binary_logloss for binary classification},{ndcg for lambdarank}, type=multi-enum, options=l1,l2,ndcg,auc,binary_logloss,binary_error... l1, 绝对损失, alias=mean_absolute_error, mae l2, square loss, alias=mean_squared_error, mse l2_root, root square loss, alias=root_mean_squared_error, rmse huber, Huber loss fair, Fair loss poisson, Poisson回归ndcg, NDCG map, MAP auc, AUC binary_logloss, log损失 binary_error。对于一个样本,正确分类为 0,错误分类为 1。multi_logloss,多类分类的对数损失 multi_error。多类分类的错误率支持多度量,分隔为,metric_freq,默认=1,度量输出的频率为类型是_training_metric,

我最好的猜测是

  1. obj 是算法的目标函数,即它试图最大化或最小化什么,例如“回归”意味着它最小化平方残差
  2. eval 我猜这只是您希望在算法适合时计算的一个或多个附加统计信息。
  3. metric我不知道这与obj和 的用法有何不同eval

Lit*_*les 4

正如你所说,

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

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

混乱源于对几个 gbm 变体(xgboost、lightgbm 和 sklearn 的 gbm + 可能是 R 包)的影响,所有变体的参数名称都略有不同。例如 xgb.cv() 在 python 中使用,eval但对于 R 它使用metric。然后在 python 和 R 的 lgbm.cv() 中eval使用。

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