梯度提升树(Gradient Boosting Decison Tree, 以下简称GBDT),是多棵树的输出预测值的累加,GBDT的树都是回归树。
GBDT的思想可以用一个通俗的例子解释,假如有个人30岁,我们首先用20岁去拟合,发现损失有10岁,这时我们用6岁去拟合剩下的损失,发现差距还有4岁,第三轮我们用3岁拟合剩下的差距,差距就只有一岁了。如果我们的迭代轮数还没有完,可以继续迭代下面,每一轮迭代,拟合的岁数误差都会减小。
1 前向分布算法
前向分布算法求解这一问题的优化方法是:每次只学习一个基函数及系数,逐步逼近最优解。
具体的前向分布算法为:
其中fm(xi)=fm-1(xi)+Bb(xi;r) fm-1(xi)是已知的,所以每次优化Bb(xi;r)
参考:https://blog.csdn.net/kateswall/article/details/70765767
2.负梯度拟合
我们希望找到一个 使得
最小,那么
就得沿着使损失函数L减小的方向变化,即:
同时,最新的学习器是由当前学习器 与本次要产生的回归树
相加得到的:
因此,为了让损失函数减小,需要令:
即用损失函数对f(x)的负梯度来拟合回归树。
参考 http://www.cnblogs.com/duan-decode/p/9889955.html
3.损失函数
4.回归
5 二分类
5.多元分类
6.正则化
参考https://www.cnblogs.com/pinard/p/6140514.html
7.优缺点
GBDT主要的优点有:
1) 可以灵活处理各种类型的数据,包括连续值和离散值。
2) 在相对少的调参时间情况下,预测的准确率也可以比较高。这个是相对SVM来说的。
3)使用一些健壮的损失函数,对异常值的鲁棒性非常强。比如 Huber损失函数和Quantile损失函数。
GBDT的主要缺点有:
1)由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行。
8sklearn参数
sklearn.ensemble.GradientBoostingRegressor(
loss='ls', ##默认ls损失函数'ls'是指最小二乘回归lad'(最小绝对偏差)'huber'是两者的组合
n_estimators=100, ##默认100 回归树个数 弱学习器个数
learning_rate=0.1, ##默认0.1学习速率/步长0.0-1.0的超参数 每个树学习前一个树的残差的步长
max_depth=3, ## 默认值为3每个回归树的深度 控制树的大小 也可用叶节点的数量max leaf nodes控制
subsample=1, ##用于拟合个别基础学习器的样本分数 选择子样本<1.0导致方差的减少和偏差的增加
min_samples_split=2, ##生成子节点所需的最小样本数 如果是浮点数代表是百分比
min_samples_leaf=1, ##叶节点所需的最小样本数 如果是浮点数代表是百分比
max_features=None, ##在寻找最佳分割点要考虑的特征数量auto全选/sqrt开方/log2对数/None全选/int自定义几个/float百分比
max_leaf_nodes=None, ##叶节点的数量 None不限数量
min_impurity_split=1e-7, ##停止分裂叶子节点的阈值
verbose=0, ##打印输出 大于1打印每棵树的进度和性能
warm_start=False, ##True在前面基础上增量训练 False默认擦除重新训练 增加树
random_state=0 ##随机种子-方便重现
)
9 应用场景
GBDT几乎可用于所有回归问题(线性/非线性),相对logistic regression仅能用于线性回归,GBDT的适用面非常广。亦可用于二分类问题(设定阈值,大于阈值为正例,反之为负例)。
参考https://www.cnblogs.com/Sugar-Chl/p/10158672.html