码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-08-27 00:26:00      阅读:1346      评论:0      收藏:0      [点我收藏+]

标签:

正好在参加携程的比赛,用的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中)

标签:

原文地址:http://www.cnblogs.com/silence-gtx/p/5812012.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!