如何在 python 中为 xgboost 编写自定义评估指标?

Posted

技术标签:

【中文标题】如何在 python 中为 xgboost 编写自定义评估指标?【英文标题】:How to write a custom evaluation metric in python for xgboost? 【发布时间】:2016-09-23 00:40:16 【问题描述】:

我想添加 kappa 评估指标以在 Python 中的 xgboost 中使用。我无法理解如何将 Python 函数与 xgboost 连接。

根据 xgboost 文档,“用户可以添加多个评估指标,对于 python 用户,请记住将指标作为参数对列表而不是映射传递,这样后一个 'eval_metric' 不会覆盖前一个”

这已在 xgboost's github page 中针对 R 提出,但不适用于 Python。

例如,如果 kappa 函数是:

def kappa(preds, y):
    # perform kappa calculation
    return score

如何使用 xgboost 实现它? 在eval_metric 参数中将'kappa' 指定为字符串 结果为XGBoostError: unknown evaluation metric type: kappa

同样指定 kappa 方法对象会导致 XGBoostError: unknown evaluation metric type: <function kappa at 0x7fbef4b03488>

如何在 python 中的 xgboost 中使用自定义评估指标?

【问题讨论】:

【参考方案1】:

将您的方法更改为:

def kappa(preds, y):
    # perform kappa calculation
    return 'kappa', score

并将其与feval 参数一起使用:

bst = xgb.train(params, dtrain, num_rounds, watchlist, feval=kappa, maximize=False)

在编写自定义评估指标时,请记住设置 maximize 参数。将其设置为 true 意味着算法在评估指标的得分越大时越好。

【讨论】:

以上是关于如何在 python 中为 xgboost 编写自定义评估指标?的主要内容,如果未能解决你的问题,请参考以下文章

xgboost中如何自定义metric(python中)

我们如何在 Hive 中为自定义 Writable 类型编写自定义 ObjectInspector?

在python中为Hadoop Map Reduce创建自定义可写键/值类型?

如何根据所选国家/地区在 MVC3 中为美国或加拿大邮政编码验证编写自定义验证器?

XGBoost:在默认指标上提前停止,而不是自定义评估函数

如何在python(windows平台)中安装xgboost包?