温故而知新-1.决策树,剪枝,RF,adaboost,GBDT,XGBOOST

4年前开始学习机器学习,选择了最简单的决策树入门,在面试中却常常回答不好,还是太轻视它了。此次再此总结一下。

本文是关键点笔记,不涉及推导

决策树构建原理:1.选择划分属性值2.构建,并停止3.剪枝

1.划分 delta=I(present)-sum(Nvj/N*I(vj)) 如果信息保留最多,划分最好

选择基本公式:

    gini=1-sum(pi的平方)

    Entropy=-plogp

    error = 1-max{pi|i=1...n}

ID3  多元分类树,使用E计算delta 划分

C4.5 多元分类树,使用E计算delta/I(present)划分

CART 二元分类回归树,离散label使用gini系数,连续label使用方差划分

2.停止条件:层数 剩余特征数 不一样的样本个数 delta已经很小了

3.剪枝:

PEP 剪后误判个数变少

MEP 剪后误差变小

CCP 剪后代价变小

损失函数 c(T)=sum(NtHt(T))+a|T| =sum(Nt*sum(pi*logpi)) + a|T|  =sum(Nt*sum(pi*logpi)+a)

表示各个节点的信息量*个数的和

c(t) <= c(T) 剪枝后误差小于等于剪前误差,剪枝

关键问题是确定a

假设每个叶子都可以剪,令C(t)=C(T)求出对应叶子的a,a=(h(t)-h(T))/(NT-1)

选择a最小的的节点剪 即找到目前子树最好剪枝结果Ti,一直找到树根

所有最优子树通过数据验证,取损失最小的Ti

随机森林

m=sqrt(特征个数)

bagging 有放回的抽样

adaboost 通过误差率更新各个树的权值

单个分类器权值更新

e=sum(w*i) a=1/2log(1-e)/e  wi+1= wi/z*exp(-a*y*Gm(x))   z=sum(w*exp(-a*y*Gm(x))

整体分类:G(x)=sign(sum(a*Gm(x)))

boosting GBDT

损失函数为se,所以其负梯度方向是 y-y'(残差) 把其负梯度值作为下一颗树的输入

选择最小损失的切分点建立当前的树,直到负梯度足够小,所有树建立完毕

预测值是所有树预测值的和

XGBOOST

使用第前一棵树的残差进行训练,使用了l2正则化,保证预测准确和模型简单的平衡

obj=sumt(l(y,yi-1 + fi))+zta*T+1/2*lmda*sumt(wj*wj)

泰勒2阶展开

obj=sumt(l(y,yi-1))+gi*fi+1/2*hi*fi*fi)+zta&T+1/2*lmda*sumt(wj*wj)

obj=sumj(Gi*wj+1/2(Hi+lamda)*wj*wj)+zta*T

wj=-2Gi/(Hi+lambda)

obj=-1/2*sumj(GI*Gi/(Hi+lamda))) +zta*T

所以分裂节点的gain=-objleft-objright+objall

选择最大gain,进行分裂

形成m颗树,使用m颗树的和作为结果

 

你可能感兴趣的:(温故而知新-1.决策树,剪枝,RF,adaboost,GBDT,XGBOOST)