lightgbm

XGBoost的缺点

  • 每次迭代训练时需要读取整个数据集,耗时耗内存;
  • 使用Basic Exact Greedy Algorithm计算最佳分裂节点时需要预先将特征的取值进行排序,排序之后为了保存排序的结果,费时又费内存;
  • 计算分裂节点时需要遍历每一个候选节点,然后计算分裂之后的信息增益,费时;
  • 生成决策树是level-wise级别的,也就是预先设置好树的深度之后,每一颗树都需要生长到设置的那个深度,这样有些树在某一次分裂之后效果甚至没有提升但仍然会继续划分树枝,然后再次划分…之后就是无用功了,耗时。

lightGBM的改进

1.直方图差加速:直方图算法的基本思想是先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。内存消耗降低,计算上的代价也大幅降低
2.leaf-wise:每次从当前所有叶子中,找到分裂增益最大的一个叶子,然后分裂,如此循环。因此同Level-wise相比,在分裂次数相同的情况下,Leaf-wise可以降低更多的误差,得到更好的精度。可能会长出比较深的决策树,产生过拟合。因此LightGBM在Leaf-wise之上增加了一个最大深度限制,在保证高效率的同时防止过拟合。
3.特征并行和数据并行:特征并行的主要思想是在不同机器在不同的特征集合上分别寻找最优的分割点,然后在机器间同步最优的分割点。数据并行则是让不同的机器先在本地构造直方图,然后进行全局的合并,最后在合并的直方图上面寻找最优分割点。
4.直接支持类别特征:可以直接输入类别特征,不需要额外的0/1 展开,LightGBM 是第一个直接支持类别特征的 GBDT 工具。

参数名含义用法
taskdefault=traintrain,predict等
max_depth数的最大深度,leaf-wise从增益最大的点开始分裂,容易产生过拟合过拟合时可以降低max_depth减少模型的复杂度
num_leaves每个决策树的最大叶子数量default=31,相当于数的深度为5
learning_rate学习率default=0.1
boosting_typedefault=gbdt选择boosting类型,gbdt,rf等
feature_fraction选择特征比例用来加速训练,防止过拟合
bagging_fraction在不进行重采样的情况下随机选择部分数据用来加速训练,防止过拟合
early_stopping如果验证集的精度在连续的early_stopping中没有提升,将停止训练default=0
lambda_l1L1正则default=0
lambda_l2L2正则default=0
num_boost_round迭代次数default=100
bagging_seedbagging用的随机种子default=3
num_threads线程数default=OpenMP_default
Light GBM(Light Gradient Boosting Machine)是一个基于决策树的梯度提升框架,具有高效、快速、内存占用低等优点,特别适用于大规模数据集的建模任务。以下是使用 Light GBM 的基本指南: ### 安装 Light GBM Light GBM 支持多种语言接口,包括 Python、R 和命令行接口。以 Python 为例,可以通过 pip 安装: ```bash pip install lightgbm ``` 如果需要使用 GPU 加速,可以通过额外的编译步骤启用 GPU 支持。 ### 数据准备 Light GBM 可以处理多种格式的数据,包括 NumPy 数组、Pandas DataFrame 和 LibSVM 格式文件。通常使用 `lightgbm.Dataset` 来加载数据: ```python import lightgbm as lgb import numpy as np # 示例数据 X_train = np.random.rand(100, 10) y_train = np.random.randint(0, 2, size=100) # 加载数据集 train_data = lgb.Dataset(X_train, label=y_train) ``` ### 参数设置 Light GBM 的参数设置非常灵活,主要包括任务类型、提升类型、树的结构等参数。以下是一个典型的参数配置: ```python params = { 'objective': 'binary', # 任务类型,例如二分类 'boosting_type': 'gbdt', # 提升类型 'num_leaves': 31, # 叶子节点数量 'learning_rate': 0.05, # 学习率 'feature_fraction': 0.9, # 每次迭代中随机选择的特征比例 'bagging_fraction': 0.8, # 数据抽样比例 'bagging_freq': 5, # 每 k 次迭代进行一次 bagging 'verbose': 0 # 日志详细程度 } ``` ### 训练模型 使用 `lightgbm.train` 方法进行模型训练: ```python # 训练模型 model = lgb.train(params, train_data, num_boost_round=100) ``` ### 预测与评估 训练完成后,可以使用模型进行预测,并通过评估指标(如准确率、AUC 等)来衡量模型性能: ```python # 预测 X_test = np.random.rand(50, 10) y_pred = model.predict(X_test) # 将概率转换为类别预测 y_class = [1 if p >= 0.5 else 0 for p in y_pred] ``` ### 交叉验证 Light GBM 提供了内置的交叉验证功能,可用于选择最佳的迭代次数和评估模型性能: ```python # 交叉验证 cv_results = lgb.cv(params, train_data, num_boost_round=100, nfold=5) best_num_boost_round = len(cv_results['binary-mean']) ``` ### 特征重要性 Light GBM 可以轻松地可视化特征重要性,帮助理解模型的决策过程: ```python # 可视化特征重要性 lgb.plot_importance(model) ``` ### 总结 Light GBM 是一个功能强大且高效的梯度提升框架,适用于各种机器学习任务。通过上述步骤,可以快速上手并构建高性能的模型。在实际应用中,建议根据具体任务调整参数,以获得最佳的模型性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值