添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

一、 前言

最近在做Kaggle比赛的时候,看到别人的Kenels中都用到了lightgbm,自己也试图用了一下,发现效果很好,最重要的是它相对于XGBoost算法,大大的降低了运行的速度。所以就对Lightgbm的原理探了个究竟,这里就对Lightgbm论文的理解以及对官网上对Lightgbm的介绍做一个学习笔记。

传统的boosting算法(如GBDT和XGBoost)已经有相当好的效率,但是在如今的大样本和高维度的环境下,传统的boosting似乎在效率和可扩展性上不能满足现在的需求了,主要的原因就是传统的boosting算法需要对每一个特征都要扫描所有的样本点来选择最好的切分点,这是非常的耗时。为了解决这种在大样本高纬度数据的环境下耗时的问题,Lightgbm使用了如下两种解决办法:一是GOSS(Gradient-based One-Side Sampling, 基于梯度的单边采样),不是使用所用的样本点来计算梯度,而是对样本进行采样来计算梯度;二是EFB(Exclusive Feature Bundling, 互斥特征捆绑) ,这里不是使用所有的特征来进行扫描获得最佳的切分点,而是将某些特征进行捆绑在一起来降低特征的维度,是寻找最佳切分点的消耗减少。这样大大的降低的处理样本的时间复杂度,但在精度上,通过大量的实验证明,在某些数据集上使用Lightgbm并不损失精度,甚至有时还会提升精度。下面就主要介绍这两种方法。

本文的主要内容,首先介绍GOSS和EFB方法,然后再根据Lightgbm官网的介绍,谈一谈Lightgbm的特性以及调参。

二、Gradient-based One-Side Sampling(GOSS)介绍

GOSS(基于梯度的单边采样)方法的主要思想就是,梯度大的样本点在信息增益的计算上扮演着主要的作用,也就是说这些梯度大的样本点会贡献更多的信息增益,因此为了保持信息增益评估的精度,当我们对样本进行下采样的时候保留这些梯度大的样本点,而对于梯度小的样本点按比例进行随机采样即可。

2.1 GOSS算法

在AdaBoost算法中,我们在每次迭代时更加注重上一次错分的样本点,也就是上一次错分的样本点的权重增大,而在GBDT中并没有本地的权重来实现这样的过程,所以在AdaBoost中提出的采样模型不能应用在GBDT中。但是,每个样本的梯度对采样提供了非常有用的信息。也就是说,如果一个样本点的梯度小,那么该样本点的训练误差就小并且已经经过了很好的训练。一个直接的办法就是直接抛弃梯度小的样本点,但是这样做的话会改变数据的分布和损失学习的模型精度。GOSS的提出就是为了避免这两个问题的发生。下面就是GOSS算法的伪代码:

下面将对上述算法进行描述。

2.2 GOSS算法描述

输入:训练数据,迭代步数d,大梯度数据的采样率a,小梯度数据的采样率b,损失函数和若学习器的类型(一般为决策树);

输出:训练好的强学习器;

(1)根据样本点的梯度的绝对值对它们进行降序排序;

(2)对排序后的结果选取前a*100%的样本生成一个大梯度样本点的子集;

(3)对剩下的样本集合(1-a)*100%的样本,随机的选取b*(1-a)*100%个样本点,生成一个小梯度样本点的集合;

(4)将大梯度样本和采样的小梯度样本合并;

(5)将小梯度样本乘上一个权重系数 \frac{1-a}{b}

(6)使用上述的采样的样本,学习一个新的弱学习器;

(7)不断地重复(1)~(6)步骤直到达到规定的迭代次数或者收敛为止。

通过上面的算法可以在不改变数据分布的前提下不损失学习器精度的同时大大的减少模型学习的速率。

从上面的描述可知,当a=0时,GOSS算法退化为随机采样算法;当a=1时,GOSS算法变为采取整个样本的算法。在许多情况下,GOSS算法训练出的模型精确度要高于随机采样算法。另一方面,采样也将会增加若学习器的多样性,从而潜在的提升了训练出的模型泛化能力。

三、Exclusive Feature Bundling(EFB)介绍

Lightgbm实现中不仅进行了数据采样,也进行了特征抽样,使得模型的训练速度进一步的减少。但是该特征抽样又与一般的特征抽样有所不同,是将互斥特征绑定在一起从而减少特征维度。主要思想就是,通常在实际应用中高纬度的数据往往都是稀疏数据(如one-hot编码),这使我们有可能设计一种几乎无损的方法来减少有效特征的数量。尤其,在稀疏特征空间中许多特征都是互斥的(例如,很少同时出现非0值)。这就使我们可以安全的将互斥特征绑定在一起形成一个特征,从而减少特征维度。但是怎样的将互斥特征绑定在一起了?Li

更多Python学习内容:ipengtao.com大家好,今天为大家分享一个超强的 Python 库 - pyramid。Github地址:https://github.com/Pylons/pyramid LightGBM 是一个快速、分布式、高性能的梯度提升决策树(Gradient Boosting Decision Tree)库,它在机器学习和数据挖掘领域被广泛应用。本文将 介绍 LightGBM 库... 来源:机器学习初学者 本文约11000字,建议阅读20分钟本文为你 介绍 数据挖掘神器 LightGBM LightGBM 是微软开发的 boosting 集成模型,和 XGBoost 一样是对 GBDT 的优化和高效实现,原理有一些相似之处,但它很多方面比 XGBoost 有着更为优秀的表现。1. LightGBM 安装 LightGBM 作为常见的强大Python机器学习工具库,安装也比较简单。这些系统... 1.1 GBDT和 LightGBM 对比 ​ GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。GBDT 在工业界应用广泛,通常被用于点击率预测,搜索排序等任务。GBDT 也是各种数据挖掘竞赛的致命武器... 1. LightGBM 简介 GBDT (Gradient Boosting Decision Tree) 是机器学习中一个长盛不衰的模型,其主要思想是利用弱分类器(决策树)迭代训练以得到最优模型,该模型具有训练效果好、不易过拟合等优点。GBDT不仅在工业界应用广泛,通常被用于多分类、点击率预测、搜索排序等任务;在各种数据挖掘竞赛中也是致命武器,据统计Kaggle上的比赛有一半以上的冠军方案都是基于GBDT。而 LightGBM (Light Gradient Boosting Machine)是一个实现GBDT 在寻找最佳特征值来分割树节点时, LightGBM 使用特征值直方图,并尝试所有直方图bin值,而不是尝试所有可能的特征值,因此可以减少寻找最佳特征吐出值的时间和计算量。例如,给定下面的年龄特征,将直方图离散特征值放入不同的范围箱中,因此我们可以使用像Age⩽30,Age⩽40,,,,Age⩽100这样的吐槽标准,而不是尝试像Age这样的所有可能的年龄值⩽31、年龄⩽32 等。一般来说, GOSS 的主要思想是,在训练下一个集成树之前,我们保留梯度较大的训练实例,并丢弃一些梯度较小的训练实例。 1. LightGBM 概述 LightGBM (Light Gradient Boosting Machine)是一个基于决策树算法的快速的、分布式的、高性能 gradient boosting(GBDT、GBRT、GBM 或 MART)框架,可被用于排行、分类以及其他许多机器学习任务中。 2. LightGBM 的起源 GBDT 虽然是个强力的模型,但却有着一个致命的缺陷,不能用类似 mini ba... AdaBoost(Adaptive Boosting)是一种集成学习算法,通过组合多个弱分类器来构建一个强分类器。它是由Freund和Schapire在1996年提出的,是集成学习中最早被广泛应用的算法之一。如何改变训练数据的权重或概率分布提高前一轮被弱分类器错误分类的样本的权重,降低前一轮被分对的权重。如何将弱分类器组合成一个强分类器,亦即,每个分类器,前面的权重如何设置采取“多数表决”的方法。 LigthGBM是boosting集合模型中的新进成员,由微软提供,它和XGBoost一样是对GBDT的高效实现,原理上它和GBDT及XGBoost类似,都采用损失函数的负梯度作为当前决策树的残差近似值,去拟合新的决策树。 LightGBM 在很多方面会比XGBoost表现的更为优秀。它有以下优势: 更快的训练效率 低内存使用 更高的准确率 支持并行化学习 可处理大规模数据 支持直接使用catego... 文章目录XGBoost不足之处直方图算法单边梯度抽样算法( GOSS )互斥特征捆绑算法( EFB )带深度限制的 Leaf-wise 算法 LightGBM 的工程优化直接支持类别特征特征并行数据并行投票并行Cache命中率优化 LightGBM 的优缺点 LightGBM 是轻量级(Light)的梯度提升机器(GBM),是GBDT模型的另一个进化版本。它延续了XGBoost 的那一套集成学习的方式,相对于xgboost, 具有训练速度快和内存占用率低的特点。 XGBoost不足之处 XGBoost的核心思想: xgbo 文章目录一、 LightGBM 原生接口重要 参数 训练 参数 预测方法绘制特征重要性分类例子回归例子二、 LightGBM 的 sklearn 风格接口LGBMClassifier基本使用例子LGBMRegressor基本使用例子三、 LightGBM 调参思路四、 参数 网格搜索 与 xgboost 类似, LightGBM 包含原生接口和 sklearn 风格接口两种,并且二者都实现了分类和回归的功能。如果想了解一些理论性的内容,可以看看之前的文章: LightGBM 相关知识理解 一、 LightGBM 原生接口 重要 参数 LightGBM (Light Gradient Boosting Machine)是一个实现GBDT算法的框架,支持高效率的并行训练,并且具有更快的训练速度、更低的内存消耗、更好的准确率、支持分布式可以快速处理海量数据等优点。   GBDT在每一次迭代的时候,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。因此 LightGBM 提出的主要目的就是解决GBDT在海量数据时的问题,让GBDT可以更好更快地用于工业实践。 我近期研究了各种树模型,在理解 LightGBM 的直方图、 GOSS 单边梯度采样环节时都有些困难。我在网上找了很多资料,但大部分以文字为主,且非常抽象,理解起来十分困难。因此我想通过画图、画表、举例子的方式,具体解释一下 LightGBM 的直方图算法和 GOSS 算法。本文旨在以图表化的方式展现直方图算法和 GOSS 算法的具体过程,因此不涉及任何数学推导和代码内容。如果有小伙伴对梯度提升树、xgboost、 LightGBM 的概念还比较陌生,建议先补充相关知识。