###基础概念

LigthGBM是boosting集合模型中的新进成员,它和xgboost一样是对GBDT的高效实现,很多方面会比xgboost表现的更为优秀。原理上它和GBDT及xgboot类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树。

###LightGBM的优化点
1、采用直方图算法
2、树的生长策略优化
3、相对于xgboost和GBDT,LightGBM提出了两个新方法,使得LightGBM的效率要显著要高于GBDT和xgboost。这两种新方法是:Gradient-based One-Side Sampling (GOSS:基于梯度的one-side采样) 和Exclusive Feature Bundling (EFB:互斥的特征捆绑)

####直方图算法(Histogram)

直方图算法是先把连续的浮点特征值离散化成k个整数,同时构造一个宽度为k的直方图。遍历数据时,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。

它的优点如下:

  • 直方图只需对直方图统计量计算信息增益,相比较于预排序算法每次都遍历所有的值,信息增益的计算量要小很多
  • 通过利用叶节点的父节点和相邻节点的直方图的相减来获得该叶节点的直方图,从而减少构建直方图次数,提升效率
  • 存储直方图统计量所使用的内存远小于预排序算法

####树的生长策略优化

LightGBM 通过 leaf-wise (best-first)策略来生长树。它将选取具有最大信息增益最大的叶节点来生长。 当生长相同的叶子时,leaf-wise 算法可以比 level-wise 算法减少更多的损失。

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

####Gradient-based One-Side Sampling

GOSS是通过区分不同梯度的实例,保留较大梯度实例同时对较小梯度随机采样的方式减少计算量,从而达到提升效率的目的。

这里有一个问题,为什么只对梯度小的样本进行采样呢?

因为在提升树训练过程中目标函数学习的就是负梯度(近似残差),梯度小说明训练误差已经很小了,对这部分数据的进一步学习的效果不如对梯度大的样本进行学习的效果好或者说对梯度小的样本进行进一步学习对改善结果精度帮助其实并不大。

GOSS的计算步骤如下:

  • 根据样本的梯度将样本降序排序。
  • 保留前n个数据样本,作为数据子集z1。
  • 对于剩下的数据的样本,随机采样获得大小为m的数据子集Z2。
  • 计算信息增益时对采样的Z2样本的梯度数据乘以(1-n)/m(目的是不改变原数据的分布)

####Exclusive Feature Bundling

EFB是通过特征捆绑的方式减少特征维度(其实是降维技术)的方式,来提升计算效率。通常被捆绑的特征都是互斥的(一个特征值为零一个特征值不为零),这样两个特征捆绑起来才不会丢失信息。如果两个特征并不是完全互斥(部分情况下两个特征都是非零值),可以用一个指标对特征不互斥程度进行衡量,称之为冲突比率,当这个值较小时,我们可以选择把不完全互斥的两个特征捆绑,而不影响最后的精度。

EBF的算法步骤如下:

  • 将特征按照非零值的个数进行排序
  • 计算不同特征之间的冲突比率
  • 遍历每个特征并尝试合并特征,使冲突比率最小化

###LightGBM的python包参数详解

超参数:

  • max_depth, default=-1, type=int,树的最大深度限制,防止过拟合
  • min_data_in_leaf, default=20, type=int, 叶子节点最小样本数,防止过拟合
  • feature_fraction, default=1.0, type=double, 0.0 < feature_fraction < 1.0,随机选择特征比例,加速训练及防止过拟合
  • feature_fraction_seed, default=2, type=int,随机种子数,保证每次能够随机选择样本的一致性
  • bagging_fraction, default=1.0, type=double, 类似随机森林,每次不重采样选取数据
  • lambda_l1, default=0, type=double, L1正则
  • lambda_l2, default=0, type=double, L2正则
  • min_split_gain, default=0, type=double, 最小切分的信息增益值
  • top_rate, default=0.2, type=double,大梯度树的保留比例
  • other_rate, default=0.1, type=int,小梯度树的保留比例
  • min_data_per_group, default=100, type=int,每个分类组的最小数据量
  • max_cat_threshold, default=32, type=int,分类特征的最大阈值

###LightGBM的python简单实现

import lightgbm as lgb
import pandas as pd iris = load_iris()
data=iris.data
target = iris.target
X_train,X_test,y_train,y_test =train_test_split(data,target,test_size=0.25) gbm = lgb.LGBMRegressor(learning_rate=0.03,n_estimators=200,max_depth=8)
gbm.fit(X_train, y_train) #预测结果
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration_)

参考文档:
官方中文文档
http://lightgbm.apachecn.org/cn/latest/index.html
原理介绍文档
https://papers.nips.cc/paper/6907-lightgbm-a-highly-efficient-gradient-boosting-decision-tree.pdf

机器学习——LightGBM的更多相关文章

  1. 图解机器学习 | LightGBM模型详解

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/34 本文地址:http://www.showmeai.tech/article-det ...

  2. 机器学习 之LightGBM算法

    目录 1.基本知识点简介 2.LightGBM轻量级提升学习方法 2.1 leaf-wise分裂策略 2.2 基于直方图的排序算法 2.3 支持类别特征和高效并行处理 1.基本知识点简介 在集成学习的 ...

  3. 机器学习之 XGBoost和LightGBM

    目录 1.基本知识点简介 2.梯度提升树GBDT算法 2.1 思路和原理 2.2 梯度代替残差建立CART回归树 3.XGBoost提升树算法 3.1 XGBoost原理 3.2 XGBoost中损失 ...

  4. LightGBM详细用法--机器学习算法--周振洋

    LightGBM算法总结 2018年08月21日 18:39:47 Ghost_Hzp 阅读数:2360 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  5. 机器学习系列:LightGBM 可视化调参

    大家好,在100天搞定机器学习|Day63 彻底掌握 LightGBM一文中,我介绍了LightGBM 的模型原理和一个极简实例.最近我发现Huggingface与Streamlit好像更配,所以就开 ...

  6. LightGBM的并行优化--机器学习-周振洋

    LightGBM的并行优化 上一篇文章介绍了LightGBM算法的特点,总结起来LightGBM采用Histogram算法进行特征选择以及采用Leaf-wise的决策树生长策略,使其在一批以树模型为基 ...

  7. 工业级GBDT算法︱微软开源 的LightGBM(R包正在开发....)

    看完一篇介绍文章后,第一个直觉就是这算法已经配得上工业级属性.日前看到微软已经公开了这一算法,而且已经发开python版本,本人觉得等hadoop+Spark这些平台配齐之后,就可以大规模宣传啦~如果 ...

  8. LightGBM大战XGBoost,谁将夺得桂冠?

    引 言 如果你是一个机器学习社区的活跃成员,你一定知道 提升机器(Boosting Machine)以及它们的能力.提升机器从AdaBoost发展到目前最流行的XGBoost.XGBoost实际上已经 ...

  9. LightGBM总结

    一.LightGBM介绍 LightGBM是一个梯度Boosting框架,使用基于决策树的学习算法.它可以说是分布式的,高效的,有以下优势: 1)更快的训练效率 2)低内存使用 3)更高的准确率 4) ...

随机推荐

  1. Arduino I2C + 温湿度传感器HTS221

    主要特性 HTS221是意法半导体(STMicroelectronics)生产的小体积.数字式温湿度传感器IC.该IC目前在官网仍处在“评估”状态.其主要特性: 工作电压:1.7~3.6V 数据输出频 ...

  2. Conditional Expressions

    Conditional Expressions建立一些逻辑关系 The conditional expression classes from django.db import models clas ...

  3. UWP平台Taglib编译(1)

    此文已由作者郑博授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 最近开始开发UWP平台的App,项目需要用到Taglib进行音视频文件的标签信息读写,Google并没有现成的B ...

  4. 《Beginning Java 7》 - 4 - finalize() 手动垃圾回收

    当我们想在系统进行垃圾回收时做一些特定的工作,我们就可以重写 finalze() 函数,因为 Object 的 此函数是空的. 比如: protected void finalize() throws ...

  5. 【09】循序渐进学 docker:docker swarm

    写在前面的话 至此,docker 的基础知识已经了解的差不多了,接下来就来谈谈对于 docker 容器,我们如何来管理它. docker swarm 在学习 docker swarm 之前,得先知道容 ...

  6. 支付机构MRC模

    一.电商RFM模型 RFM模型是一个简单的根据客户的活跃程度和交易金额贡献所做的分类.因为操作简单,所以较为常用. 近度R:R代表客户最近的活跃时间距离数据采集点的时间距离,R越大,表示客户越久未发生 ...

  7. 201621123023《Java程序设计》第7周学习总结

    一.本周学习总结 1.1 思维导图:Java图形界面总结 二.书面作业 1. GUI中的事件处理 1.1 写出事件处理模型中最重要的几个关键词. 关键词:事件源.事件监听器.事件处理方法.事件适配器 ...

  8. “全栈2019”Java第三十五章:面向对象

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. IE8引入JavaScript

    错误写法 : <script type="application/javascript"> 正确写法     <script type="text/ja ...

  10. 利用Logstash plugins做更多的事情

    1. 引言 之前一篇文章<Logstash 介绍及linux下部署>,我们实现了logstash的安装以及简单的控制台标准输入输出测试,那么logstash能不能做更多的事情呢?答案是肯定 ...