lightgbm是xgboost的优化版本,它的优点在于:
更小内存;速度更快;更高的准确率;更大的数据集;更小的内存消耗。
下面简单阐述下我对其中几点优化的理解。
lightgbm相较于xgboost有以下几点改进:
- 基于直方图的决策树算法;
- 基于leaf_wise的叶子生长策略;
- 利用直方图做差
- 能够直接处理类别变量
- cache命中优化
- 多线程优化
a. 直方图算法
lightgbm的直方图算法是将连续型变量离散化成k个直方图的形式,完成指标的离散化,将离散化后的值作为索引得到相应的统计量,然后根据直方图和相应的统计量寻找最优划分点。
直方图的优点在于1. 能有效提高模型训练的效率,在xgb等模型中,每次划分指标寻找最佳分割点的时候,需要的代价与数据量和特征量成正比,划分直方图后,只需要与分箱数和特征量成正比,不再需要数据预排序的结果,大大降低了内存的消耗;2. 能降低模型过拟合的风险,虽然可能会在一棵树上损失一些精度,但是能预防过拟合,而由于迭代的效果,使得精度并未损失多少。
直方图算法的过程大概是:
a. 对当前模型的每个节点,遍历每个特征进行如下操作;
b. 对一个节点,遍历每个特征,分别得到相应的直方图,并将计算相应的梯度和bin中的样本数量;
c. 遍历样本,分别计算样本梯度和样本数量,并添加到相应的bin中;
d. 遍历所有的bin,分别以该bin为分割点,将左边