GBDT学习笔记
(“辉哥让看XGB和LGB,从基础GBDT开始吧)
思想: GBDT就是一个迭代的决策树(多棵)模型,将多棵树的结果累加后就是模型结果。
GBDT计算举例
(自己看了他人的例子仿照造出来的例子,不知道准不准确)
损失函数:GBDT算法分为回归和分类两种,其中:
分类的损失函数分为对数 和 指数:
回归的损失函数多为 均方差(平方损失)、绝对损失(求差的绝对值)、Huber损失 和 分位数损失;
GBDT选取平方损失函数,第t轮的损失函数的近似值,也就是残差rti被定义为损失函数对f(t-1)(x)求负梯度:
算法过程
(1)初始化**f0(x)=0
(2)树的迭代**t=1~T(样本数i=1...m):
① 残差计算rti=yi-f(t-1)(xi)
② 对残差rti与xi进行拟合,得到一棵CART树Ct(x)
③ 更新学习器ft(x)=f(t-1)(x)+Ct(x)
(3)获取最终提升树**:f(x)=f0(x)+Sum(Ct)
正则化
正则化是为了防止过拟合,有三种方式;包括学习率(study_rate)、子采样比例、叶子节点包含的最小样本数。
优缺点及应用
1)优点:充分考虑的每个分类器的权重;数据类型既可以是离散类型也可以是连续类型;使用了一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数;
2)缺点:由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行;
3)应用:可用于回归(线性和非线性),也可用于分类(二分类和多分类)。
GBDT的回归
训练集X(m个样本),损失函数L,迭代次数1~T,最终输出学习器f(x);
按照算法步骤:
(1)初始化f0(x),c=1/m(sum(yi)),f0(x)=argmin(sum(L(yi,c))
(2)迭代t=1:T,样本数i=1,…,m
① 负梯度求残差:第t棵树的残差:
② 迭代
a、利用xi与残差rti拟合一颗CART树,叶子节点区域为Rtj,j=1~J,J为叶子节点个数;
b、利用Rtj,计算最佳拟合值:Ctj=argmin[Sum(L(yi,f(t-1)(xi)+c)];
*③ 更新学习器:ft(x)=f(t-1)(x)+Sum(Ctj);
(3)输出:f(x)=f0(x)+Sum(Sum(Ctj)。
GBDT的分类
分类和回归的不同在于分类的输出是离散值,根据上面提到的2分类和多分类损失函数,分类同回归不同的在于损失函数不同而导致的rti、ctj等的不同:
1) 2分类
为:
2) 多分类
随机森林RF与梯度提升树GBDT的区别
1)相同:都是多棵树,最终的结果都由多棵树共同决定,都用到booststrp思想;
2)不同:前者有分类也有回归树,后者只有回归树;前者多数决定,后者树的累加和;前者对异常值不敏感,后者对异常值敏感;前者减少模型方差,后者减少模型偏差;前者并行,后者串行;前者不用特征归一化,后者特征归一化;前者训练集权值一样,后者基于权值的弱分类器的集成。