GBDT简介

Python014

GBDT简介,第1张

GB代表的是Gradient Boosting,意为梯度提升,梯度是一种数学概念,一个函数的梯度方向是函数上升最快的方向,相反的,负梯度方向是函数下降最快的方向。

算法步骤:

这里的DT我们不要简单理解为广义的决策树,考虑到我们GB算法中需要将多个弱分类器的结果累加起来,然而如果是分类问题,结果是无法相加的,比如“男”+“女”等于什么?所以说GBDT中所有的树都是回归树,而不是分类树,也就是说DT独指Regression Decision Tree。

接着,我们对问题进行进一步细分,来分析具体的一棵回归树的运行流程。

作为对比,简要回顾下分类树的运行过程:以ID3为例,穷举每一个属性特征的信息增益值,每一次都选取使信息增益最大的特征进行分枝,直到分类完成或达到预设的终止条件,实现决策树的递归构建。

回归树的运行流程与分类树基本类似,但有以下两点不同之处:

这个Shrinkage听上去好像比较复杂,其实很简单,就是类似于梯度下降中步长缩减的意思,但一般来说GBDT的迭代公式中会有两个缩减系数,一个超参—学习率,一个不是超参,是我们需要最优化的参数

这里面的gama就是我们需要去求出来的参数。

所以说要注意:Shrinkage所指的是超参数v,即学习率,不要将它和gama混为一谈。

一般来说,越小的学习率会导致迭代轮数的增多,一般取v = 0.01.

并且我们我们可以针对类别1求出残差

类别2 求出残差

类别3 求出残差

编程语言

数据挖掘和数据分析不一样,数据分析可以利用一些现成的分析工具完成,但是数据挖掘绝大部分要依赖于编程,在数据挖掘领域常用的编程语言有R、Python、C++、java等,R和python最受欢迎。

大数据处理框架

做数据挖掘不可避免的要接触大数据,目前常用的大数据框架就两个,Hadoop和Spark,Hadoop的原生开发语言是Java,资料多,Spark的原生开发语言是Scala,不过也有Python的API。

数据库知识

这个不用多说,既然是和数据打交道,数据库知识自然少不了,常见关系数据库和非关系数据库知识都要掌握,如果要处理大数量数据集,就得掌握关系型数据库知识,比如sql、oracle。

数据结构与算法

精通数据结构和算法对数据挖掘来说相当重要,在数据挖掘岗位面试中也是问的比较多的,数据结构包括数组,链表,堆栈,队列,树,哈希表,集合等,而常见的算法包括排序,搜索,动态编程,递归等。

机器学习/深度学习

机器学习是数据挖掘的最重要部分之一。 机器学习算法可建立样本数据的数学模型,来进行预测或决策, 深度学习是更广泛的机器学习方法系列中的一部分。这部分的学习主要分两块,一是掌握常见机器学习算法原理,二是应用这些算法并解决问题。

统计学知识

数据挖掘是一个交叉学科,不仅涉及编程和计算机科学,还涉及到多个科学领域,统计学就是不可获取的一部分,它可以帮我们更快的识别问题,区分因果关系和相关性。

关于数据挖掘需要哪些技能,青藤小编就和您分享到这里了。如果你对大数据工程有浓厚的兴趣,希望这篇文章能够对你有所帮助。如果您还想了解更多数据分析师、大数据工程师的技巧及素材等内容,可以点击本站的其他文章进行学习。

之前介绍过 梯度下降法与牛顿法 ,GBDT与XGBoost就与这两种方法有关。

GBDT泛指所有梯度提升树算法,包括XGBoost,它也是GBDT的一种变种,为了区分它们,GBDT一般特指“Greedy Function Approximation:A Gradient Boosting Machine”里提出的算法,只用了一阶导数信息。

算法流程如下:

算法流程图也可以如下图:

GBDT常用损失函数

分类算法:

分类算法中CART树也是采用回归树

(1) 指数损失函数:

负梯度计算和叶子节点的最佳负梯度拟合与Adaboost相似。

(2) 对数损失函数:

二元分类:

多元分类:

回归算法:

(1)均方差:

(2)绝对损失:

负梯度误差为:

(3)Huber损失:

均方差和绝对损失的折中,对远离中心的异常点,采用绝对损失,而中心附近的点采用均方差。界限一般用分位数点度量。损失函数如下:

负梯度误差:

(4) 分位数损失:分位数回归的损失函数,表达式为

θ为分位数,需要我们在回归前指定。对应的负梯度误差为:

Huber损失和分位数损失,减少异常点对损失函数的影响。

问题:GBDT如何减少异常点的影响?

GBDT优点:

GBDT缺点:

Adaboost与GBDT:

RF与GBDT:

RF优点:

RF缺点:

XGBoost目标函数及归一化公式

归一化解释

XGBoost参数定义

XGBoost第t次迭代: 训练第t棵子树,损失函数最小求参数,计算过程如下

假设分到j这个叶子节点上的样本只有一个。那么,w* j 如下:

回归树的学习策略

XGBoost的打分函数

树节点分裂方法

寻找分为点可以使用Weighted Quantile Sketch—分布式加权直方图算法

稀疏值处理

关键的改进是只访问非缺失的条目I k 。 所提出的算法将不存在的值视为缺失值并且学习处理缺失值的最佳方向。稀疏感知算法运行速度比初始版本快50倍

XGBoost的其它特性

Shrinkage and Column Subsampling

Shrinkage and Column Subsampling均是为了防止过拟合

XGBoost的系统设计

Column Block

xgboost的并行不是tree粒度的并行,而是特征粒度上。

缓存感知访问(Cache-aware Access)

XGBoost的优点

XGBoost与GBDT对比

问题:XGBoost为什么使用CART树而不是用普通的决策树呢?

XGBoost参数说明

回归树 生成算法如下,使用最小二乘偏差(LSD)。

分类树 算法流程如下,使用GINI指数

GINI 指数:

分类中,假设 K 个类,样本属于第 k 类的概率为 p k ,概率分布的基尼指数为:

样本集合 D 的基尼指数为:

C k 为数据集D中属于第k类的样本子集,| * |表示样本集中样本的个数。

数据集 D 根据特征 A 在某一取值 a 上进行分割,得到 D 1 、D 2 两部分,则在特征 A 下集合 D 的基尼指数为:

停止条件:

剪枝

决策树防止过拟合方法:

代价复杂度剪枝 Cost-Complexity Pruning(CCP) 方法对CART剪枝,算法流程如下:

其中 C(T)为误差(例如基尼指数),|T| 为 T 的叶节点个数,alpha 为非负参数,用来权衡训练数据的拟合程度和模型的复杂度。

剪枝例子如下:

例如 t 1 节点,R(t)即剪枝后误差,数据所占比例16/16,节点误差率 = 该节点较少类别的数/该节点类别总数 = 8/16

R(Tt)为剪枝前误差,即叶子节点误差之和,以该节点为根节点的4叶子节点均只有一个类别的样本,该节点较少类别的数/该节点类别总数 = 0,所以R(Tt) = 0

参考