集成学习:XGBoost, lightGBM_哔哩哔哩_bilibili
XGBoost 和 LightGBM 对比
XGBoost 和 LightGBM 对比_人鱼线的博客-CSDN博客
【机器学习】gbdt/xgboost/lightGBM比较 | Siyao's Blog
PPT已上传至公众号:Abela的后花园
代码已上传至:https://github.com/BackyardofAbela/EnsembleLearning
分类与回归树CART
通俗理解kaggle比赛大杀器xgboost_v_JULY_v的博客-CSDN博客
cart树做分类时,树分裂准则用的是基尼系数;
cart树做回归时,树分裂准则用的是最小平方误差;
最小平方误差
计算label的标准方差,计算每个特征下的标准方差,两者相减,找到标准方差降低最多的特征进行分裂。
为什么xgb用的基分类器是回归树
gbdt的cart树是回归树,通过平方误差进行分裂。gbdt是多个cart树,每个cart树之间要比较pred和label,最后的损失函数是不同的树之间得到的。单个树内部通过平方误差(分类树是基尼系数)进行分类,不用传统意义上的损失函数(即不用比较pred和label)。
因为损失函数定义是平方误差损失,对损失函数进行二阶泰勒展开,要保证损失函数二阶可导。熵的损失函数没有这个性质。
为什么xgb用的是二阶泰勒展开
通俗理解kaggle比赛大杀器xgboost_v_JULY_v的博客-CSDN博客
决策树
熵计算方式
信息与熵值的计算_fang_chuan的博客-CSDN博客_熵值计算
基尼系数计算方式
树类算法之---决策树Cart树Gini系数就算原理。 - CodeAntenna
三种决策树
决策树是用特定的分裂原则,递归形成的树形决策结构,叶子节点代表最终的预测值或类别。
【机器学习】决策树(上)——ID3、C4.5、CART(非常详细) - 知乎
决策树有三种算法,id3,c4.5,cart树,他们最大的不同是树分裂准则不一样。
id3的分裂准则是信息增益(熵模型),每次分裂时,计算label的信息熵,计算每个特征下的条件熵,信息增益 = 信息熵-条件熵。找到信息增益最大的特征进行分裂,是一个多叉树。
信息增益的缺点是对nunique值较多的特征比较敏感。
c4.5的树分裂准则是信息增益率(熵模型),克服了这个缺点。把特征的取值数作为惩罚项加了进去。
cart树的树分裂准则是基尼系数,避免了计算信息增益时的大量log运算。计算label的基尼系数,计算每个特征下的基尼系数,基尼增益是两者相减,找到基尼增益最大的特征进行分裂,是一个多叉树。
此外,id3没有剪枝策略,其他两个有,cart树既能分类又能回归,其他两个只能分类。
id3,c4.5是多叉树,只需要寻找最优特征,根据特征的不同取值来决定是几叉树。
cart是二叉树,先找最优特征(算这个特征的基尼系数,找特征基尼系数最小的),然后再找在这个特征的哪个值(在哪个特征取值下基尼系数最小)来进行分裂。
gbdt
GBDT算法是一种前向加法模型,基树采用CART回归树,树节点的划分指标是平方损失函数,叶子节点的值是落在该叶子节点所有样本的目标均值。树与树之间的Boosting逻辑是:新树拟合的目标是上一课树的损失函数的负梯度的值。GBDT最终的输出结果是将样本在所有树上的叶子值相加。
【机器学习】决策树(中)——Random Forest、Adaboost、GBDT (非常详细) - 知乎
GBDT--原来是这么回事(附代码) - mantch - 博客园
xgb
xgb是gbdt的一种工程实现,算法思想是类似的,都是boosting算法,前向加法模型,
不断减少残差(回归),通过不断加入新的树旨在在残差减少(负梯度)的方向上建立一个新的模型。——即损失函数是旨在最快速度降低残差。
损失函数不同:
gbdt树分裂的时候是用的最小平方误差原则,去拟合梯度方向。
xgb是把损失函数进行了二阶泰勒展开,结合树的正则项,得到了一个和损失函数的一阶导数和二阶导数有关的公式,用这个公式做为树的分裂原则。
工程实现上:
【机器学习】gbdt/xgboost/lightGBM比较 | Siyao's Blog
xgb和lgb
【机器学习】gbdt/xgboost/lightGBM比较 | Siyao's Blog
【机器学习】决策树(下)——XGBoost、LightGBM(非常详细) - 知乎
树分裂的近似算法不同
xgb的树分裂策略-最优切分点划分算法
xgboost理解(3) xgboost分裂点选取、缺失值处理和并行化 | Our Home
树分裂,最优切分点划分算法,贪心算法,近似分位数算法。
贪心算法
近似分位数算法
近似分位树算法利用了2阶导数信息,2阶导数是权重。
【机器学习】决策树(下)——XGBoost、LightGBM(非常详细) - 知乎
lgb的树分裂策略
直方图算法
xgb损失函数
xgb和lgb
xgboost和lightgbm_林冲风雪山神庙的博客-CSDN博客_xgboost和lightgbm
xgb和gbdt的区别
xgb是gbdt的一种工程实现,算法思想是类似的,都是boosting算法,前向加法模型,
通过不断加入新的树,在残差减少(负梯度)的方向上建立一个新的模型。
算法理论上最大的区别是xgboost对损失函数进行了二阶泰勒展开,更加精准的去拟合残差。在损失函数上加上了正则项来控制树深。
工程实现上主要的点在于xgboost工具支持并行,xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。
xgb和lgb的区别
树分裂算法不一样,XGBoost使用的是pre-sorted算法(对所有特征都按照特征的数值进行预排序,在遍历分割点的时候用O(data)的代价找到一个特征上的最好分割点),能够更精确的找到数据分隔点。lgb使用的是histogram算法(X发给类似一种分桶算法),占用的内存更低,数据分隔的复杂度更低
树的生长策略不一样,XGBoost采用的是level-wise生长策略,好控制模型复杂度,不容易过拟合;但实际上Level-wise是一种低效的算法,它不加区分的对待同一层的叶子,带来了很多没必要的开销,因为实际上很多叶子的分裂增益较低,没必要进行搜索和分裂。
LightGBM采用leaf-wise生长策略,如Figure 2所示,每次从当前所有叶子中找到分裂增益最大(一般也是数据量最大)的一个叶子,然后分裂,如此循环;但会生长出比较深的决策树,产生过拟合。因此 LightGBM 在leaf-wise之上增加了一个最大深度的限制,在保证高效率的同时防止过拟合。