随机森林与GDBT
【Ensemble集成思想】
1.Boosting:将弱学习器提升为强学习器,从而提高预测精度
典型如:AdaBoost / GBDT
2.Bagging:自助采样,生成众多并行分类器,通过投票决定最终结果
典型如:Random Forest随机森林
本节主要介绍决策树的两种Ensemble方法:随机森林和GBDT
【随机森林】
1.使用了Bagging思想
多棵决策树解决了单棵泛化能力差的缺点
2.随机体现在:
随机选择样本
随机选择特征
每一棵树选取固定数量的样本集,固定数量的特征集
即 总样本集和总特征集的子集构建的决策树
注意 有放回抽取
3.集成学习
投票决定
【GBDT梯度上升决策树】
1.GBDT属于回归树而非分类树,思想就是不断迭代拟合前一轮的残差
2.核心在于累加所有树的结果作为最后的结果
3.利用损失函数的负梯度代替/模拟残差,对于一般的损失函数,一阶即可
Xgboost使用二阶
举个例子:
首先从左图开始,
第一步选择一个特征——购物金额,作为分类标准
第二步,分类之后可以得到两个分支,对每个分支求一个平均值
第三步,每个样本根据这个值得到一个残差{ A: -1; B: 1; C:-1; D:1 }
之后来到右图,
右边就是用第一棵树残差{-1,-1,1,1}构建的一棵树
平均值为0其实就不需要计算了…
这里A/C的平均值为-1,B/D平均值为1
几种Boosting的对比
1.Adaboost:提高分类错误样本的权重,降低正确分类样本的权重
Boosting Tree:Adaboost的一般方法
2.GBDT:利用损失函数的负梯度去模拟/代替残差
对于一般的损失函数,只要一阶导数即可
残差为(真实-预测), 但真实并不一定是最优的解,可能会有一些扰动。
只是经验风险最小化的话非常容易过拟合,所以加正则项,减少过拟合。
所以我们需要计算损失函数的梯度,而不能直接使用分模型来拟合残差。
使用负梯度代替残差,可以拟合任何的损失函数。
拟合残差只是考虑到损失函数为平方损失的特殊情况,
负梯度是更加广义上的拟合项,更具普适性。
3.XGBoost:对代价函数用到了二阶泰勒展开
同时用到了一阶函数和二阶函数
因此➡️XGBoost函数可以自定义,但是要求一阶和二阶可导