xgboost + Focal Loss实现

xgboost+Focal Loss

Focal Loss的主要思想就是改变损失函数。可以参考Focal Loss理解 - 三年一梦 - 博客园

xgboost如果想应用focal loss可以使用自定义损失函数来实现。

首先介绍一个比较好用的求导的python包  sympy。用这个包来求导,可以比较轻松求出一阶导和二阶导。

from sympy import *
import numpy as np
# y指的是true label
# p指的是预测出来的概率值(是经过sigmoid转换之后的)
# a指的是local foss的参数
# b指的是用来处理非平衡的参数
y,p,a,b=symbols('y p a b')
loss=b*(-y*log(p)*(1-p)**a)-(1-y)*log(1-p)*p**a  #同时考虑了focal loss参数和处理非平衡参数的损失函数
grad=diff(loss,p)*p*(1-p) #求一阶导
print('grad:')
print(grad)
hess=diff(grad,p)*p*(1-p) #求二阶导
print('hess:')
print(hess)

###输出###
grad:
p*(1 - p)*(a*b*y*(1 - p)**a*log(p)/(1 - p) - a*p**a*(1 - y)*log(1 - p)/p - b*y*(1 - p)**a/p + p**a*(1 - y)/(1 - p))
hess:
p*(1 - p)*(p*(1 - p)*(-a**2*b*y*(1 - p)**a*log(p)/(1 - p)**2 - a**2*p**a*(1 - y)*log(1 - p)/p**2 &#
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值