本文始发于个人公众号:TechFlow,原创不易,求个关注

今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型。

在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理。GBDT最大的特点就是对于损失函数的降低不是通过调整模型当中已有的参数实现的,若是通过训练新的CART决策树来逼近的。也就是说是通过增加参数而不是调整参数来逼近损失函数最低点。

如果对于这部分不是很理解的话,可以通过下方的链接回顾一下之前的内容:

机器学习 | 详解GBDT梯度提升树原理,看完再也不怕面试了

逻辑回归损失函数

在我们开始GBDT模型原理的讲解和推导之前,我们先来回顾一下逻辑回归当中的相关公式和概念。

首先,我们先来写出逻辑回归的预测函数:

\[h_{\theta}(x) = \frac{1}{1 + e^{-\theta^Tx}}
\]

图像画出来是这样的,其中的\(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。

\[l(\theta) = -h_{\theta}(x)^y(1 - h_{\theta}(x))^{1-y}
\]

这个值涉及到指数,计算起来不太方便,所以我们会对它求对数进行简化。等式两边都取对数之后,可以得到:

\[L(\theta)=log(l(\theta))=-\sum_{i=1}^N[y_i\log h_{\theta}(x_i)+(1 - y_i)\log (1 - h_{\theta}(x_i))]
\]

这个就是逻辑回归损失函数的由来。

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)\),所以模型可以表达为:

\[P(y=1|x) = \frac{1}{1 + e^{-F_M(x)}}
\]

我们把这个式子带入逻辑回归的损失函数当中,可以得到:

\[\begin{aligned}
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)\)的偏导:

\[-\frac{\partial L}{\partial F_M} = y_i - \frac{1}{1 + e^{-F_M(x)}} = y_i - \hat{y_i}
\]

这个负梯度也就是我们常说的残差,这个残差的结果和我们之前在回归问题当中的推导结果非常近似。它表示预测概率和真实概率的概率差,这个残差就是下一棵CART树的训练目标。

训练过程

我们再把模型训练的整个过程给整理一下,把所有的细节串联起来。

首先我们先明确几个参数,M表示决策树的数量。\(F_m(x_i)\)表示第m轮训练之后的整体,\(F_m(x_i)\)即为最终输出的GBDT模型。

  1. 初始化

    首先,我们创建第一棵回归树即\(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。

  2. 我们得到

    \[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})
    \]

  3. 某条样本类别为1的概率为:

    \[P(x_i) = \frac{1}{1 + e^{-F_M(x_i)}}
    \]

多分类问题

二分类的问题解决了,多分类也并不困难,其实也只是二分类的一个简单拓展。

我们假设样本的类别数量是k,那么我们需要k个不同的树集合来拟合每个类别的概率。我们写出类别q的概率的公式:

\[P(y=q|x) = \frac{e^{F_q(x)}}{\sum_{i=1}^k e^{F_i(x)}}
\]

softmax函数的损失函数为:\(L = -\sum y_i \log(P(y_i | x))\),虽然从公式里看这是一个求和值,但是对于多分类问题来说,只会有一个类别为1,其余均为0,所以只会有一项不为0,我们假设这一项为q。我们代入求出它的负梯度:

\[-\frac{\partial L}{\partial F_q} = y_q - \frac{e^{F_q(x)}}{\sum_{i=1}^k e^{F_i(x)}}= y_q - \hat{y_q}
\]

可见在多分类问题当中,这k个树集合同样是拟合真实的样本标签与预测的概率的差值,本质上和二分类问题是一样的。

总结

到这里,关于GBDT在分类场景当中的原理我们也介绍完了。其实整篇推倒下来,无论是过程和结果都和回归问题大同小异。只不过由于分类问题用到了sigmoid函数,使得计算偏导以及残差的过程稍稍复杂了一些,其他并没有什么本质差别。

从今天的文章当中我们也可以看出来,GBDT模型适用的范围很广,回归、二分类以及多分类问题都可以适用,是一个非常强大的模型。也正因此,它在深度学习兴起之前一度非常流行,基于它也衍生出了许多的改进的版本和应用。比如XGboost,GBDT + LR等等。也因此在面试的时候经常会问到其中的问题,如果有准备面试的同学,建议一定要将原理吃透哦。

今天的文章到这里就结束了,如果喜欢本文的话,请来一波素质三连,给我一点支持吧(关注、转发、点赞)。

机器学习 | 详解GBDT在分类场景中的应用原理与公式推导的更多相关文章

  1. 机器学习 | 详解GBDT梯度提升树原理,看完再也不怕面试了

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第30篇文章,我们今天来聊一个机器学习时代可以说是最厉害的模型--GBDT. 虽然文无第一武无第二,在机器学习领域并没有 ...

  2. 详解BOM用途分类及在汽车企业中的应用

    摘要:在整车企业中,信息系统的BOM是联系CAD.CAPP.PDM和ERP的纽带,按照用途划分产品要经过产品设计,工程设计.工艺制造设计.生产制造4个阶段,相应的在这4个过程中分别产生了名称十分相似但 ...

  3. 【机器学习详解】SMO算法剖析(转载)

    [机器学习详解]SMO算法剖析 转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51227754 CSDN−勿在浮沙筑高台 本文力 ...

  4. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  5. 详解在Word文档中常见的各种公式编辑问题

    正常情况下,我们在安装完成MathType之后会直接加载在Word文档中,Word文档中的MathType比较复杂,新手操作遇到麻烦也是常有的事,今天就来给大家详解下Word文档中常见的MathTyp ...

  6. 【PPT详解】曹欢欢:今日头条算法原理

    [PPT详解]曹欢欢:今日头条算法原理 悟空智能科技 4月8日 公众号后台回复:“区块链”,获取区块链报告 公众号后台回复:“sq”,进入区块链分享社群 热文推荐: 1000位专家推荐,20本区块链必 ...

  7. 详解 QT 源码之 Qt 事件机制原理

    QT 源码之 Qt 事件机制原理是本文要介绍的内容,在用Qt写Gui程序的时候,在main函数里面最后依据都是app.exec();很多书上对这句的解释是,使 Qt 程序进入消息循环.下面我们就到ex ...

  8. Android 网络框架之Retrofit2使用详解及从源码中解析原理

    就目前来说Retrofit2使用的已相当的广泛,那么我们先来了解下两个问题: 1 . 什么是Retrofit? Retrofit是针对于Android/Java的.基于okHttp的.一种轻量级且安全 ...

  9. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

随机推荐

  1. 什么是viewstate,能否禁用?是否所用控件都可以禁用

    viewstate用于在两次postback之间保持状态的一种机制禁用viewstate将不能在回发之间保存状态 当控件状态无关使用viewstate将造成性能问题时需要禁用viewstate Vie ...

  2. Jarvisoj-web phpinfo

    题目入口:http://web.jarvisoj.com:32784/ 一进来就看到源码 简单分析之后知道考点是反序列化,注意到了关键字session_start(),这个函数是用于创建会话.但具体如 ...

  3. 《Python编程第4版 上》高清PDF|百度网盘免费下载|Python基础编程

    <Python编程第4版 上>高清PDF|百度网盘免费下载|Python基础编程 提取码:8qbi  当掌握Python的基础知识后,你要如何使用Python?Python编程(第四版)为 ...

  4. Django学习路30_view中存在重复名时,取第一个满足条件的

    在 settings 中添加 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.con ...

  5. CSS两列布局的N种实现

    一.什么是两列布局 两列布局分为两种,一种是左侧定宽.右侧自适应,另一种是两列都自适应(即左侧宽度由子元素决定,右侧补齐剩余空间).在CSS面试题里面属于常考题,也是一个前端开发工程师必须掌握的技能, ...

  6. python基础day1&2

    解决中文乱码问题 在开头加上 -*- encoding:utf-8 -*- if条件 if 条件: 结果#if elif else是单选,只走一条路 num = input('Please input ...

  7. Python List cmp()方法

    描述 cmp() 方法用于比较两个列表的元素.高佣联盟 www.cgewang.com 语法 cmp()方法语法: cmp(list1, list2) 参数 list1 -- 比较的列表. list2 ...

  8. PHP preg_filter() 函数

    preg_filter 函数用于执行一个正则表达式搜索和替换.高佣联盟 www.cgewang.com 语法 mixed preg_filter ( mixed $pattern , mixed $r ...

  9. 6.18 省选模拟赛 字符串 LCT SAM

    LINK:字符串 看起来很难做 考虑一种暴力 建立SAM后每次查询暴力扫儿子. 期望得分10分.实际得分10分. 另外一种发现每次扫儿子过于暴力 可以每次儿子向上做贡献 每次都暴力向上跳. 期望得分1 ...

  10. bzoj 3436小K的农场

    3436: 小K的农场 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2327 Solved: 1105 [Submit][Status][Discu ...