xgboost 自定义评价函数(metric)与目标函数

比赛得分公式如下:

其中,P为Precision , R为 Recall。

 

 

GBDT训练基于验证集评价,此时会调用评价函数,XGBoost的best_iteration和best_score均是基于评价函数得出。

评价函数:

input: preds和dvalid,即为验证集和验证集上的预测值,

return  string 类型的名称 和一个flaot类型的fevalerror值表示评价值的大小,其是以error的形式定义,即当此值越大是认为模型效果越差。

复制代码
1 from sklearn.metrics import confusion_matrix
2 def customedscore(preds, dtrain):
3     label = dtrain.get_label()
4     pred = [int(i>=0.5) for i in preds]
5     confusion_matrixs = confusion_matrix(label, pred)
6     recall =float(confusion_matrixs[0][0]) / float(confusion_matrixs[0][1]+confusion_matrixs[0][0])
7     precision = float(confusion_matrixs[0][0]) / float(confusion_matrixs[1][0]+confusion_matrixs[0][0])
8     F = 5*precision* recall/(2*precision+3*recall)*100
9     return 'FSCORE',float(F)
复制代码

 

对于一般的二分类问题,如果以score的形式定义,即当此值越大认为模型效果越好(和F-score类似)

confusion_matrixs = confusion_matrix(label, pred)
recall =float(confusion_matrixs[1][1]) / float(confusion_matrixs[1][0]+confusion_matrixs[1][1])
precision = float(confusion_matrixs[1][1]) / float(confusion_matrixs[0][1]+confusion_matrixs[1][1])


应用:

 训练时要传入参数:feval = customedscore,

复制代码
 1    params = { 'silent': 1,  'objective': 'binary:logistic' , 'gamma':0.1,
 2         'min_child_weight':5,
 3         'max_depth':5,
 4         'lambda':10,
 5         'subsample':0.7,
 6         'colsample_bytree':0.7,
 7         'colsample_bylevel':0.7,
 8         'eta': 0.01,
 9         'tree_method':'exact'}
10     model = xgb.train(params, trainsetall, num_round,verbose_eval=10, feval = customedscore,maximize=False)
复制代码

 

 

自定义 目标函数,这个我没有具体使用

复制代码
1 # user define objective function, given prediction, return gradient and second order gradient
2 # this is log likelihood loss
3 def logregobj(preds, dtrain):
4     labels = dtrain.get_label()
5     preds = 1.0 / (1.0 + np.exp(-preds))
6     grad = preds - labels
7     hess = preds * (1.0-preds)
8     return grad, hess
复制代码
# training with customized objective, we can also do step by step training
# simply look at xgboost.py's implementation of train
bst = xgb.train(param, dtrain, num_round, watchlist, logregobj, evalerror)

 

 

参考:

https://github.com/dmlc/xgboost/blob/master/demo/guide-python/custom_objective.py

http://blog.csdn.net/lujiandong1/article/details/52791117


ps:这是博客园上看到的一篇文章,不好收藏,所以转载过来,以便日后查看,侵删https://www.cnblogs.com/zle1992/p/6914577.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值