您的位置:首页 > 其它

xgboost:一个纯小白的学习历程

2016-11-25 00:20 369 查看
xgboost:一个纯小白的学习历程

标签(空格分隔): 机器学习 决策树 xgboost GBDT

短短三天,一开始对决策树都深感陌生的我在网上进行一番“扫荡”之后,研读了相关的技术博客,对各种名词进行了深度了解,也陆陆续续整理了自己的思路,接下来就谈谈这几天我都经历了什么吧~

为了能对xgboost有一个更好的认识,我还是把之前看过又有些遗忘的书《数据挖掘原理与实践》拿出来翻一翻,其中第3章中对于决策树的基本概念、构建及其三种算法都有较详细的解说如想了解此书,可点击此处,接下来我将对这三部分进行简要的阐述:

决策树

1. 决策树的基本概念

决策树(Decision Tree)是一种树型结构,包括决策节点(内部节点)、分支和叶节点三部分。作为一个预测模型,它代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分叉路径则代表的某个可能的属性值,而每个叶结点则对应从根节点到该叶节点所经历的路径所表示的对象的值。看图可能会更容易☟☟☟☟☟




决策树可以用来对未知样本进行分类,分类过程如下:从决策树的根节点开始,从上往下沿着某个分支往下搜索,直到叶节点,以叶节点的类标号值作为该未知样本所属类标号。

2. 决策树的构建

构建过程中主要考虑两方面:

(1)选合适的属性作为决策树的节点

(2)在适当的位置停止划分过程

3. 经典算法

主要有ID3算法(Iterative Dichotomiser 3)、C4.5算法、CART算法(分类回归树)以及Random Forest,下面通过表格来对这4个算法进行了解吧!~


分类算法属性选择标准使用方法特点
ID3信息增益自顶向下的贪心策略只能处理分类属性数据,划分过程中容易由于子集规模过小造成统计特征不充分而停止,其属性选择标准可能导致过度拟合。
C4.5信息增益率悲观剪枝可为多叉树,输出变量只能是分类型,能够处理连续型和离散型属性数据,对缺失值的数据直接分配到概率最大的分支,会对生成的树进行后剪枝处理。但在构造过程中需对数据集进行多次的顺序扫描和排序,且产生的决策树不够稳定。
CARTGini系数二元递归划分方法/代价复杂性剪枝法构成的是一个二叉树,输入和输出变量可为分类型或数值型,它在每一步的决策时只能是“是”或者“否”,采用代理测试处理缺失值,采用预剪枝和后剪枝相结合的方式剪枝
Random Forest随机随机选择方法包含多个决策树的分类器,每棵决策树之间是没有关联的,不会产生过拟合的现象,容易实现并行化计算。
补充知识点:

1.信息熵():其定义为离散随机事件出现的概率,一个系统越是有序,信息熵就越低,反之一个系统越是混乱,它的信息熵就越高。可以被认为是系统有序化程度的一个度量。

2.信息增益:针对一个一个特征而言的,就是看一个特征,系统有它和没有它时的信息量各是多少,两者的差值就是这个特征给系统带来的信息增益。其容易偏向取值较多的属性。



3.上述算法仅仅是个简单介绍,具体的可以点击此处进行深入了解

对于决策树我们也有了进一步的了解,那么接下来就来看看xgboost是一个怎样的存在吧~不过深入了解之前我们稍微认识一下xgboost的前生GDBT~

GBDT(Gradient boosting Decision Tree)

1.基本概述

GBDT是以决策树(CART)为基学习器的GB算法,是GB和DT的结合。GBDT中的决策树是回归树,是个弱模型,深度较小一般不会超过5,叶子节点的数量也不会超过10,对于生成的每棵决策树乘上比较小的缩减系数(学习率<0.1),有些GBDT的实现加入了随机抽样(subsample 0.5<=f<=0.8)提高模型的泛化能力。通过交叉验证的方法选择最优的参数。另外,它主要由三个概念组成:Regression Decision Tree(即DT),Gradient Boosting(即GB),Shrinkage (算法的一个重要演进分枝,目前大部分源码都按该版本实现)


2.核心

每一棵树学的是之前所有树结论和的残差,这个残差就是一个加预测值后能得真实值的累加量。例如:A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。


3.两种描述版本

(1)残差版本:把GBDT说成一个迭代残差树,认为每一棵迭代树都在学习前N-1棵树的残差,详情请看博客GBDT(MART) 迭代决策树入门教程

(2)Gradient版本:把GDBT说成一个梯度迭代树,使用梯度迭代下降法求解,认为每一棵迭代树都在学习前N-1棵树的梯度下降值,详情请看博客 GBDT(Gradient Boosting Decision Tree) 没有实现只有原理

PS:相信看完这两个版本的描述之后你会对GBDT有一个很好的了解了,那么接下来我们就来看看xgboost吧~

xgboost

1.基本概述

xgboost的全称是eXtreme Gradient Boosting是Gradient Boosting Machine的一个c++实现,它扩展和改进了GDBT,如今风靡Kaggle、天池、DataCastle、Kesci等国内外数据竞赛平台,被称为速度快效果好的boosting模型。其支持Python,R,Java,Scala,C++等多种编程接口。


2.特点

特点体现
速度快让一个程序在必要时占领一台机器,并且让所有迭代时一直跑到底,来防止重新分配资源的开销;机器内部采用单机多线程方式来并行加速匀速,机器之间通信基于rabit实现的all reduce的同步接口。
效果好xgboost的模型和传统的GBDT相比加入了对于模型复杂度的控制以及后期的剪枝处理,使得学习出来的模型更加不容易过拟合。
功能多能够求出目标函数的梯度和Hessian矩阵;允许用户在交叉验证时自定义误差衡量方法;可以计算变量重要性并画出树状图;可以选择使用线性模型替代树模型等
3.优化之处

(1)xgboost对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。另外,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。



(2)xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合。



(3)xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算。

(4)对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向。

(5)xgboost工具支持并行。

(6)可并行的近似直方图算法。

上面对于xgboost的介绍仅仅是初步,接下来会对其进行更深入地分享~

参考资料:

1.xgboost: 速度快效果好的boosting模型

2.XGBoost浅入浅出

3.一步一步理解GB、GBDT、xgboost

4.xgboost导读和实战
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息