您的位置:首页 > 其它

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

2018-03-03 18:20 579 查看
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使用min sum((y-y')平方)划分
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
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颗树的和作为结果
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: