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. 贪吃蛇(C++实现,VC6.0编译,使用了EasyX图形库)

    程序效果: 代码: //main.cpp 1 #include <iostream> #include<fstream> #include <graphics.h> ...

  2. ANE原生代码的调试(安卓)

    忙了一天终于有空继续这篇教程了. ANE的原生代码的调试其实在Adobe的官网有介绍的,但是同样很含糊,我摸索了一段时间现在记录下我的心得. 首先你得安装Eclipse,然后你得启动Eclipse 然 ...

  3. Jedis下的ShardedJedis(分布式)使用方法(一)

    原来项目中有用到Redis用作缓存服务,刚开始时只用一台Redis就能够满足服务,随着项目的慢慢进行,发现一台满足不了现有的项目需求,因为Redis操作都是原子性这样的特性,造成有时同时读写缓存造成查 ...

  4. [No000044]你是否还傻到把最好的留在最后?

    想写这篇文章很久了. 因为一直觉得我们人有一个毛病,总是喜欢将最好的东西留到最后才享用,或者等最后再给别人. 但人们往往忽略了至关重要的一点,就是这个最好有一个保质期.可以说人能拥有的快乐触发点.有机 ...

  5. 隐写-CTF中图片隐藏文件分离方法总结

    0x00 前言 在安全的大趋势下,信息安全越来越来受到国家和企业的重视,所以CTF比赛场次越来越多,而且比赛形式也不断的创新,题目也更加新颖有趣,对选手的综合信息安全能力有一个较好的考验,当然更好的是 ...

  6. History 对象

    History 对象 History 对象包含用户(在浏览器窗口中)访问过的 URL. History 对象是 window 对象的一部分,可通过 window.history 属性对其进行访问. 注 ...

  7. 窗口 - dialog - 概述与基本使用

    什么是dialog 对话框是一种特殊的窗口,它在顶部有一个工具栏,在底部有一个按钮栏.默认情况下,对话框(dialog)只有一个显示在头部右侧的关闭工具. 用户可以配置对话框行为来显示其他工具(比如: ...

  8. WP老杨解迷:发布包多少大小合适

    有位做安卓的老兄这样描述发布包大小问题:发布包和女人一样,新包如年轻女子,不能太瘦,太瘦没有货,所以大家都喜欢身段窈窕的少女,正火的产品如中年妇女,要得是风韵魅力,胖瘦已经不那么重要,但是也不能太胖, ...

  9. How To Create an IE-Only Stylesheet

    https://css-tricks.com/how-to-create-an-ie-only-stylesheet/ https://css-tricks.com/snippets/css/css- ...

  10. 常用 redis 命令(for php)

    Redis 主要能存储 5 种数据结构,分别是 strings,hashes,lists,sets 以及 sorted sets. 新建一个 redis 数据库 $redis = new Redis( ...