机器学习第一章:决策树、随机森林、GDBT和XGBoost
主要内容:
决策树Decision Tree
* 介绍
* 熵Entropy:衡量划分子树的标准 H(S) = -P1log(P1)-P2log(P2) (以2为底)
* 信息增益 Information Gain
* 常见算法
* 过度拟合 Overfitting
* 剪枝Prune
* 增益率GainRatio
* 更多的DT应用场景
* 连续函数、多分类、回归
决策树的优化Ensemble
* bagging
* Random Forest
* Boosting
* GBDT
* XGBoost
1、决策树
* 决策树简介
决策树学习时一直逼近离散值目标函数的方法,这种方法将从一组训练数据中学习到的函数表示为一课树。决策树叶子为类别名,其他节点由实体的特征组成。
建立决策树的过程,即树的生长过程就是不断的把训练数据集进行划分的过程,每次划分对于一个属性,也对应一个内部节点,划分所选的数学应使划分后的分组“差异最大”。决策树生成算法的不同主要体现在对“差异”的衡量方法上。
* 决策树的构造
优点;计算复杂度不高,输出结果易于理解,对于中间值的缺失不敏感,可以处理不相关特征数据
缺点;可能会删除过度匹配的问题
使用数据类型;数值型或者标称型数据
标称型数据:标称型目标变量的结果值在有限目标中取值,如真与假(标称型变量主要用于分类)
数值型数据:数值型目标变量则可以从无限的数值集合中取值,如0.100,42.001(数值型目标变量主要用于回归分析)
伪代码:
检测数据集中的每个子项是都属于同一类:
if so return 类标签;
Else
寻找划分数据集的最好特征
划分数据集
创建分支点
for每个划分的子集
调用函数createBranch并增加返回结果到分支节点中
return 分支节点
决策树的一般流程:
1)收集数据:可以用任何方法
2)准备数据:树构造方法只适用于标称型数据,因此数值型数据必须离散化
3)分析数据:可以使用任何方法,构造树完成之后,我们应该检查图形是否符合预期
4)训练算法:构造树的数据结构
5)测试算法:使用经验树计算错误概率
6)使用算法:此步骤可以适用于任何监督学习算法,而使用决策树可以更好的理解数据的内在含义
* 信息熵的相关概念
** 划分数据集的最大原则是:将无序的数据变得更加有序
** 信息增益:在划分数据集之前之后信息发生的变化成为信息增益,获得信息增益最高的特征就是最好的选择
** 熵(香农熵):信息的度量方式
待分类的事物可能划分在多个分类当中,则Xi的信息定义为L(xi) = -log(P(xi)),其中P(xi)是选择该分类的概率
** 信息期望值(熵):
H(Y) = -Sum(P(yi)log(P(yi))) ; n = 1,2,3,...n
n是分类的数目
** 条件信息熵:
H(Y|X) = -Sum(P(X=xi)*H(Y|X=xi)) ;n = 1,2,3,...n
= -Sum(P(X=xi)*P(Y|X=xi)*log(Y|X =xi))
= -Sum(P(Y,xi)*log(Y|X=xi))
** 信息增益:
IG(X) = H(Y)-H(Y|X)
** 信息增益率:
gr = (H(Y)-H(Y|X))/H(X)
注意;在决策树算法中,ID3使用信息增益,C4.5使用信息增益率
** Gini系数:
Gini系数是一种与信息熵类似的做特征选择的方式,可以用来数据的不纯度。在CART(Classification and Regression Tree)算法中利用基尼指数构造二叉决策树。
Gini(D) = 1-Sum((Pi)^2) ; i = 1,2,3,...n
其中,D表示数据集全体样本,Pi表示每种类别出现的概率,取个极端情况,如果数据集找那个所有的样本都为同一类,那么P0=1,Gini(D)=0,显然此时数据的不纯度最低。
与信息增益类似,我们可以计算如下表达式:
ΔGini(X) = Gini(D)-GiniX(D)
即加入特征X以后,数据不纯度减小的程度。很明显,在做特征选择的时候,我们可以选择ΔGini(X)最大的那个。
** 信息增益做特征选择的优缺点:
优点:
1)信息增益考虑了特征出现和不出现的两种情况,比较全面,一般而言效果不错
2)使用了所有样例的统计属性,减小对噪声的敏感程度
3)容易理解,计算简单
缺点:
1)信息增益考察的是特征对整个系统的贡献,没有具体到类别上,所以一般只能用来做全局的特征选择,而设法针对单个类别做特征选择
2)只能处理连续型的属性值,没法处理连续值的特征
3)算法天生偏向选择分支多的属性,容易导致overfitting
* ID3算法
1)对当前的样本集合,计算所有属性的信息增益
2)选择信息增益最大的属性作为测试属性
把测试属性取值相同的样本划为同一个样本子集
3)若样本集的类别属性只包含单个属性,则分支为叶子节点,
判断其属性只并标上相应的符号,然后调用,都在对子样本集递归调用本算法,直到所有数据被分类完成
* C4.5算法
是机器学习的另一种分类决策树算法,它是基于ID3算法改进后的一种重要算法,具有以下改进点:
1)用信息增益率来选择属性。ID3选择属性用的是子树的信息增益,也就是熵的变化值,而C4.5使用的是信息增益率
2)决策树构造过程中进行剪枝,因为某些具有很少元素的节点可能会使构造的决策树出现过拟合(overfitting),如果不考虑节点可能会更好
3)对非离散(连续值)数据也能处理
4)能够对不完整数据进行处理
* CART算法
CART决策树是一个十分有效的非参数分类和回归算法,通过构建树,修剪树,评估树来构建决策树
* 过度拟合(overfitting)
一棵完全决策树能非常准确的反应数据的特征,但是因失去了一般代表性而无法用于对新数据的分类或者预测,这种现象一般称为“过拟合”。
定义:给定一个假设H,如果在假设空间上存在另一个假设H',使得在训练集上H的错误率比H'小,而在测试集H上的错误率却比H'大,那么称H过度拟合训练数据。
原因:噪声数据导致过度拟合,缺乏代表性样本导致过分拟合
解决方法:
** 预剪枝法:通过提前停止分支的生长过程来实现
** 后剪枝法:从一个“充分生长”树中,按照自底向上的方式修剪掉多余的分支。
* 决策树的究极进化Ensemble
Bagging
Random Forest
Boosting
AdaBoost
XGBoost
* 随机森林Random Forest
步骤:
** 从原始训练数据集中,应用bootstrap(随机采样)方法有效的随机抽取K个新的自助样本集,并由此构建K课分类回归树,每次被抽到的样本组成了K个袋外数据
** 设有n个特征,则每一棵树的每个节点处随机抽取m个特征,通过计算每个特征蕴含的信息量,特征中选择一个最具有分类能力的特征进行节点分裂
** 每棵树最大限度的生长,不做任何裁剪
** 将生产的多课树组成随机森林,用随机森林对先的数据进行分类,分类结果按树分类器投票决定