GBDT算法推导过程

m次迭代,n个类别,那么就意味着学习了m*n棵回归树

train过程:假设有8个训练样本,3个类别

步骤一、假设所有样本的F矩阵,F矩阵是8*3的,F矩阵刚开始全为0,而实际每个样本都有一个属于的类别y,y能组成一个实际的矩阵也是8*3的

步骤二、决策树是不断学习残差的过程,这里的残差经过计算是y-p,其中p是由F矩阵求出来的,即

这里要知道决策树的分裂依据:遍历所有的特征纬度,这里是3个特征,对于每一个特征,选择一个合适的分裂点,

如果属性是数字

也就是遍历所有那个属性的值,eg[10,20,30,40,50,60,70]然后分类节点假设是3个的话就需要从中随机采样3个数据作为属性,eg[20,40,60],那么在这个属性进行遍历的时候就可以以该点的值作为分界限,分割左右子树

如果属性是标量

就直接按照节点属性是否等于标量为分界线,分隔左右子树

如何选择最佳属性和最佳分隔点:

我们已经将树分隔成了左右子树了,那么怎么从那么多的分隔中选择最佳的分隔点呢

这里,leftTargets,rightTargets都是左右子树样本点的残差,也就是前面的y-p的值,所以这里分隔的依据是:选择左右子树残差的均方差和最小

这样一直分割下去,只要不超过最大深度,一直到达叶子节点

 

叶子节点的值:

 

其中:

 

建立好一棵树后,需要更新F矩阵,

接着再更加F矩阵和y矩阵重新计算残差,重新生成新的树,这样迭代M次,F矩阵是在不断地逼近y矩阵的(注意,这里的3个类的决策树是同时进行的,也就是一次迭代,生成的是3棵树,如下代码所示:

测试

将测试样本输入到m*n棵树中,每个类别是m棵树,不断累加这m棵树的的结果就是最终的f[instance_id]的值,然后选择值最大的f作为最终的label

公式推导部分:

简言之:最小化目标函数,泰勒展开,f’(x)=0求得叶子节点的值

论文名字:

Greedy function approximation : A Gradient Boosting Machine

gbdt推导和代码的更多相关文章

  1. 《神经网络的梯度推导与代码验证》之FNN(DNN)的前向传播和反向推导

    在<神经网络的梯度推导与代码验证>之数学基础篇:矩阵微分与求导中,我们总结了一些用于推导神经网络反向梯度求导的重要的数学技巧.此外,通过一个简单的demo,我们初步了解了使用矩阵求导来批量 ...

  2. 《神经网络的梯度推导与代码验证》之FNN(DNN)前向和反向过程的代码验证

    在<神经网络的梯度推导与代码验证>之FNN(DNN)的前向传播和反向梯度推导中,我们学习了FNN(DNN)的前向传播和反向梯度求导,但知识仍停留在纸面.本篇章将基于深度学习框架tensor ...

  3. 《神经网络的梯度推导与代码验证》之CNN的前向传播和反向梯度推导

    在FNN(DNN)的前向传播,反向梯度推导以及代码验证中,我们不仅总结了FNN(DNN)这种神经网络结构的前向传播和反向梯度求导公式,还通过tensorflow的自动求微分工具验证了其准确性.在本篇章 ...

  4. 《神经网络的梯度推导与代码验证》之CNN前向和反向传播过程的代码验证

    在<神经网络的梯度推导与代码验证>之CNN的前向传播和反向梯度推导 中,我们学习了CNN的前向传播和反向梯度求导,但知识仍停留在纸面.本篇章将基于深度学习框架tensorflow验证我们所 ...

  5. 《神经网络的梯度推导与代码验证》之vanilla RNN的前向传播和反向梯度推导

    在本篇章,我们将专门针对vanilla RNN,也就是所谓的原始RNN这种网络结构进行前向传播介绍和反向梯度推导.更多相关内容请见<神经网络的梯度推导与代码验证>系列介绍. 注意: 本系列 ...

  6. 《神经网络的梯度推导与代码验证》之vanilla RNN前向和反向传播的代码验证

    在<神经网络的梯度推导与代码验证>之vanilla RNN的前向传播和反向梯度推导中,我们学习了vanilla RNN的前向传播和反向梯度求导,但知识仍停留在纸面.本篇章将基于深度学习框架 ...

  7. 《神经网络的梯度推导与代码验证》之LSTM的前向传播和反向梯度推导

    前言 在本篇章,我们将专门针对LSTM这种网络结构进行前向传播介绍和反向梯度推导. 关于LSTM的梯度推导,这一块确实挺不好掌握,原因有: 一些经典的deep learning 教程,例如花书缺乏相关 ...

  8. SMO推导和代码-记录毕业论文4

    SMO的数学公式通过Platt的论文和看这个博客:http://www.cnblogs.com/jerrylead/archive/2011/03/18/1988419.html,大概弄懂了.推导以后 ...

  9. BP神经网络算法推导及代码实现笔记zz

    一. 前言: 作为AI入门小白,参考了一些文章,想记点笔记加深印象,发出来是给有需求的童鞋学习共勉,大神轻拍! [毒鸡汤]:算法这东西,读完之后的状态多半是 --> “我是谁,我在哪?” 没事的 ...

随机推荐

  1. PHP加载另一个文件类的方法

    加载另一个文件类的方法 当前文件下有a.php 和b.php,想要在class b中引入class a <?php    class a    {        public $name = ' ...

  2. MVC编写的新闻页面

    1.新闻发布系统 2.架构确立 3.数据表确立 4.分层 entity dao BaseDao sqlserver jar包 接口层(NewsDetailDAO) impl (NewsDetailDA ...

  3. 在Eclipse彻底删除一个项目

    1. 先必须关闭项目 2. 再从workspace中把项目删除

  4. Android两个独立的应用跳转实现方式小结

    在Android应用实现过程中,有时候会遇到应用之间相互跳转的情况,比如跳转至系统设置界面.WiFi设置界面.或者其它的用户实现的应用主界面等等.这里总结了几种常见的打开其它应用activity的方式 ...

  5. HTML 学习笔记 CSS(选择器4)

    CSS 后代选择器 后代选择器(descendant selector)又称为包含选择器.后代选择器可以选择作为某元素后代的元素. 根据上下文选择元素 我们可以定义后代选择器来创建一些规则,使这些规则 ...

  6. 实现鼠标拖动canvas绘制的图片

    不啰嗦上代码: <html> <head> <meta http-equiv="Content-Type" content="text/ht ...

  7. ASP.NET点击按钮弹出确认对话框方法

    开发asp.net网页应用程序的时候,有些页面的按钮需要增加一个确认对话框,比如: 实现这个功能比较简单,代码这样写: Button.Attributes["onclick"] = ...

  8. swift 集合类型(二)

    说到swift的集合类型,就不得不谈到Dictionary.包含一个键值对组合的集合. var air = ["name":"warner","tit ...

  9. 金旭亮老师的Scoekt编程摘要

    Socket提供了众多的属性,还提供了SetSocketOption方法来设置各种选项,对.NET网络应用程序的数据通讯进行“微调”.    Socket的功能出奇地强大,在.NET平台上,它支持以下 ...

  10. Display HTML in WPF and CefSharp

    https://www.codeproject.com/articles/881315/display-html-in-wpf-and-cefsharp-tutorial-part Download ...