lightGBM 与 Xgboost比较

姓名:Jyx
描述:人工智能学习笔记

lightGBM 是微软开发的一个GBDM开源实现,其相比Xgboost有如下优势(摘自LightGBM官方网站

  1. 速度和内存使用的优化
    LightGBM 利用基于 histogram 的算法,通过将连续特征(属性)值分段为 discrete bins 来加快训练的速度并减少内存的使用,相比于xgboost的pre-sort算法,复杂度从O(N)降到O(bin)
  2. 基于直方图的稀疏优化
    对于稀疏的特征仅仅需要 O(2 * #non_zero_data) 来建立直方图
  3. 准确率的优化
    Leaf-wise (Best-first) 的决策树生长策略
    大部分决策树的学习算法通过 level(depth)-wise 策略生长树,如下图一样:

这里写图片描述
LightGBM 通过 leaf-wise (best-first)[6] 策略来生长树。它将选取具有最大 delta loss 的叶节点来生长。 当生长相同的 #leaf,leaf-wise 算法可以比 level-wise 算法减少更多的损失。

当 #data 较小的时候,leaf-wise 可能会造成过拟合。 所以,LightGBM 可以利用额外的参数 max_depth 来限制树的深度并避免过拟合(树的生长仍然通过 leaf-wise 策略)。

这里写图片描述
4. 直方图做差优化
生长时,可以用父节点减去某一子节点得到另一个子节点,这样就可以只计算一个子节点
5. 直接支持类别特征
6. 多线程优化

直方图优化的基本思想

直方图优化的基本思想是,将数据根据大小分为数个箱子,默认是256个,这样可以只用一个byte来表示,节约内存,这样原来要遍历所有样本来找最优分割,现在就只需要遍历所有的箱子就好了。大大节约计算量,
显然,这样计算很可能找不到最优分割,然而实验表明,最终差异很小,有时候甚至优于全局搜索(这是可能的,决策树对分割点的精度不敏感,也可以把这种分割当作一种特别的正则)

LightGBM 的python接口

基本流程

  1. 读取数据,构造dataset
    数据创建接口
class lightgbm.Dataset(data, label=None, max_bin=None, reference=None, weight=None, group=None, init_score=None, silent=False, feature_name='auto', categorical_feature='auto', params=None, free_raw_data=True)

max_bin是指定bin的数目
categorical_feature是lightGBM特殊参数,用来指定类别特征
2. 设置参数,进行train/cv

lightgbm.train(params, train_set, num_boost_round=100, valid_sets=None, valid_names=None, fobj=None, feval=None, init_model=None, feature_name='auto', categorical_feature='auto', early_stopping_rounds=None, evals_result=None, verbose_eval=True, learning_rates=None, keep_training_booster=False, callbacks=None)

lightgbm.cv(params, train_set, num_boost_round=10, folds=None, nfold=5, stratified=True, shuffle=True, metrics=None, fobj=None, feval=None, init_model=None, feature_name='auto', categorical_feature='auto', early_stopping_rounds=None, fpreproc=None, verbose_eval=None, show_stdv=True, seed=0, callbacks=None)
  1. predict
model = lightgbm.train/cv
model.predict(X, raw_score=False, num_iteration=0)
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值