机器学习系列------1. GBDT算法的原理

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算法的原理,如需转载请自行联系原博主。

时间: 2024-10-04 19:42:46

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

阿里巴巴机器学习系列课程

亲爱的同学们,福利来临!随着机器学习领域的发展越来越火,阿里云机器学习PAI为广大机器学习爱好的学生提供免费的一站式算法平台,该平台提供上百种算法,并且兼容TensorFlow.Caffe.MXNET等深度学习框架,学生们还可以免费使用M40 GPU卡,这么好的福利到哪里去领呢? 点击开通机器学习PAI:https://data.aliyun.com/product/learn [新手必读,请务必要开通OSS和MaxCompute]https://tianchi.aliyun.com/compe

《Python机器学习——预测分析核心算法》——导读

前言 Python机器学习--预测分析核心算法 从数据中提取有助于决策的信息正在改变着现代商业的组织,同时也对软件开发人员产生了直接的影响.一方面是对新的软件开发技能的需求,市场分析师预计到2018年对具有高级统计和机器学习技术的人才需求缺口将达140000-190000人.这对具有上述技能的人员来说意味着丰厚的薪水和可供选择的多种有趣的项目.另一方面对开发人员的影响就是逐步出现了统计和机器学习相关的核心工具,这减轻了开发人员的负担.当他们尝试新的算法时,不需要重复发明"轮子".在所有

线程-Mina框架死锁检测算法的原理?

问题描述 Mina框架死锁检测算法的原理? 30C private void checkDeadLock() { if (!(this instanceof CloseFuture || this instanceof WriteFuture || this instanceof ReadFuture || this instanceof ConnectFuture)) { return; } StackTraceElement[] stackTrace = Thread.currentThre

机器学习与数据挖掘基本算法初步介绍

随着互联网技术的发展,特别是web2.0时代的到来,互联网为我们提供了丰富的数据来源,如何充分的利用这些数据,挖掘用户信息,是下一代互联网急需解决的问题. 机器学习和数据挖掘主要是解决以下几个方面的问题,分类与预测,优化,独立特征提取等.机器学习的很多算法都是基于以下图1中模型来进行设计.  图1 学习系统模型 我们应对外界环境的刺激输入,在实践的过程中不断学习,获取经验知识,并且运用我们所学到的经验知识指导我们日常生活实践,通过实践效果的反馈,也就是所获得的经验教训,从而不断更新积累我们的阅历

【Xamarin挖墙脚系列:Xamarin.IOS机制原理剖析】

原文:[Xamarin挖墙脚系列:Xamarin.IOS机制原理剖析] [注意:]团队里总是有人反映卸载Xamarin,清理不完全.之前写过如何完全卸载清理剩余的文件.今天写了Windows下的批命令,MAC下的Shell脚本. Windows 批: echo 'please run it as windows Administartor...' rd /s/q "C:\ProgramData\Mono for Android" rd /s/q "C:\ProgramData

《Python机器学习——预测分析核心算法》——第1章 关于预测的两类核心算法

第1章 关于预测的两类核心算法 Python机器学习--预测分析核心算法 本书集中于机器学习领域,只关注那些最有效和获得广泛使用的算法.不会提供关于机器学习技术领域的全面综述.这种全面性的综述往往会提供太多的算法,但是这些算法并没有在从业者中获得积极的应用. 本书涉及的机器学习问题通常是指"函数逼近(function approximation)"问题.函数逼近问题是有监督学习(supervised learning)问题的一个子集.线性回归和逻辑回归是解决此类函数逼近问题最常见的算法

IDA* 算法的原理和步骤

问题描述 IDA* 算法的原理和步骤 我想了解下IDA*算法的相关原理,我只需要知道它的运行原理和步骤,按顺序怎么执行下去的,麻烦大牛们给个解答,不需要代码,我弄懂了自然会写,谢谢

《Python机器学习——预测分析核心算法》——第2章 通过理解数据来了解问题

第2章 通过理解数据来了解问题 Python机器学习--预测分析核心算法新数据集(问题)就像一个包装好的礼物,它充满了承诺和希望.一旦你能解决它,你就收获了喜悦.但是直到你打开它,它都一直保持着神秘.本章就是告诉你怎么"打开"新的数据集,看清楚里面都有什么,知道如何处置这些数据,并且开始思考如何利用这些数据构建相应的模型. 本章有两个目的:一是熟悉这些数据集,这些数据集被用来作为解决各种类型问题的例子,主要是利用第4章和第6章介绍的算法:另一个目的就是展示Python中分析数据的工具包

机器学习——随机森林算法及原理

1. 随机森林使用背景 1.1 随机森林定义 随机森林是一种比较新的机器学习模型.经典的机器学习模型是神经网络,有半个多世纪的历史了.神经网络预测精确,但是计算量很大.上世纪八十年代Breiman等人发明分类树的算法(Breiman et al. 1984),通过反复二分数据进行分类或回归,计算量大大降低.2001年Breiman把分类树组合成随机森林(Breiman 2001a),即在变量(列)的使用和数据(行)的使用上进行随机化,生成很多分类树,再汇总分类树的结果.随机森林在运算量没有显著提