GBDT算法是一种监督学习算法。监督学习算法需要解决如下两个问题:

1.损失函数尽可能的小,这样使得目标函数能够尽可能的符合样本

2.正则化函数对训练结果进行惩罚,避免过拟合,这样在预测的时候才能够准确。

GBDT算法需要最终学习到损失函数尽可能小并且有效的防止过拟合。

以样本随时间变化对某件事情发生的变化为例,如下几副图形象的说明了机器学习的作用。

假设随着时间的变化对K话题存在如下样本:

如果没有有效的正则化,则学习结果会如下图所示:

这种情况下,学习结果跟样本非常符合,损失函数也非常小,但是这种样本在预测的时候,由于过拟合,失败率会很高。

如果损失函数太大,则学习结果如下图所示:

这种情况,学习结果跟样本差别太大,损失函数也很大,在预测的时候由于误差跳大,失败率也会很高。

损失函数和正则化防止过拟合平衡后的学习结果如下图所示:

在这种情况下损失函数和正则化函数防止过拟合达到了一个平衡,预测会比较准。

GBDT算法训练结果是一个决策森林。GBDT算法在训练的时候迭代N次,森林里面就会包含N棵树,每棵树都包含若干个叶子,每个叶子对应某个特定的分数。GBDT决策森林的学习的最终结果是

1.每个叶子对应的分数

2.每个决策树的结构

以是否喜欢某个游戏根据样本创建决策森林为例,如下图所示,5个样本,

假设进行了2次迭代,学习后的结果包含如下2棵树

是否喜欢某个游戏的分数,对于第一个样本男孩,在第一棵树得分是2分,在第二棵树得分是0.9分,它的总共分数是2.9分;第三个样本老爷爷,第一棵树得分是-1,第二棵树得分是0.9,得到它的分数是-0.1分。

对于上面的例子来说机器学习的最终目的是学习出上面第一棵树的函数f1,能够知道

f1(男孩)=2

第二棵树的函数f2,能够知道

f2(男孩)=0.9

还要学习出对于第一棵树,为什么age这个feature是第一个分裂元素?age为什么在15岁的时候进行分裂?

二:GBDT算法的原理

假设存在K棵树,则样本i的得分为:

n个样本,在K棵树下的目标函数为:

GBDT算法的迭代过程可以通过如下图表示:

第t轮迭代,我们需要确定的就是

第t轮迭代的目标函数为:

目标函数的变量是

我们通过优化第t轮迭代的目标函数来确定

以下数学推导过程为优化目标函数的过程。

优化t轮迭代的目标函数使用了泰勒展开式:

目标函数通过泰勒展开式展开结果如下:

其中:

表示损失函数的1阶导数,表示损失函数的2阶导数

在第t棵树中,存在一个映射函数能够把一个样本映射到某个叶子节点,这个方法称为:

为了说明这个方法的作用,对于如下样例树:

如上图标红所示,小男孩经过这个方法映射后,映射到了第一个叶子;老奶奶经过这个方法映射后,映射到第三个叶子

对于上图中的小男孩来说,=w1

在这里正则化函数定义为:

其中T表示树种包含T个叶子,对于上面的样例树,它的正则化惩罚函数为:

第j个叶子对应的样本集合用如下式子表示:

因为所有的样本都映射到了某个叶子上,所以目标函数可以从样本求和转化为叶子的求和:

目标函数转化为一元二次方程的求和。

我们再加上如下定义:

上面目标函数(一元二次方程求和)在为如下位置取得最小值:

最小值为:

可以看到目标函数的值是T个叶子的和

对于上图的样例树来说,对应的目标函数结果、为如下图所示:

上图中对第三个叶子节点进行了标红显示。可以看到第三个叶子节点包含了第2、第3、第5共3个样本。在计算第三个叶子的得分的时候,会用到3个样本的gradient statistics.

在创建决策树的时候,一个叶子节点分裂后的信息增益为:

最优的分裂点就是信息增益(Gain)最大的位置。

为了找到一个Feature的最大增益位置,首先根据这个Feature的值对样本进行排序,然后依次扫描所有样本,计算出每个分裂点的增益,然后取增益最大的位置作为分裂点。如下图所示:

上图中,先对年龄这个Feature进行了排序,然后从小到大依次扫描样本,计算每个分裂点的Gain,最终取增益最大的位置做为年龄这个Feature的分裂点。

但是在建立决策树的时候存在多个Feature,哪个Feature最先分裂呢?

答案是我们需要遍历所有Feature,找到每个Feature的增益最大的分裂点,并计算出每个Feature分裂点的增益,然后取所有Feature分裂点的增益最大的Feature作为最先分裂点。这个过程如下图表示:

最终使用贪婪法,重复上面的过程,建立一棵完整的决策树。

从上面的分裂过程可以知道,每次分裂的目的是为了获得更多的信息增益,如果分裂后信息增益为负数,则停止分裂

 

机器学习系列------1. GBDT算法的原理的更多相关文章

  1. GBDT 算法:原理篇

    本文由云+社区发表 GBDT 是常用的机器学习算法之一,因其出色的特征自动组合能力和高效的运算大受欢迎. 这里简单介绍一下 GBDT 算法的原理,后续再写一个实战篇. 1.决策树的分类 决策树分为两大 ...

  2. [机器学习系列] k-近邻算法(K–nearest neighbors)

    C++ with Machine Learning -K–nearest neighbors 我本想写C++与人工智能,但是转念一想,人工智能范围太大了,我根本介绍不完也没能力介绍完,所以还是取了他的 ...

  3. GBDT算法原理深入解析

    GBDT算法原理深入解析 标签: 机器学习 集成学习 GBM GBDT XGBoost 梯度提升(Gradient boosting)是一种用于回归.分类和排序任务的机器学习技术,属于Boosting ...

  4. Spark2.0机器学习系列之6:GBDT(梯度提升决策树)、GBDT与随机森林差异、参数调试及Scikit代码分析

    概念梳理 GBDT的别称 GBDT(Gradient Boost Decision Tree),梯度提升决策树.     GBDT这个算法还有一些其他的名字,比如说MART(Multiple Addi ...

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

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

  6. 【来龙去脉系列】RSA算法原理

    如果你问我,哪一种算法最重要? 我可能会回答"公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先 ...

  7. Weka中数据挖掘与机器学习系列之Weka Package Manager安装所需WEKA的附加算法包出错问题解决方案总结(八)

    不多说,直接上干货! Weka中数据挖掘与机器学习系列之Weka系统安装(四) Weka中数据挖掘与机器学习系列之Weka3.7和3.9不同版本共存(七) 情况1 对于在Weka里,通过Weka  P ...

  8. 机器学习--主成分分析(PCA)算法的原理及优缺点

    一.PCA算法的原理 PCA(principle component analysis),即主成分分析法,是一个非监督的机器学习算法,是一种用于探索高维数据结构的技术,主要用于对数据的降维,通过降维可 ...

  9. 机器学习 | 详解GBDT在分类场景中的应用原理与公式推导

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...

随机推荐

  1. javaweb页面上展示动态图片

    HTML <img alt="点击设定" name="CONSTRUCTIONPLANHIS_IMAGE_curr_img_0" src="vi ...

  2. 1、SQL可搜索可排序可分页存储过程, 2、范围内的随机时间 适用于sql 2008以上

    -- ============================================= -- Author: 蜘蛛王 -- Create date: 2015-10-29 -- Descri ...

  3. 关于CPLD与FPGA的对比分析

    1.PLD/FPGA/CPLD PLD(Programmable Logic Device):可编程逻辑器件,数字集成电路半成品,芯片上按照一定的排列方式集成了大量的门和触发器等基本逻辑元件,使用者按 ...

  4. iis 7.5 0x80004005 静态文件 html、js、css 500错误

    环境:iis 7.5 win7 64位 vs2012 问题:本地环境F5直接运行,没有任何问题,发布到IIS,静态文件不能访问,出现500错误,网上找了一堆解决办法,排除路径不正确,iis全部功能勾了 ...

  5. Ant OOM的问题

    ant 编译的问题 Android编译的有时候会报OOM的错误. 可能是Java的堆大小设置的问题 可在 ant.bat 脚本的  @echo off 语句后面添加: set ANT_OPTS=-Xm ...

  6. day1作业--三级菜单

    作业概述: 写一个三级菜单 实现如下功能: (1)可依次选择进入各子菜单 (2)在每一级按“b”都可以返回上一级,按“q"都可以退出 流程图: readme: 简介: three_menu. ...

  7. 通过Daffodil for VS使VS2010的IDE可以用VC6 VC7.1 VC9等编译器进行项目编译

    本文内容中的部分资料和知识来源于网络,具体引用出处不明. VS的IDE从VC6到VS2010的变化可谓是天翻地覆,最新的VS2010有一个特性就是支持多显示器开发,这无疑为我们的开发带来很大的便利. ...

  8. Kylin Java RESTful API

    最近在做大数据方面的开发, 学习研究了一段时间的kylin系统, 对于前端开发需要使用 RESTful API ,但是官网并没有提供详细的Java  API. 经过几天的看文档,最终写出了 Java ...

  9. java 绘图

    java 绘图 圆形.线条.矩形.填充 插入图片 文字 //绘图 import java.awt.*; import javax.swing.*; public class Index extends ...

  10. matlab工具箱之人眼检测+meanshift跟踪算法--人眼跟踪

    Viola-Jones 人眼检测算法+meanshift跟踪算法 这次的代码是对视频中的人眼部分进行检测加跟踪,检测用的是matlab自带的人眼检测工具箱 下面是matlab官网介绍这个算法的一些东西 ...