如何在 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 编写自定义评估指标?的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 Hive 中为自定义 Writable 类型编写自定义 ObjectInspector?
在python中为Hadoop Map Reduce创建自定义可写键/值类型?