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)

应用:

训练时要传入参数: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

时间: 2024-12-26 17:46:22

xgboost 自定义评价函数(metric)与目标函数的相关文章

ganglia监控自定义metric实践

Ganglia监控系统是UC Berkeley开源的一个项目,设计初衷就是要做好分布式集群的监控,监控层面包括资源层面和业务层面,资源层面包括cpu.memory.disk.IO.网络负载等,至于业务层面由于用户可以很方便的增加自定义的metric,因此可以用于做诸如服务性能.负载.出错率等的监控,例如某web服务的QPS.Http status错误率.此外,如果和Nagios集成起来还可以在某指标超过一定阈值时触发相应的报警. Ganglia相比zabbix的优势在于客户端收集agent(gm

xgboost中如何使用mae作为目标函数来优化

最近同事讨论到mae无法作为objective function的事情,因为mae无法求导.用mse作为objective,使用mae作为eval是通常的做法,但是优化不太好.就在网上找了些资料,看是否有好的objective来代替mae的,整理如下: kaggle上的讨论 https://www.kaggle.com/c/allstate-claims-severity/discussion/24520 overflow https://stackoverflow.com/questions/

xgboost入门与实战(原理篇)

http://blog.csdn.net/sb19931201/article/details/52557382 xgboost入门与实战(原理篇) 前言: xgboost是大规模并行boosted tree的工具,它是目前最快最好的开源boosted tree工具包,比常见的工具包快10倍以上.在数据科学方面,有大量kaggle选手选用它进行数据挖掘比赛,其中包括两个以上kaggle比赛的夺冠方案.在工业界规模方面,xgboost的分布式版本有广泛的可移植性,支持在YARN, MPI, Sun

R语言︱XGBoost极端梯度上升以及forecastxgb(预测)+xgboost(回归)双案例解读

R语言︱XGBoost极端梯度上升以及forecastxgb(预测)+xgboost(回归)双案例解读 XGBoost不仅仅可以用来做分类还可以做时间序列方面的预测,而且已经有人做的很好,可以见最后的案例. 应用一:XGBoost用来做预测 -------------------------------------------------- 一.XGBoost来历 xgboost的全称是eXtreme Gradient Boosting.正如其名,它是Gradient Boosting Mach

XGBoost实战

XGBoost自动读取数据,判断蘑菇是否有毒 二分类 # /usr/bin/python # -*- encoding:utf-8 -*- # 判断蘑菇是否有毒二分类 import xgboost as xgb import numpy as np # 1.xgBoost的基本使用 # 2.自定义损失函数的梯度和二阶导 # 3.binary:logistic/logitraw # 定义f: theta * x def log_reg(y_hat, y): p = 1.0 / (1.0 + np.

04-09 XgBoost算法

目录 XgBoost算法 一.XgBoost算法学习目标 二.XgBoost算法详解 2.1 XgBoost算法参数 2.2 XgBoost算法目标函数 2.3 XgBoost算法正则化项 2.4 XgBoost算法最小化目标函数 2.5 XgBoost算法举例 三.XgBoost算法优缺点 3.1 优点 3.2 缺点 四.小结 更新.更全的<机器学习>的更新网站,更有python.go.数据结构与算法.爬虫.人工智能教学等着你:https://www.cnblogs.com/nickchen

xgboost使用调参

https://blog.csdn.net/q383700092/article/details/53763328 github:https://github.com/dmlc/xgboost 论文参考:http://www.kaggle.com/blobs/download/forum-message-attachment-files/4087/xgboost-paper.pdf 基本思路及优点 http://blog.csdn.net/q383700092/article/details/6

XGBOOST使用指南

XGBOOST使用指南 <div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post"> <div class="htmledit_views"> <h

XGBoost使用教程(纯xgboost方法)一

一.导入必要的工具包# 导入必要的工具包import xgboost as xgb # 计算分类正确率from sklearn.metrics import accuracy_score二.数据读取XGBoost可以加载libsvm格式的文本数据,libsvm的文件格式(稀疏特征)如下:1  101:1.2 102:0.030  1:2.1 10001:300 10002:400...每一行表示一个样本,第一行的开头的“1”是样本的标签.“101”和“102”为特征索引,'1.2'和'0.03'