从决策树到GBDT

来源:互联网 发布:cnc编程兼职群 编辑:程序博客网 时间:2024/05/22 03:49

决策树

非参数模型:不能用有限个参数来描述,随样本数量变化。

优点:

  • 容易解释
  • 可扩展到大规模数据,
  • 不要求对特征做预处理
    • 能处理离散和连续值混合的输入
    • 对特征的单调变换,如log、标准化等,不敏感,只与数据的排序有关;
    • 能自动进行特征选择;
    • 可处理缺失数据等。

缺点:

  • 预测正确率不高。+boosing=GBDT
  • 模型不稳定,输入数据小的变化(如一两个数据点的取值变化)会带来树结构的变化。+bagging=RamdomForest
  • 样本太少时容易过拟合

如何建树

建树目标

使训练集上模型的预测值与真值差距越来越小

建树过程

  1. 根节点包含全部样本
  2. 分裂。目标:减小该节点的 [ 不纯净度]。方法:对特征j和阈值T,小于的样本分到左子节点,大于的样本分到右子节点。对左右节点分别计算节点的不纯净度,加权平均作为分裂后的总不纯净度,与父节点的不纯净度进行比较。选择【分裂后的总不纯净度】最小的特征j和阈值T进行分裂。sklearn中DecisionTree穷举搜索所有特征的所有可能取值,把连续特征当作离散特征处理,没有实现剪枝。
  3. 继续对左右子节点进行分裂。
  4. 停止分裂。(1)不纯净度减少太少;(2)树的深度超过了最大深度,或叶子节点超过一定数目;(3)左右分支的样本分布足够纯净;(4)左右分支中样本数目足够少。

建树指标

不纯净度

  • 分类决策树
    • 错分率:H(D)=1|D|iDI(yiy^)=1π^y^
    • 熵:H(D)=Cc=1π^clogπ^c
    • Gini系数:H(D)=Cc=1π^c(1π^c)=1Cπ^2c

      其中π^c=1|D|iDI(yi=c)
      以5个样本为例,类别分别为[1,1,2,3,4],π^1=25π^2=π^3=π^4=15y^=1
错分率为35,熵为(25log25+35log15),Gini系数为1((25)2+3(15)2)

  • 回归决策树
    • 属于某一结点的所有样本的y的方差,即L2损失

如何剪枝

剪枝描述

使用校验集来进行剪枝,类似线性模型中的正则项,保证模型复杂度不要太高,防止过拟合

剪枝准则:Cost complexity pruning

CC(T)=Err(T)+α|T|

其中Err(T)代表树的错误率,α是正则因子,|T|是树的节点数目。形同机器学习模型的目标函数:J(θ)=Ni=1L(f(Xi;θ),yi)+λΩ(θ)

剪枝过程

自底向上进行剪枝,直至根节点。
α从0开始增大,树的一些分支被剪掉,得到不同α对应的树。采用交叉验证得到最佳α


GBDT(Gradient boosting descision tree)

Boosting 与 AdaBoost

http://www.jianshu.com/p/a6426f4c4e64
boosting描述:模型输出为多个弱学习器的加权平均
adaptive boosting描述:初始每个样本的权重(分布概率)均为1N,训练得到一个分类器后对样本做预测。对错误率<12的分类器,降低正确分类的样本权重,提高误分样本的权重;对错误率>12的分类器,增加正确分类的样本权重,降低误分样本的权重;错误率=12的分类器的权重为0。继续训练下一个分类器。

如何选择弱学习器的权重α和样本的权重w?


确定样本权重w

目标:指数损失最小。考虑两类分类问题,样本标签yi{1,1}。多类问题可通过ovr策略进行扩展。

ERRtrainwm,i使=1Ni=0N{10yisgn(f(Xi))else1Ni=0Nexp(yif(Xi))=1Ni=0Nexp(yi(α1f1(Xi)+α2f2(Xi)++αMfM(Xi)))=1Ni=0N[m=1Mexp(yiαmfm(Xi)]=m=1M[i=0Nwm,iexp(yiαmfm(Xi))]

如何求解wm,i?设
RM,i=Mm=1exp(yiαmfm(Xi))Mm=1[Ni=0wm,iexp(yiαmfm(Xi))]

原问题等价于求解wm,i使得Ni=1RM,i=1N

M=1

1Ni=0Nexp(yiαf(Xi))=i=0Nw1,iexp(yiαf(Xi))

可得w1,i=1N

对于M>=2

RM+1,i=exp(yiαM+1fM+1(Xi))Ni=0wM+1,iexp(yiαM+1fM+1(Xi))RM,i

对所有样本求和,可得
i=0NRM,iexp(yiαM+1fM+1(Xi))=1Ni=0NwM+1,iexp(yiαM+1fM+1(Xi))

若令wM+1,i=1NRM,i,则上式成立。进而有
wM+1,i=1NRM,i=1Nexp(yiαMfM(Xi))Ni=0wM,iexp(yiαMfM(Xi))RM1,i=exp(yiαmfm(Xi))Ni=0wm,iexp(yiαmfm(Xi))wM,i

即为样本权重更新公式。


确定弱学习器权重α

目标:指数损失最小。此时损失已可以表述为

ERRtrain=m=1M[i=0Nwm,iexp(yiαmfm(Xi))]

Zm=Ni=0wm,iexp(yiαmfm(Xi)),对α求偏导令其为0
Zmαm=i=0Nwm,iyifm(X)exp(yiαmfm(Xi))={XiAwm,iexp(αm)XiA¯wm,iexp(αm)ifXiA,A={Xi:yifm(Xi)=1}ifXiA¯,A¯={Xi:yifm(Xi)=1}=0

XiAwm,iexp(αm)=XiA¯wm,iexp(αm)

XiAwm,i=XiA¯wm,iexp(2αm)

αm=12logXiAwm,iXiA¯wm,i=12log1ϵmϵm

其中ϵm=XiA¯wm,iwm,i为第m个分类器的分类误差,即正确率高的弱分类器权重更大。

Gradient Boosting

fm(x)=fm1(x)+ηϕm(x)

其中fm(x)是第m次迭代获得的分类器,ϕm(x)通过拟合损失函数对f(x)的负梯度得到,η是学习率,也称步长。该算法的思想源于一阶泰勒展开。


Random Forest(bagging)

模型描述:

f^avg(x)=1Bb=1Bf^b(x)

其中f^b(x)是森林中的某棵决策树的预测结果。每一棵决策树通过(1)随机选择一部分特征;(2)随机选择一部分样本,对原N个样本的N次有放回抽样,重复B次以获得训练B颗树的数据,即Bootstrap Aggregating,训练得到。

原创粉丝点击