GBDT用于分类和回归及其python实现
adaboost用于分类的时候其实是模型为加法模型,损失函数为指数损失函数的算法,用于回归的时候是是损失函数为平方误差的损失函数,但是当损失函数为一般损失函数的时候,优化会变得比较复杂,例如我们分类使用对数损失函数,那么前面我们求解基函数权值和样本更新权值的过程就会变得比较复杂,这时候提出了一种新的解决方案——GBDT(Gradient Boosting Decision Tree,梯度提升树)。
1.GBDT回归
1.1基本思想
GBDT用于回归问题时,核心思想是利用损失函数的负梯度在当前模型的值作为回归问题提升树算法中残差的近似。然后拟合一个回归树,并且当损失函数为均方误差时,负梯度的值就是残差。其实现过程和AdaBoost用于回归时的差别就在于残差的计算方式上面。
1.2算法流程:
输入:训练集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , x i ∈ R n , y i ∈ R T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\},x_i\in R^n,y_i\in R T={ (x1,y1),(x2,y2),...,(xN,yN)},xi∈Rn,yi∈R,损失函数 L ( y , f ( x ) ) L(y,f(x)) L(y,f(x));
- 初始化: f 0 ( x ) = a r g m i n c ∑ i = 1 N L ( y i , c ) f_0(x)=argmin_{c}\sum_{i=1}^NL(y_i,c) f0(x)=argminc∑i=1NL(yi,c)
- 对 m = 1 , 2 , . . . , M m=1,2,...,M m=1,2,...,M:
(a)对 i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N计算 r m , i = − [ L ( y i , f ( x i ) ) f ( x i ) ] f ( x ) = f m − 1 ( x ) r_{m,i}=-[\frac{L(y_i,f(x_i))}{f(x_i)}]_{f(x)=f_{m-1}(x)} rm,i=−[f(xi)L(yi,f(xi))]f(x)=fm−1(x)
(b)对 r m , i r_{m,i} rm,i拟合回归树,得到第m个基模型的叶节点区域 R m , j , j = 1 , 2 , . . , J R_{m,j}, j=1,2,..,J Rm,j,j=1,2,..,J
(c) 对 j = 1 , 2 , . . . , J j=1,2,...,J j=1,2,...,J计算叶节点区域 R m , j R_{m,j} Rm,j的最佳输出值: c m , j = a r g m i n c ∑ x i ∈ R m , j L ( y i , f m − 1 ( x i ) + c ) c_{m,j}=argmin_{c}\sum_{x_i\in R_{m,j}}L(y_i,f_{m-1}(x_i)+c) cm,j=argminc∑xi∈Rm,jL(yi,fm−1(xi)+c)
(d)更新 f m ( x ) = f m − 1 ( x ) + ∑ j = 1 J c m , j I ( x ∈ R m , j ) f_m(x)=f_{m-1}(x)+\sum_{j=1}^Jc_{m,j}I(x\in R_{m,j}) fm(x)=fm−1(x)+∑j=1Jcm,jI(x∈Rm,j) - 生成加法模型, f ( x ) = ∑ m = 1 M ∑ j = 1 J c m , j I ( x ∈ R m , j ) f(x)=\sum_{m=1}^M\sum_{j=1}^Jc_{m,j}I(x\in R_{m,j}) f(x)=∑m=1

本文详细介绍了GBDT在回归和二分类问题中的应用原理及其实现过程,包括基本思想、算法流程,并给出了Python代码实现。
最低0.47元/天 解锁文章
729

被折叠的 条评论
为什么被折叠?



