XGBoost的改进----Lightgbm

本文介绍了LightGBM相对于XGBoost的改进,包括基于Histogram的决策树算法,使用Leaf-wise的叶子生长策略,直方图做差加速,以及直接支持类别特征。直方图算法减少了内存消耗和计算成本,而Leaf-wise策略提高了训练效率。LightGBM还支持高效并行学习,包括特征并行和数据并行,降低了过拟合风险。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lightgbm改进的点:
基于Histogram的决策树算法
带深度限制的Leaf-wise的叶子生长策略
直方图做差加速
直接支持类别特征(Categorical Feature)
Cache命中率优化
基于直方图的稀疏特征优化
多线程优化
下面主要介绍Histogram(直方图)做差加速、带深度限制的Leaf-wise的叶子生长策略。

  • 基于histogram的决策树算法
    直方图算法的基本思想是先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。
    在这里插入图片描述
    而xgboost中的做法是先对特征进行排序,然后按块存储,然后并行计算不同特征的分割点。
    对比以下:
    优点:直方图算法不仅不需要额外存储预排序的结果,而且可以只保存特征离散化后的值,而这个值一般用8位整型存储就足够了,内存消耗可以降低为原来的1/8。在计算上的代价也大幅降低,预排序算法每遍历一个特征值就需要计算一次分裂的增益,而直方图算法只需要计算k次(k可以认为是常数),时间复杂度从O(#data*#feature)优化到O(k*#features)。
    缺点:不能找到精确的分割点,但由于分割点误差并不是太大。,且实际上可能决策树对于分割点的精确程度并不太敏感,而且较“粗”的分割点也自带正则化的效果。
### 构建堆叠集成方法结合XGBoostLightGBM模型 堆叠集成学习是一种强大的机器学习技术,通过组合多个基础模型来提高预测性能。以下是关于如何实现基于XGBoostLightGBM的堆叠集成的具体指导。 #### 数据准备与预处理 在构建堆叠模型之前,数据集应被划分为训练集、验证集以及测试集。这是为了确保第二层模型能够利用来自第一层模型的元特征(meta-features)。通常情况下,K折交叉验证会被用于生成这些元特征[^3]。 ```python from sklearn.model_selection import KFold kf = KFold(n_splits=5, shuffle=True, random_state=42) # 假设 X_train 是输入特征矩阵,y_train 是目标变量向量 first_level_models_predictions = [] for train_index, val_index in kf.split(X_train): X_fold_train, X_fold_val = X_train[train_index], X_train[val_index] y_fold_train, y_fold_val = y_train[train_index], y_train[val_index] # 训练并保存每一折的基础模型预测结果 ``` #### 第一层模型:XGBoostLightGBM 在第一层中,分别使用XGBoostLightGBM作为基础模型。这两个模型因其高效性和灵活性而成为常用的选择。可以参考官方文档中的参数设置指南以优化它们的表现[^1]。 ```python import xgboost as xgb import lightgbm as lgb def train_xgboost_model(X_train, y_train, X_val=None, y_val=None): model = xgb.XGBRegressor( objective='reg:squarederror', n_estimators=100, learning_rate=0.1, max_depth=6 ) model.fit(X_train, y_train, eval_set=[(X_val, y_val)], verbose=False) return model def train_lightgbm_model(X_train, y_train, X_val=None, y_val=None): model = lgb.LGBMRegressor( objective='regression', num_leaves=31, learning_rate=0.1, n_estimators=100 ) model.fit(X_train, y_train, eval_set=[(X_val, y_val)], verbose=False) return model ``` 对于每种模型,在每次折叠过程中都需要重新训练一次,并记录其对验证部分做出的预测值。最终得到的是一个由所有基础模型预测组成的新的特征集合——即所谓的“元特征”。 #### 第二层模型 一旦获得了足够的元特征之后,则可以在上面再建立一个新的监督学习算法作为顶层分类器或者回归器。常见的选择包括线性回归、逻辑回归或其他更复杂的非线性模型如随机森林等。 ```python from sklearn.linear_model import LinearRegression second_layer_model = LinearRegression() second_layer_model.fit(meta_features_train, y_meta_train) predictions = second_layer_model.predict(meta_features_test) ``` 这里需要注意的一点是,如果希望进一步提升效果的话还可以尝试加入更多的基底估计器或者是调整超参等方式来进行改进[^2]。 ### 结论 综上所述,我们介绍了怎样把XGBoostLightGBM结合起来形成一种叫做堆叠(stacking)形式下的集成学习方案。这种方法不仅有助于改善单一模型可能存在的偏差问题,而且还能有效增强整体系统的泛化能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值