RF和GBDT和Xgboost的异同总结,加上lightgbm

相同点(照顾标题):

    都用到了Bootstrap思想,Bootstrap是一种有放回的抽样方法思想

不同点:

    基类器:

            RF用的回归树或者分类树,GBDT和xgboost用的是CART(回归树)

    分裂节点:

            RF:根据选择的树类型来选择是熵或者信息增益或GiNi指数;

            GBDT:在回归使用的是最小均方差,分类使用的是最小GiNi指数;

            Xgboost:

    训练过程:

            RF:随机样本和随机特征去构建一棵树(可以并行),最后采取多数投票,所以对异常值不敏感;

            GBDT:从GB和DT来看,GB:每一个树学习的是之前树的残差(负梯度的方向),DT:CART的构建过程。最后加权树的结果,对异常值敏感;

            Xgboost:和GBDT一样

    损失函数:

            RF根据选择的树;

            GBDT通过泰勒的一阶展开来拟合损失函数;

            Xgboost通过泰勒的二阶展开来拟合损失函数,此时的损失函数加入了正则化项(节点的个数+节点输出值的二范式);

    优化:

        RF:实现简单,训练速度快,泛化能力强,可以并行实现,因为训练时树与树之间是相互独立的;

        GBDT:使用boosting的思想;

        Xgboost:  在分裂节点选择最佳划分特征的时候并行计算


Lightgbm和xgboost的差异:

    寻找分裂点的优化算法:

        xgBoost使用的是pre-sorted算法(对所有特征都按照特征的数值进行预排序,在遍历分割点的时候用O(data)的代价找到一个特征上的最好分割点),能够更精确的找到数据分隔点;

        LightGBM使用的是histogram算法,占用的内存更低,数据分隔的复杂度更低

    决策树生长策略:

        XGBoost采用的是level-wise生长策略,能够同时分裂同一层的叶子,从而进行多线程优化,不容易过拟合;但不加区分的对待同一层的叶子,带来了很多没必要的开销(因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂

        LightGBM采用leaf-wise生长策略,每次从当前所有叶子中找到分裂增益最大(一般也是数据量最大)的一个叶子,然后分裂,如此循环;但会生长出比较深的决策树,产生过拟合(因此 LightGBM 在leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合)。另一个比较巧妙的优化是 histogram 做差加速。一个容易观察到的现象:一个叶子的直方图可以由它的父亲节点的直方图与它兄弟的直方图做差得到。

    







            

    

猜你喜欢

转载自blog.csdn.net/asdasdasdasasd1111/article/details/80876876