LightGBM基本原理

本文详细介绍了LightGBM的数据压缩策略,包括连续变量分箱、互斥特征捆绑(EFB)和基于梯度的单边采样(GOSS)。通过等宽分箱和EFB算法实现数据降维,而GOSS则用于样本下采样,以提高计算效率。LightGBM的决策树优化包括直方图优化算法和leaf wise tree growth策略,有效提升模型训练速度和精度。

目录

LightGBM的数据压缩策略介绍

LightGBM决策树建模优化方法

1、直方图优化算法

2、leaf wise tree growth叶子节点优先生长决策

1、连续变量分箱

1.1 等宽分箱

1.2 手动示例

2、互斥特征捆绑(Exclusive Feature Bunding,EFB)

2.1 EFB算法提出背景

2.2 捆绑特征计算原理 ( 冲突比例 )

2.3 捆绑示例代码

2.4 特征捆绑

3、基于梯度的单边采样 (Grandient-based One-Side Sampling ,GOSS )

3.1 GOSS计算基本原理

3.2 GOSS计算过程实例

·损失函数、梯度与Hessian计算公式

·代码部分

·LGBM初始预测值

·GOSS抽样


LightGBM的数据压缩策略介绍

        LightGBM的数据压缩策略LightGBM建模过程总共会进行三方面的数据压缩,根据实际建模顺序,会现在全样本上连续变量分箱(连续变量离散化),然后同时带入离散特征和离散后的连续变量进行离散特征捆绑(合并)降维,最终在每次构建一颗树之前进行样本下采样。其中连续变量的分箱就是非常简单的等宽分箱,并且具体箱体的数量可以通过超参数进行人工调节;而离散特征的降维,则是采用了一种所谓的互斥特征捆绑(Exclusive Feature Bundling, EFB)算法,该算法也是由LGBM首次提出,该方法的灵感来源于独热编码的逆向过程,通过把互斥的特征捆绑到一起来实现降维,这种方法能够很好的克服传统降维方法带来的信息大量损耗的问题,并且需要注意的是,输入EFB进行降维的特征,即包括原始离散特征,也包括第一阶段连续变量离散化之后的特征;在这一系列数据压缩之后,LGBM在每次迭代(也就是每次训练一颗决策树模型)的时候,还会围绕训练数据集进行下采样,此时的下采样不是简单的随机抽样,而是一种名为基于梯度的单边采样(Gradient-based One-Side Sampling, GOSs)的方法,和EFB类似,这种方法能够大幅压缩数据,但同时又不会导致信息的大量损失。不难发现,最终输入到每颗决策树进行训练的数据,实际上是经过大幅压缩后的数据,这也是LGBM计算高效的根本原因之一。

LightGBM决策树建模优化方法

1、直方图优化算法

        高效表示分裂前后的节点的核心数据,且父子节点可以通过直方图减法直接计算,从而加速数据集分裂的计算过程:

2、leaf wise tree growth叶子节点优先生长决策

XGboost是一次生长一层也就是Level-wise tree growth,生长过程如下:

但是针对叶子节点优先分裂,可以理解为深度优先的“有偏”决策 生长。

优点:大幅提升每颗树的收敛速度,提升迭代速率。

劣势:每棵树计算更加复杂,且数据压缩后易出现过拟合的,但是可以通过设置树的深度来优化。

1、连续变量分箱

1.1 等宽分箱

        lightGBM连续变量分箱实现简单的等宽分箱,通过设置max_bin值来确定分箱数,例如连续变量取值范围是[0,10],设置max_bin=2,则bin0=[0,5]和bin1=[5,10],XGboost是通过分位数分箱,不是等宽分箱。

1.2 手动示例

import pandas as pd
import numpy as np
from sklearn.preprocessing import KBinsDiscretizer

# 创建数据集
data = {
    'x1': [1.2, 3.0, 2.6, 3.3, 2.2, 2.5, 1.3, 2.0, 1.9, 2.9],
    'x2': [4.6, 5.4, 3.8, 6.1, 3.4, 4.4, 5.0, 2.6, 4.0, 3.7],
    'x3': [1, 1, 0, 1, 1, 1, 1, 0, 1, 1],
    'x4': [0, 0, 1, 0, 0, 1, 0, 1, 0, 1],
    'y': [1, 0, 1, 0, 1, 1, 0, 0, 1, 1]
}

df = pd.DataFrame(data)

# 提取连续变量列
continuous_cols = ['x1', 'x2']

# 定义等宽分箱器
max_bin = 3
kbins = KBinsDiscretizer(n_bins=max_bin, encode='ordinal', strategy='uniform')

# 对连续变量进行分箱
binned_cols = ['x1_binned', 'x2_binned']
df_binned = pd.DataFrame(kbins.fit_transform(df[continuous_cols]), columns=binned_cols)

# 将分箱结果合并到原数据集
df_final = pd.concat([df, df_binned], axis=1)

print(df_final)

        如示例所示的等宽分箱区间划分实际情况,如x1值域区间[1.2,3.3]若设置max_bin=3,则分箱深度为(3.3-1.2)/3=0.7,分箱区间则为{ [1.2,1.9) , [1.9,2.6) , [2.6,3.3] }。binned值为{ 0 , 1 , 2 }。至此,第一阶段对数据的连续变量采用的分箱处理完成。

2、互斥特征捆绑(Exclusive Feature Bunding,EFB)

   离散特征降维,LGBM采用互斥特征捆绑的降维方法,本节研究背景、原理、及示例代码。

2.1 EFB算法提出背景

        根据论文《A Highly Efficient Gradient Boosting Decision Tree (2017) 》中说明,原始GBDT树训练时,需要使用到全量的数据计算信息增益,从而找到决策树节点最佳分支节点,但缺点是耗费算力和时间,在传统基础上提出的欠采样会使得模型训练不稳定和PCA降维会由冗余信息导致信息丢失。因此,LightGBM日出单边采样的GOSS对样本数量进行压缩,EFB来进行特征捆绑,这两者的结合能够同时兼顾精度和效率。后续还提出了直方图的数据压缩优化。

### LightGBM算法工作机制与基本原理 #### 1. 基本思想 LightGBM是一种基于决策树的梯度提升框架,它利用直方图方法来优化计算效率并减少内存消耗。相比于传统的梯度提升决策树(Gradient Boosting Decision Tree, GBDT),LightGBM通过引入Leaf-wise生长策略替代Level-wise生长方式,在相同精度下显著提高了训练速度[^1]。 #### 2. 核心技术特点 - **Leaf-wise (最佳优先) 生长策略**: Leaf-wise策略允许模型每次从当前所有叶子中找到具有最大分裂增益的一个节点进行分裂,而不是像传统GBDT那样逐层分裂。这种策略可以更早地捕获到重要的特征组合,从而提高模型效果。然而,为了防止过拟合,通常会设置最大深度限制。 - **直方图算法**: LightGBM采用直方图算法将连续型特征离散化为k个整数值(即构建直方图)。在每轮迭代过程中,只需扫描一次数据即可完成统计工作,极大地减少了计算量。具体而言,对于每个特征,程序会先建立一个固定宽度的直方图,再依据该直方图寻找最优分割点[^2]。 - **带权量化直方图**: 针对大规模稀疏数据场景,LightGBM提出了带权量化的方法进一步降低存储需求和运行时间成本。此方法能够在保持较高预测准确性的同时有效处理高维稀疏输入向量[^3]。 #### 3. 切分点选择逻辑 当决定某个节点是否应该被划分时,LightGBM会评估切分前后带来的增益值,并将其与预定义阈值对比。如果增益超过指定标准,则执行切割操作;否则保留原状不变。整个判断流程如下所示: ```cpp // Pseudo-code for split decision in feature_histogram.hpp if (gain >= min_split_gain && num_data_in_left * num_data_in_right > 0){ perform_split(); } else { keep_node_unsplit(); } ``` 上述伪代码片段清晰体现了LightGBM关于何时实施分支的关键准则之一——只有当预期收益足够大且两侧子集均含有样本实例的情况下才会真正施行分区动作。 #### 4. 并行学习支持 除了高效的单机版本外,LightGBM还提供了分布式环境下的多线程并行能力。这使得即使面对TB级海量数据也能快速得到高质量的结果。主要依赖三种类型的并行模式:数据并行、功能并行以及投票并行。 --- ### 总结 综上所述,LightGBM凭借独特的Leaf-wise增长机制、创新性的直方图技术和强大的并行架构设计成为现代机器学习领域不可或缺的一员。无论是解决回归还是分类问题,都能展现出卓越的表现力。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值