机器学习 | 详解GBDT在分类场景中的应用原理与公式推导
本文始发于个人公众号:TechFlow,原创不易,求个关注
今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型。
在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理。GBDT最大的特点就是对于损失函数的降低不是通过调整模型当中已有的参数实现的,若是通过训练新的CART决策树来逼近的。也就是说是通过增加参数而不是调整参数来逼近损失函数最低点。
如果对于这部分不是很理解的话,可以通过下方的链接回顾一下之前的内容:
机器学习 | 详解GBDT梯度提升树原理,看完再也不怕面试了
逻辑回归损失函数
在我们开始GBDT模型原理的讲解和推导之前,我们先来回顾一下逻辑回归当中的相关公式和概念。
首先,我们先来写出逻辑回归的预测函数:
\]
图像画出来是这样的,其中的\(h_{\theta}(x)\)表示表示了模型预测x这个样本属于类别1的概率。
在二分类问题当中,只有0和1两个类别, 两个类别的概率只和为1。所以我们可以得到\(P(y=0|x;\theta)=1 - h_{\theta}(x)\)。
我们希望模型在y=0的时候,使得\(1 - h_{\theta}(x)\)尽量大,否则则使得\(h_{\theta}(x)\)尽量大,我们用指数的形式把两者综合写出了它的损失函数L。
\]
这个值涉及到指数,计算起来不太方便,所以我们会对它求对数进行简化。等式两边都取对数之后,可以得到:
\]
这个就是逻辑回归损失函数的由来。
GBDT二分类
我们将GBDT模型应用在二分类的场景当中的原理其实和逻辑回归一样,只不过在逻辑回归当中\(h_{\theta}(x)\)是一个线性函数,而在GBDT当中,\(h_{\theta} = \sum_{m=1}^M f_m(x)\),是一个加法模型。
在GBDT的回归问题当中,\(h_{\theta}\)就是GBDT产出的最后结果,而在二分类问题当中,我们还需要对这个结果加上一个sigmoid函数。我们令上面的\(h_{\theta}\)为\(F_M(x)\),所以模型可以表达为:
\]
我们把这个式子带入逻辑回归的损失函数当中,可以得到:
L(x_i, y_i | F_M(x)) &= -y_i\log (\frac{1}{1 + e^{-F_M(x_i)}}) - (1 - y_i)\log (1 - \frac{1}{1 + e^{-F_M(x_i)}} )\\
&= y_i \log(1 + e^{-F_M(x_i)}) + (1 - y_i)[F_M(x_i) + \log (1 + e^{-F_M(x_i)})]
\end{aligned}
\]
我们对损失函数计算负梯度,也即计算\(L(x, y |F_M(X))\)对\(F_M(x)\)的偏导:
\]
这个负梯度也就是我们常说的残差,这个残差的结果和我们之前在回归问题当中的推导结果非常近似。它表示预测概率和真实概率的概率差,这个残差就是下一棵CART树的训练目标。
训练过程
我们再把模型训练的整个过程给整理一下,把所有的细节串联起来。
首先我们先明确几个参数,M表示决策树的数量。\(F_m(x_i)\)表示第m轮训练之后的整体,\(F_m(x_i)\)即为最终输出的GBDT模型。
初始化
首先,我们创建第一棵回归树即\(f_1(x)\),在二分类问题当中,它是先验信息,所以:
\[f_1(x) = \log \frac{p1}{1-p1}$$,p1表示**样本中类别1的比例**\]
i. 对于第2到第m棵回归树,我们要计算出每一棵树的训练目标, 也就是前面结果的残差:
\[r_{mi}=-[\frac{\partial L(y_i, f(x_i))}{\partial f(x_i)}]_{f(x) = f_{m-1}(x)}=y_i - \hat{y_i}
\]ii. 对于当前第m棵子树而言,我们需要遍历它的可行的切分点以及阈值,找到最优的预测值c对应的参数,使得尽可能逼近残差,我们来写出这段公式:
\[c_{mj}=\mathop{\arg\min}_{c} \ \ \ \sum_{x_i\in R_{mj}}L(y_i, f_{m-1}(x_i) + c)
\]这里的\(R_{mj}\)指的是第m棵子树所有的划分方法中叶子节点预测值的集合,也就是第m棵回归树可能达到的预测值。其中j的范围是1,2,3...J。
接着,我们更新\(f_m(x) = f_{m-1}(x) + \sum_{j=1}^J c_{mj}I(x \in R_{mj})\),这里的I是一个函数,如果样本落在了\(R_{mj}\)节点上,那么I=1,否则I=0。
我们得到
\[F_M(x) = f_M(x) = \sum_{m=1}^Mf_m(x)=\sum_{m=1}^M\sum_{j=1}^J c_{mj}I(x \in R_{mj})
\]某条样本类别为1的概率为:
\[P(x_i) = \frac{1}{1 + e^{-F_M(x_i)}}
\]
多分类问题
二分类的问题解决了,多分类也并不困难,其实也只是二分类的一个简单拓展。
我们假设样本的类别数量是k,那么我们需要k个不同的树集合来拟合每个类别的概率。我们写出类别q的概率的公式:
\]
softmax函数的损失函数为:\(L = -\sum y_i \log(P(y_i | x))\),虽然从公式里看这是一个求和值,但是对于多分类问题来说,只会有一个类别为1,其余均为0,所以只会有一项不为0,我们假设这一项为q。我们代入求出它的负梯度:
\]
可见在多分类问题当中,这k个树集合同样是拟合真实的样本标签与预测的概率的差值,本质上和二分类问题是一样的。
总结
到这里,关于GBDT在分类场景当中的原理我们也介绍完了。其实整篇推倒下来,无论是过程和结果都和回归问题大同小异。只不过由于分类问题用到了sigmoid函数,使得计算偏导以及残差的过程稍稍复杂了一些,其他并没有什么本质差别。
从今天的文章当中我们也可以看出来,GBDT模型适用的范围很广,回归、二分类以及多分类问题都可以适用,是一个非常强大的模型。也正因此,它在深度学习兴起之前一度非常流行,基于它也衍生出了许多的改进的版本和应用。比如XGboost,GBDT + LR等等。也因此在面试的时候经常会问到其中的问题,如果有准备面试的同学,建议一定要将原理吃透哦。
今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。
机器学习 | 详解GBDT在分类场景中的应用原理与公式推导的更多相关文章
- 机器学习 | 详解GBDT梯度提升树原理,看完再也不怕面试了
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第30篇文章,我们今天来聊一个机器学习时代可以说是最厉害的模型--GBDT. 虽然文无第一武无第二,在机器学习领域并没有 ...
- 详解BOM用途分类及在汽车企业中的应用
摘要:在整车企业中,信息系统的BOM是联系CAD.CAPP.PDM和ERP的纽带,按照用途划分产品要经过产品设计,工程设计.工艺制造设计.生产制造4个阶段,相应的在这4个过程中分别产生了名称十分相似但 ...
- 【机器学习详解】SMO算法剖析(转载)
[机器学习详解]SMO算法剖析 转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51227754 CSDN−勿在浮沙筑高台 本文力 ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
- 详解在Word文档中常见的各种公式编辑问题
正常情况下,我们在安装完成MathType之后会直接加载在Word文档中,Word文档中的MathType比较复杂,新手操作遇到麻烦也是常有的事,今天就来给大家详解下Word文档中常见的MathTyp ...
- 【PPT详解】曹欢欢:今日头条算法原理
[PPT详解]曹欢欢:今日头条算法原理 悟空智能科技 4月8日 公众号后台回复:“区块链”,获取区块链报告 公众号后台回复:“sq”,进入区块链分享社群 热文推荐: 1000位专家推荐,20本区块链必 ...
- 详解 QT 源码之 Qt 事件机制原理
QT 源码之 Qt 事件机制原理是本文要介绍的内容,在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使 Qt 程序进入消息循环.下面我们就到ex ...
- Android 网络框架之Retrofit2使用详解及从源码中解析原理
就目前来说Retrofit2使用的已相当的广泛,那么我们先来了解下两个问题: 1 . 什么是Retrofit? Retrofit是针对于Android/Java的.基于okHttp的.一种轻量级且安全 ...
- JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解
二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...
随机推荐
- 有关 Session 的那些事儿
原文链接: https://blog.by24.cn/archives/about-session.html Web 开发中,Session 是经常用到的概念,但是在日常交流中,似乎又经常引起误解. ...
- R星游戏如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?
一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 R星游戏如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无需下载 ...
- MVC + EFCore 项目实战 - 数仓管理系统8 - 数据源管理下--数据源预览
上篇我们完成了数据源保存功能,并顺便看了保存后的数据源列表展示功能. 本篇我们开始开发预览功能,用户预览主要步骤: 1.点击数据源卡片预览按钮 2.查看数据源包含的表 3.点击表名,预览表中数据 ...
- jmeter之断言复制过来的内容也会失败
今天遇到个很纳闷的事儿,就决定记下来,在做jmeter断言的时候,明明我是从相应文本中拷贝出来的内容,但是依旧会断言失败,差了很多资料无果,最终请教了大佬才发现是特殊字符的问题 jmeter断言中不会 ...
- 完了!TCP出了大事!
前情回顾:<非中间人就不能劫持TCP了吗?> 不速之客 夜黑风高,乌云蔽月. 两位不速之客,身着黑衣,一高一矮,潜入Linux帝国. 这一潜就是一个多月,直到他们收到了一条消息······ ...
- 11-14序列化模块之json、pickle、shelve
序列化的目的 1.以某种存储形式使自定义对象持久化: 2.将对象从一个地方传递到另一个地方. 3.使程序更具维护性. 序列化--转向一个字符串数据类型序列--及时字符串 何处用到: 数据存储 网络上传 ...
- Skill 脚本演示 ycLayerExcel.il
https://www.cnblogs.com/yeungchie/ ycLayerExcel.il 用于 Tape-out 流程,获取当前用到的所有 lpp 等信息,并按照自定格式输出为 Excel ...
- luogu P3264 [JLOI2015]管道连接
LINK:管道连接 一张无向图 有P个关键点 其中有K个集合 各个集合要在图中形成联通块 边有边权 求最小代价. 其实还是生成树问题 某个点要和某个点要在生成树中 类似这个意思. 可以发现 是斯坦纳树 ...
- jmeter如何设置全局变量
场景:性能测试或者接口测试,如果想跨线程引用(案例:A线程组里面的一个输出,是B线程组里面的一个输入,这个时候如果要引用),这个时候你就必须要设置全局变量;全链路压测也需要分不同场景,通常情况,一个场 ...
- Taurus.MVC 2.3.4 :WebAPI 文档集成测试功能升级:WebAPI批量自动化测试功能。
前言: 最近升级了一下Taurus.MVC,现在最新版本是:Taurus.MVC 2.3.4,源码版本和nuget同步. 下面分三个步骤介绍下新版本的WebAPI批量自动化测试功能. 1.启用WebA ...