AUC优化与树模型的那些事

前言

最近忽然发现lightgbm中有个梯度优化的loss
以前一直好奇树模型如何对auc进行优化
于是查了一下,作此博文

AUC在梯度树与DNN中优化的不同之处

之前我在文章https://qrfaction.github.io/2018/04/02/end2endAUC/简述了DNN对AUC的优化方式
基本就是用一个度量函数将AUC公式中不可微的部分进行平滑

然而在梯度树中这带来了困难
见下图
这里写图片描述
可知梯度树在计算梯度时主要获得的是针对每个样本的梯度信息
而原先在DNN中的AUC是无需将梯度细粒度到每个样本
只要有一个loss信息回传就OK了

可见原先的方式不再适用

Learning to rank 之 LambdaMART

MART其实就是GBDT(他名字很多诶)

这个方法其实是将rankLoss的梯度信息作为模型中的label y
即定义了模型的预测score的分数上升方向

首先定义一个rankLoss,其中si , sj是模型输出的score
这里写图片描述
这里写图片描述

在对si求偏导
这里写图片描述
于是得到了一个si的上升/下降方向
这里写图片描述
再令有序对(i,j)的排序label Sij = 1
这里写图片描述
最后再将λi作为sample i的label
这里写图片描述

从而实现了树模型的Learning to rank

但这个我感觉应该对auc直接优化有很大帮助
因为毕竟auc本身也是一种基于排序的指标
但是否具有一致性就不清楚了
不过尝试了一下lightgbm中的lambda mart 训练速度超级慢…懒得试了