第八章xgboost/lightGBM

本文介绍了XGBoost的基本用法,包括通用参数、集成参数和任务参数,并通过一个示例展示了如何使用XGBoost进行分类预测。此外,还讨论了当评价函数不在默认范围内时的解决方案。同时,文章对比了LightGBM与XGBoost的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 xgboost

1.1 基本用法

xgboost有三类参数:通用参数、集成参数和任务参数。

1.1.1 通用参数

booster:可选值gbree、gblinear。默认值是gbree。这是指定用哪种基模型。
silent,可选值0,1。默认是0,表示有输出。
nthread 线程数

1.1.2 集成参数

eta 学习率。默认值0.3,范围[0,1]。
gamma [default=0, alias: min_split_loss]为了对树的叶子节点做进一步的分割而必须设置的损失减少的最小值,该值越大,算法越保守range: [0,∞]

max_depth [default=6]用于设置树的最大深度range: [1,∞]

min_child_weight [default=1]表示子树观测权重之和的最小值,如果树的生长时的某一步所生成的叶子结点,其观测权重之和小于min_child_weight,那么可以放弃该步生长,在线性回归模式中,这仅仅与每个结点所需的最小观测数相对应。该值越大,算法越保守range: [0,∞]

max_delta_step [default=0]如果该值为0,就是没有限制;如果设为一个正数,可以使每一步更新更加保守通常情况下这一参数是不需要设置的,但是在logistic回归的训练集中类极端不平衡的情况下,将这一参数的设置很有用,将该参数设为1-10可以控制每一步更新range: [0,∞]

subsample [default=1]表示观测的子样本的比率,将其设置为0.5意味着xgboost将随机抽取一半观测用于数的生长,这将有助于防止过拟合现象range: (0,1]

colsample_bytree [default=1]表示用于构造每棵树时变量的子样本比率range: (0,1]

colsample_bylevel [default=1]用来控制树的每一级的每一次分裂,对列数的采样的占比。一般不太用这个参数,因为subsample参数和colsample_bytree参数可以起到相同的作用。range: (0,1]

lambda [default=1, alias: reg_lambda]L2 权重的L2正则化项

alpha [default=0, alias: reg_alpha]L1 权重的L1正则化项

1.1.3 任务参数

objective [ default=reg:linear ] 这个参数定义需要被最小化的损失函数。

base_score [ default=0.5 ]

eval_metric [ 默认是根据 损失函数/目标函数 自动选定的 ]。评估函数。

seed [ default=0 ] random number seed.

1.2 例子

## 引入包
from numpy import loadtxt
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
## 分出变量和标签
dataset = loadtxt('data/Pima-Indians-Diabetes.csv', delimiter=",",skiprows=1)
X = dataset[:,0:8]
Y = dataset[:,8]
## 分出训练集和测试集
seed = 7
test_size = 0.33
X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=test_size,random_state=seed)
## 开始训练
model = XGBClassifier()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))

1.3 当评价函数不在默认范围内

此时需要调用xgboost的native方法进行训练。
需要将训练集和测试集变为xgb.DMatrix数据格式。
可以自己定义的损失函数,需要给定损失函数的一阶导数和二阶导数。
可以自定义评估标准
参考 链接

2 lightGBM

lightGBM是微软开源的一个库。与xgboost相似,但可以处理数据量更大、特征维度更高的数据。
lightGBM与xgboost树的生长方式不同。

<think>好的,用户想了解LightGBM的数学公式和工作原理。首先,我需要回忆一下LightGBM的基本概念。LightGBM是一个基于梯度提升决策树(GBDT)的高效机器学习框架,由微软开发。它主要用于分类和回归任务,优势在于处理大数据集和高维特征时的效率。 接下来,用户提到数学公式,所以我需要整理出LightGBM中的关键算法和数学表达式。例如,GBDT的目标函数通常由损失函数和正则化项组成。LightGBM在此基础上进行了优化,比如使用梯度单边采样(GOSS)和互斥特征捆绑(EFB)。这两个技术的数学原理需要详细解释。 然后,关于工作原理,需要分点说明LightGBM的创新点。首先是基于直方图的决策树算法,它将连续特征离散化为直方图,减少计算量。然后是Leaf-wise生长策略,与传统的Level-wise不同,它选择增益最大的叶子节点进行分裂,提高效率但可能过拟合,所以需要调整参数。 还要提到GOSS,它通过保留大梯度样本和随机采样小梯度样本来减少数据量,同时保持信息量。EFB则通过捆绑互斥特征来降低特征维度,这两个方法都减少了计算复杂度。 在整理数学公式时,要注意使用正确的LaTeX格式。比如目标函数中的损失函数和正则化项,以及直方图算法的增益计算公式。此外,需要引用相关的参考文献,比如用户提供的引用[3]和[4],确保信息的准确性。 用户可能需要了解LightGBM相比其他算法(如XGBoost)的优势,所以需要简要比较,比如处理速度和内存使用上的优化。同时,生成的相关问题要覆盖性能优化、参数调整、应用场景等,帮助用户进一步学习。 最后,检查回答是否符合系统指令:行内公式用$...$,独立公式用$$...$$,结构清晰,引用正确。确保语言简洁,用中文表达,避免复杂术语,让不同层次的读者都能理解。</think>### LightGBM数学原理与工作机制分步解析 (以下内容整合自LightGBM论文及技术文档[^2][^3][^4]) #### 一、基础数学框架 1. **梯度提升目标函数**: $$ \mathcal{L}(\phi) = \sum_{i=1}^{n} l(y_i, \hat{y}_i) + \sum_{k=1}^{K} \Omega(f_k) $$ 其中$f_k$表示第k棵树,$\Omega$为正则化项 2. **泰勒二阶展开**(XGBoost改进): $$ \mathcal{L}^{(t)} \simeq \sum_{i=1}^{n} [g_i f_t(x_i) + \frac{1}{2} h_i f_t^2(x_i)] + \Omega(f_t) $$ 这里$g_i=\partial_{\hat{y}^{(t-1)}} l(y_i, \hat{y}^{(t-1)})$为梯度,$h_i$为Hessian矩阵 #### 二、核心优化技术 1. **直方图算法(Histogram-based)** - 将连续特征离散化为$k$个bins(默认255) - 增益计算公式: $$ Gain = \frac{(\sum_{g_L})^2}{n_L + \lambda} + \frac{(\sum_{g_R})^2}{n_R + \lambda} - \frac{(\sum_{g})^2}{n + \lambda} $$ 其中$\lambda$为L2正则参数 2. **梯度单边采样(GOSS)** - 保留top $a \times 100\%$大梯度样本 - 随机采样$b \times 100\%$小梯度样本 - 引入权重补偿因子: $$ w = \frac{1 - a}{b} $$ 3. **互斥特征捆绑(EFB)** - 定义冲突率: $$ \text{Conflict} = \frac{\sum_{i=1}^{n} \delta_{x_j^{(i)} \neq 0 \wedge x_k^{(i)} \neq 0}}{n} $$ - 通过贪心算法将冲突率低的特征捆绑 #### 三、树生长策略 **Leaf-wise生长** vs 传统Level-wise: - 每次选择增益最大的叶子节点分裂 - 分裂停止条件: $$ \max Gain < \gamma \quad \text{或} \quad \text{深度} > d_{max} $$ #### 四、时间复杂度对比 | 操作 | XGBoost | LightGBM | |------|---------|----------| | 特征扫描 | $O(\#data \times \#feature)$ | $O(\#bins \times \#feature)$ | | 内存占用 | 保存预排序数据 | 离散值存储(8-bit)|
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值