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要加上,虽然不知道具体有什么用……

时间: 2024-10-22 23:06:11

xgboost中如何自定义metric(python中)的相关文章

Python中什么是变量Python中定义字符串

在Python中,变量的概念基本上和初中代数的方程变量是一致的. 例如,对于方程式 y=x*x ,x就是变量.当x=2时,计算结果是4,当x=5时,计算结果是25. 只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型. 在Python程序中,变量是用一个变量名表示,变量名必须是大小写英文.数字和下划线(_)的组合,且不能用数字开头 例如 : 在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如:  这种变量本身类型不固

钉钉扫码登录中的签名算法在python中的实现

签名算法为HmacSHA256,签名数据是当前时间戳timestamp,密钥是appId对应的appSecret计算出来的签名值,算出来的digest再经过base64加密后即是所需要的签名数据.官方文档中只给了Java和PHP的示例demo,因此,根据Java和PHP的demo写一个python版的. 1 import hmac 2 from base64 import standard_b64encode 3 4 5 def get_ding_talk_signature(app_secre

numpy中int类型与python中的int

[code] import numpy as np nparr = np.array([[1 ,2, 3, 4]]) np_int32 = nparr[0][0] # np_int=1 py_int = 1234 #打印类型 print("type(py_int32)="+str(type(py_int32))) print("type(np_int)="+str(type(np_int))) #numpy 的int32 转 int64 np_int64=np.in

在IDL中调用自定义Python Module

在IDL中调用自定义PythonModule 要在IDL8.3中调用自定义的Python Module以实现在IDL中不方便完成的任务.如使用一些开发包,但是这个开发包并不支持IDL,毕竟使用IDL的人数还是相对较少的.因此,混合编程是一个解决之道.下面介绍在IDL(32位,下面的介绍都只是针对32位的IDL8.3)中调用自定义的PythonModule的操作步骤. 1)  下载Slither(The IDL toPython Bridge).下载地址http://research.jacque

Python中的Descriptor

Python中的描述符 描述符的定义: 通常情况下,我们可以认为"假设对象的某个属性被绑定了(__get__, __set__, __delete__)这三个方法中的任意一个方法",那么我们称该属性为"描述符" class Foo(object): def init(self, name, age): self.name = name self.age = age foo = Foo("pizza", 18) 我们不能称 foo.name, fo

Python中的指针:有什么意义?

如果您曾经使用过C或C ++等低级语言,那么您可能已经听说过指针.指针允许您在部分代码中创建高效率.它们也会给初学者带来困惑,并且可能导致各种内存管理错误,即使对于专家也是如此.那么它们在Python中的位置,以及如何在Python中模拟指针? 为什么Python没有指针? 事实是我不知道.Python中的指针本身可以存在吗?可能,但指针似乎违背了Python的禅宗.指针鼓励隐含的变化而不是明确的变化.通常,它们很复杂而不是简单,特别是对于初学者.更糟糕的是,他们乞求用脚射击自己的方法,或做一些

python中_、__和__xx__的区别

python中_.__和__xx__的区别 本文为译文,版权属于原作者,在此翻译为中文分享给大家. 英文原文地址:Difference between _, __ and __xx__ in Python 在学习Python时,很多人都弄不清楚各种下划线的意思,而且在这之前已经给其他人解释过很多遍了,是时候把它记录下来. "_"单下划线 Python中不存在真正的私有方法.为了实现类似于c++中私有方法,可以在类的方法或属性前加一个“_”单下划线,意味着该方法或属性不应该去调用,它并不

zhlan--【偷】Python中的赋值运算符

>>>>Python中的赋值运算符: >>>>Python中的比较运算符:

(转载)Python中:self和__init__的含义 +

(注:原文地址 Python中:self和__init__的含义 + 为何要有self和__init__) 背景 回复: 我写的一些Python教程,需要的可以看看 中SongShouJiong的提问: Python中的self,__init__的含义是啥? 为何要有self,__init这些东西? 解释之前,先说几句 1.到目前为止,我虽然也已写了不算很少的python的代码,但是,还真的没有太多接触self和__init__这两个东西. 只能算是大概了解. 2.为了搞懂其含义,现学现卖,去看