ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

决策树、Bagging、随机森林、Boosting、Adaboost、GBDT、XGBoost

2019-08-05 19:00:30  阅读:325  来源: 互联网

标签:Bagging ... xi XGBoost 分类器 增益 Adaboost Gm 决策树


原文链接:https://blog.csdn.net/moledyzhang/article/details/79498520

决策树(Descision Tree)
决策树介绍
决策树基于“树”结构进行决策: 
- 每个“内部节点”对应于某个属性上的测试 
- 每个分枝对应于该测试的一种可能结果(即属性的某个取值) 
- 每个叶节点对应于一个“预测结果”

决策树学习的三个步骤
特征选择
决策树的生成
决策树的修剪 
特征选择是决定用哪个特征来划分特征空间; 
特征选择的准则:信息增益或信息增益比
案例:预测小明今天出门打不打球


信息增益

熵表示随机变量不确定性的度量 
假设随机变量X,它可能属于n个类中的任何一个,通过样本的统计,它分别属于各个类的概率分别为p1,p2,…pn,那么要想把某一样本进行归类所需要的熵就为: 
H(X)=−∑i=1npilog2pi
H(X)=−∑i=1npilog2pi

若pi=0,则0log0=0 
注:熵只依赖与X的分布,与X的取值无关
条件熵
随机变量X给定的情况下随机变量Y的条件熵H(Y|X),定义为 
H(Y|X)=∑i=1npiH(Y|X=xi)
H(Y|X)=∑i=1npiH(Y|X=xi)

这里pi=P(X=xi),i=1,2,...,npi=P(X=xi),i=1,2,...,n 
当熵和条件熵中的概率由数据估计(特别是极大似然估计)得到时,所对应的熵与条件熵分别称为经验熵与经验条件熵。
信息增益
特征A对数据集D的信息增益g(D,A)定义为集合D的经验熵H(D)与特征A给定条件下D的经验条件熵之差,即 
g(D,A)=H(D)−H(D,A)
g(D,A)=H(D)−H(D,A)
小明打球案例中,数据集D的经验熵为: 
H(D)=−914log2914−514log2514=0.940
H(D)=−914log2914−514log2514=0.940

特征天气对数据集D的信息增益为: 
g(D,天气)=H(D)−[514H(D1)+414H(D2)+514H(D3)]
g(D,天气)=H(D)−[514H(D1)+414H(D2)+514H(D3)]

=0.940−[514(−25log225−35log235)+414(−44log244−04log204)+514(−35log235−25log225)]
=0.940−[514(−25log225−35log235)+414(−44log244−04log204)+514(−35log235−25log225)]

=0.940−[5140.971+4140+5140.971]=0.940−0.694=0.246
=0.940−[5140.971+4140+5140.971]=0.940−0.694=0.246
其他特征对数据集D的信息增益的计算方法与之类似

信息增益比
以信息增益作为划分训练数据集的特征,存在偏向于选择取值较多的特征的问题。使用信息增益比可以对这一问题进行校正。 
特征A对训练数据集D的信息增益比gR(D,A)定义为其信息增益g(D,A)与训练数据集D关于特征A的值的熵HA(D)之比,即 
gR(D,A)=g(D,A)HA(D)
gR(D,A)=g(D,A)HA(D)

其中,HA(D)=−∑ni=1|Di||D|log2|Di||D|HA(D)=−∑i=1n|Di||D|log2|Di||D|,n是特征A取值的个数。
决策树生成算法
ID3
ID3的核心是使用信息增益准则选择特征,递归地构建决策树。

1)对当前样本集合,计算所有属性的信息增益;

2)选择信息增益最大的属性作为测试属性,把测试属性取值相同的样本划为同一个子样本集;

3)若子样本集的类别属性只含有单个属性,则分支为叶子节点,判断其属性值并标上相应的符号,然后返回调用处;否则对子样本集递归调用本算法。

ID3的bug:overfitting
可以把n个数据分成100%纯洁的n组,如编号

避免过拟合:没必要的分裂不要整,剪枝

C4.5
C4.5算法与ID3算法类似,使用信息增益比来选择特征

CART
CART使用基尼指数作为特征选择的准则,分类与回归树 
样本集合D的基尼指数 
Gini(D)=1−∑k=1K(|Ck||D|)2
Gini(D)=1−∑k=1K(|Ck||D|)2

特征A条件下集合D的基尼指数: 
Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)
Gini(D,A)=|D1||D|Gini(D1)+|D2||D|Gini(D2)

其中,D2=D-D1
决策树算法总结


决策树的究极进化
Bagging
Fit many large trees to bootstrap-resampled versions of the training data, and classify by majority vote.

Bagging的策略


(1)从样本集中重采样(有重复的)选出n个样本;

(2)在所有属性上,对这n个样本建立分类器(ID3、C4.5、CART、SVM、Logistic回归等);

(3)重复以上两步m次,即获得了m个分类器;

(4)将数据放在这m个分类器上,最后根据这m个分类器的投票结果,决定数据属于哪一类。

注:其实Bagging采用了综合多个弱分类器的结果得到一个强分类器的思想;每个数看到部分数据,所有树看到全部数据。 
m的取值为奇数。

Random Forest
Fancier version of bagging, add one more randomness in variable choosing.

随机森林在bagging基础上做了修改(有限样本,有限属性),基本思想为:

(1)从样本集中用Bootstrap采样(有放回的采样)选出n个样本(重采样);

(2)从所有属性中随机选择k个属性,选择最佳分割属性作为节点建立CART决策树;

(3)重复以上两步m次,即建立了m棵CART决策树

(4)这m个CART形成随机森林,通过投票表决结果,决定数据属于哪一类

Boosting
Fit many large or small trees to re-weighted versions of the training data. 
Classify by weighted majority vote.

Boosting是一族可将弱学习期提升为强学习器的算法(循环嵌套,不好的数据重新weight)。基本思想为: 
(1)先在原数据集中长出一个tree 
(2)把前一个tree没能完美分类的数据重新weight 
(3)用新的re-weighted tree再训练出一个tree 
(4)最终的分类结果由加权投票决定 


Adaboost就是这类算法中最具代表性的一个算法。

Adaboost
Adaboost算法思路
步骤1 . 首先,初始化训练数据的权值分布。每一个训练样本最开始时都被 赋予相同的权值: 1/N 
D1=(w11,w12,...,w1i,...,w1N),w1i=1N,i=1,2,...,N
D1=(w11,w12,...,w1i,...,w1N),w1i=1N,i=1,2,...,N
步骤2 . 进行多轮迭代,用m = 1,2, …, M表示迭代的第多少轮

a.使用具有权值分布Dm的训练数据集学习,得到基本分类器(选取让误差率最低的阈值来设计基本分类器) 
Gm(x):χ→{−1,+1}
Gm(x):χ→{−1,+1}
b. 计算Gm(x)在训练数据集上的分类误差率 
em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi)
em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi)

Note: Gm(x)在训练数据集上的误差率em就是被Gm(x)误分类样本的权值之和。
c. 计算Gm(x)的系数,am表示Gm(x)在最终分类器中的重要程度(目的:得到基本分类器在最终分类器中所占的权重) 
am=12log1−emem
am=12log1−emem

Note: em <= 1/2时,am >= 0,且am随着em的减小而增大,意味着分类误差率越小的基本分类器在最终分类器中的作用越大。
d. 更新训练数据集的权值分布(为了得到样本的新的权值分布),用于下一轮迭代 
Dm+1=(wm+1,1,wm+1,2...wm+1,i...wm+1,N)
Dm+1=(wm+1,1,wm+1,2...wm+1,i...wm+1,N)

wm+1,i=wmiZmexp(−αmyiGm(xi);),i=1,2,...,N
wm+1,i=wmiZmexp(−αmyiGm(xi);),i=1,2,...,N

使得被基本分类器Gm(x)误分类样本的权值增大,而被正确分类样本的权值减小。 
就这样,通过这样的方式,AdaBoost方法能“重点关注”或“聚焦于”那些较难分的样本上。 
其中,Zm是规范化因子,使得Dm+1成为一个概率分布 
Zm=∑i=1Nexp(−αmyiGm(xi))
Zm=∑i=1Nexp(−αmyiGm(xi))
步骤3 .组合各个弱分类器 
f(x)=∑m=1MαmGm(x)
f(x)=∑m=1MαmGm(x)

从而得到最终分类器,如下: 
G(x)=sign(f(x))=sign(∑m=1MαmGm(x))
G(x)=sign(f(x))=sign(∑m=1MαmGm(x))
GBDT
a. Adaboost的Regression版本 
Adaboost的Error计算 
em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi)
em=P(Gm(xi)≠yi)=∑i=1NwmiI(Gm(xi)≠yi)

GBDT的Error计算 
em=P(Gm(xi),yi)=∑wmierr(Gm(xi),yi)
em=P(Gm(xi),yi)=∑wmierr(Gm(xi),yi)

b. 把残差作为下一轮的学习目标
比如: 用GBDT预测年龄 
A的真实年龄是18岁,但第一棵树的预测年龄是12岁,差了6岁,即残差为6岁。那么在第二棵树里我们把A的年龄设为6岁去学习,如果第二棵树真的能把A分到6岁的叶子节点,那累加两棵树的结论就是A的真实年龄;如果第二棵树的结论是5岁,则A仍然存在1岁的残差,第三棵树里A的年龄就变成1岁,继续学。

c. 最终的结果有加权和值得到,不再是简单的多数投票 
G(x)=∑αmGm(x)
G(x)=∑αmGm(x)
XGBoost
XGBoost本质上还是GBDT,但是把速度和效率做到了极致,所以叫X (Extreme) GBoosted 
特点: 
a. 使用L1 L2 Regularization 防止Overfitting 
 
b. 对代价函数一阶和二阶求导,更快的Converge

c. 树长全后再从底部向上减枝,防止算法贪婪

标签:Bagging,...,xi,XGBoost,分类器,增益,Adaboost,Gm,决策树
来源: https://blog.csdn.net/wangdong2017/article/details/98508564

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有