Random Forest,AdaBoost(adaptive boosting),GB (Gradient Boost), LightGBM

Random Forest

随机森林算法用多棵(随机生成的)决策树来生成最后的输出结果。(参考:https://blog.csdn.net/qq_39777550/article/details/107312048)

决策树工作原理类似不断if-else condition,缺点是可能会导致过拟合,某个影响很大特征对预测贡献很大,因此这个特征影响超过了其他的次要特征,因此我们创建多个决策树随机采样特征

随机森林使用tagging technique减小high variance现象(high variance现象:https://www.m astersindatascience.org/learning/difference-between-bias-and-variance/)

假设数据有M×N,假设有3个bag创建,分成三个bag,各自装有不同的数据,每个bag随机在M rows和N column中采样,通常采样2/3的row数据和根号下N的column数据,每个bag数据通过模型预测结果,进行投票

AdaBoost(adaptive boosting)

Adaptive Boosting
参考:
https://www.cnblogs.com/pinard/p/6136914.html
https://www.cnblogs.com/pinard/p/6133937.html
代码实现可参考:
https://blog.csdn.net/weixin_43584807/article/details/104784611

AdaBoost是一个assemble learning,许多的模型组合到一起创建一个更好的模型

bagging和boosting是模型不同实现方式

random forest是实现bagging的方法

random forest 和 Ada区别
1、 RF是bagging family, Ada是boosting family
2、 RF是parallel learning, 决策树各自独立地从数据中平行构建,Ada是sequential learning,决策树的构建是依据上一颗树构建的结果,模型2依据模型1,模型3依据模型2,以此类推
(这也是bagging和boosting的重要的区别)
3、RF所有模型equal,如果有10个模型(RF创建10个决策树),10个模型 equal vote 最终结果,Ada所有的模型并不是equal,某些模型可能有着更高的权重,有些模型对结果权重更低
4、RF是fully grown trees(Complete Tree), Ada是stump,仅仅只是a root node has two leaf nodes

在boosting中model又可以称为weak learner

在Ada中,首先weak learner构建a stump,one root and two leaf,leaf是分化出来的两个bin候选的属性,推理预测每个数据,根据结果动态的调整权重,错误的样本权重增加,相对的正确的样本权重减小,对下一个weak learner,更多的注意力放在了错误预测的样本上,尽量去正确的预测之前模型预测错的样本

最终的一个模型结合所有的学习到的经验预测结果

GB (Gradient Boost)

GB(gradient boost),现在先看看GB和Ada之间的区别

Ada根据算法更新records权重,GB根据loss function更新权重

Ada是stump,只有一个根节点和两个叶节点,而GB通常叶结点有8到32个

常见loss,mse loss

GB算法
最开始计算target column平均值作为初始的预测值predicted value,之后计算预测值predicted value和target之间的距离d

model_1预测这个距离pred_d,根据实际的距离d,优化loss function MSE,由于预测的是距离pred_d,预测target结果=均值+α·pred_d,其中α是学习率,如0.1,推理结果作为新的预测值predicted value,然后再次计算预测值与实际值之间的距离d,紧接着开始训练model_2,再预测距离d,…得到model2预测target结果,依次往下,最终预测的结果会逐渐靠近实际的结果

final prediction = based value + α·pred_1 + α·pred_2 + α·pred_3 + … + α·pred_n

LightGBM

Light Gradient Boosting Machine

参考:
https://lightgbm.readthedocs.io/en/v3.3.2/
API调用可参考:
https://www.kaggle.com/code/amitkumarjaiswal/lightgbm/script
LightGBM论文:
https://www.microsoft.com/en-us/research/wp-content/uploads/2017/11/lightgbm.pdf

LightGBM是一个gradient boosting framework

boosting算法是一个集成技巧,集成的关键就是我们有多个模型 m1,m2,…,mn,m0作为base model,假设预测结果数量为n,得到error e,根据error训练下一个模型m1,依此类推地训练下去,最后我们可以组合所有的model获得最后的model

LightGBM有几个特点,正是这些特点让算法执行效率很高,在没有gpu和没有高算力的电脑的情况下推荐使用LightGBM,如果有GPU推荐使用XGB ,因为XGB有良好拓展性,下面介绍LightGBM的三个特点

一个特点是内部使用决策树训练,首先选择一个root column作为根节点,之后使用guinea entropy去选择一个最优分割点分裂成两颗子树,这个过程叫binning,在最优分割点左右两边分成两个bin, 那么只用判断变量所在的bin区间,选择一条路径进行后续推理,大大加快了算法运行(histogram)

第二个特点是exclusive feature bundling,互斥变量bundling,从互斥的变量创建一个新的变量,如Feature_a和Feature_b只出现互斥出现1和0,不同时出现1或者不同时出现0,那么Feature_a和Feature_b可以bundling成一个Feature_ab,比如Feature_ab可以用10或者01表示

第三个特点是gradient based one side sampling,假设我们从最开始进行,模型m0执行后得到梯度下降结果gradient1,2,…,将gradient从高到低进行排序,我们只选取一部分的样本进行梯度下降,通常超参数选择20%,在剩下的80%中随机的抽取10%(超参数)样本,那么我们新挑出了20% + 80%的10%的子样本进行梯度下降,因为我们认为梯度下降小的部分已经训练的差不多了,再随机地选取部分样本进行梯度下降即可。(那么one side sampling指的就是top20% sampling)

猜你喜欢

转载自blog.csdn.net/qq_19841133/article/details/127132241