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. 扫盲 BT Sync——不仅是同步利器,而且是【分布式】网盘

    先向大伙儿宣布个好消息-- 经过多位热心读者的大力支持,经过几天的努力,已经完成了"微软网盘"到"BitTorrent Sync"的迁移工作. 再次向这批热心读 ...

  2. hdu5269 Chip Factory

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=5536 题目: Chip Factory Time Limit: 18000/9000 MS ( ...

  3. stanford coursera 机器学习编程作业 exercise 3(使用神经网络 识别手写的阿拉伯数字(0-9))

    本作业使用神经网络(neural networks)识别手写的阿拉伯数字(0-9) 关于使用逻辑回归实现多分类问题:识别手写的阿拉伯数字(0-9),请参考:http://www.cnblogs.com ...

  4. POJ1426Find The Multiple[BFS]

    Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 27433   Accepted: 114 ...

  5. jqueryUI小案例

    实现上面的功能: <%@ page language="java" import="java.util.*" pageEncoding="utf ...

  6. vijos1907[noip2014]飞扬的小鸟(完全背包)

    描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告 ...

  7. ES6 .Set数据结构去除重复元素

    用法一 var set = new Set([1, 2, 3, 4, 2, 8, 4]); //两个2 for (var elem of set) { console.log(elem) // 输出结 ...

  8. Firefox访问https出现 ssl_error_weak_server_ephemeral_dh_key错误

    一个自签名的内部网站当ff访问时出现以下错误 SSL received a weak ephemeral Diffie-Hellman key in Server Key Exchange hands ...

  9. .NET Core)的ZooKeeper异步客户端

    支持断线重连.永久watcher.递归操作并且能跨平台(.NET Core)的ZooKeeper异步客户端   阅读目录 什么是ZooKeeper? 项目介绍 提供的功能 使用说明 FAQ 在公司内部 ...

  10. Linux共享库 socket辅助方法

    //sockhelp.h#ifndef _vx #define _vx #ifdef __cplusplus extern "C" { #endif /** * readn - 读 ...