参考:https://www.cnblogs.com/pinard/p/6140514.html
前向分布算法
就是一步一步计算每个弱学习器的参数的思想,和boosting相同。
负梯度拟合
负梯度拟合就是在某个弱学习器得到的结果和真实值之间的误差的基础上,在减少这个误差的方向上构建新的CART回归树做一个拟合。由于负梯度是函数对变量进行求导,所以对原生的分类问题没办法做处理,需要对分类问题转换为连续的回归问题进行处理。
使得c(tj)最小的节点下的一个样本c,这里也是t-1轮的时候选择到的这个特征下的其中一个样本,将来要当作分类的节点,这个节点使得在这一层loss函数最小,即这一层拟合后,结果最接近真实值的一个节点,在这个节点左边是一个类别,右边是一个类别,这样一个二叉树即为本轮构建的ht(x),然后和之前的t-1个弱学习器组合成一个强学习器。
损失函数
前一轮的损失函数是:
本轮的目的是找到一个弱学习器ht(x),使得 最小。
常用的损失函数包括:1. 指数损失函数 2. 对数损失函数(分二元分类和多元分类)3. 均方差 4.绝对损失 5. huber损失(均方差和绝对损失的折中) 6.quantile分位数损失
回归
就是在上一轮的拟合函数基础上,寻找一个样本当作弱分类器的划分节点。这个节点需要满足负梯度,这样才能最大可能地最小化loss。
更新当前轮弱学习器
整个强学习器:
分类算法
对于分类无法使用负梯度来较小损失的方法来拟合弱学习器,所以需要对损失函数做一点的修改。
- 将损失函数替换为指数损失函数,此时GBDT退化为了adaboost.
- 类似于逻辑回归的对数 似然 损失函数的方法(似然…这里意思应该是 充当 的意思吧)
二分类
与gbdt回归的区别在于负梯度计算和叶子节点的最佳负梯度拟合函数
多分类
与gbdt回归的区别在于负梯度计算和叶子节点的最佳负梯度拟合函数
正则化
为了防止过拟合,主要有三种处理方式:
- 步长
- 自采样(subsample)
- 对使用到的CART回归树做正则化剪枝。
优缺点
优点:
- 可以灵活处理各类数据,包括连续值和离散值。
- 对相对少的调参时间情况下,预测准确率优于SVM。
- 可以选择损失函数,包括huber(均方差和绝对损失的折中)
缺点: - 弱学习器之间存在以来,难以并行。
sklearn参数
参考: https://www.cnblogs.com/pinard/p/6143927.html
n_estimators 弱学习器的zui’da’die最大迭代次数
learning_rate 不擦汗给你
subsample 取值为(0,1],但推荐[0.5,0,8],默认为1,即不采用自采样
init 初始的弱学习器。
loss gdbt中提到的损失函数(http://www.cnblogs.com/pinard/p/6140514.html),具体区别看当前博客
alpha
应用场景
gbdt可以用于所有的回归问题(线性和非线性),而logistic regression只能用于线性回归,bgdt也可以用于二分类,多分类问题。