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

Posted SilenceGTX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xgboost中如何自定义metric(python中)相关的知识,希望对你有一定的参考价值。

正好在参加携程的比赛,用的xgboost的算法,但携程比赛的测评函数比较奇怪,不是传统的那些,而是取precision≥0.97的情况下,recall的最大值。那无疑这个测评函数是要自己写的(官方没给),可是我怎么把它放进xgboost里呢?这样我设置silent=1时,我每一步都能看到train和eval上的结果。

起初以为在param里定义了就行,但屡屡报错,后来终于找到了方法。

首先是metric的写法(直接拿携程比赛那个来说吧):

def maxRecall(preds,dtrain): #preds是结果(概率值),dtrain是个带label的DMatrix
    labels=dtrain.get_label() #提取label
    preds=1-preds
    precision,recall,threshold=precision_recall_curve(labels,preds,pos_label=0)
    pr=pd.DataFrame({precision:precision,recall:recall})
    return Max Recall:,pr[pr.precision>=0.97].recall.max()

参数和轮数就按一般设置,然后watchlist不能少,不然就不会输出东西了,比如watchlist=[(xgb_train,‘train‘), (xgb_test,‘eval‘)]

最后就是xgb.train中的内容了,写成:

bst=xgb.train(param,xg_train,n_round,watchlist,feval=maxRecall,maximize=False)

就行了。feval就是你的metric,maximize要加上,虽然不知道具体有什么用……

 

以上是关于xgboost中如何自定义metric(python中)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XGboost 针对不同的“eval_metric”优化 sklearn 管道?

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

将 XGBoost eval_metric 交叉验证计算与权重匹配

HDFS--@Metric是如何生效的?

XGBoost的损失函数和评价指标

XGBoost 的自定义目标函数,包括外部数据列