文章目录
- 1、Boosting 的工作原理
- 常见的 Boosting 算法
- 优点和缺点
- 如何进行加权投票
- 2、XGB
- 1. XGBoost中的梯度提升
- 2. 目标函数
- 3. 树的构建与优化
- 4. 处理缺失值与特征重要性
- 3、LGB
- 核心特征
- 1. 基于直方图的决策树学习
- 2. 叶子优先策略
- 3. 处理类别特征
- 4. 缺失值处理
- 工作原理
- 数据预处理
- 训练过程
- 优化与效率
- 应用场景
- 4、LGB和XGB的区别
- 1. 处理大数据的效率
- 2. 内存使用
- 3. 处理分类特征
1、Boosting 的工作原理
Boosting 是一种强大的集成学习技术,旨在提高多个弱学习器的性能,最终形成一个强大的模型。这种方法的核心思想是通过顺序地训练学习器,其中每个学习器都尝试纠正前一个学习器的错误。下面是 Boosting 的详细解释,包括其原理、常见算法、以及优缺点。
- 总的来说,Boosting的过程是,顺序训练学习器,一开始样本权重相等,然后进行学习器训练,在训练一个学习器之后,这个学习器产生错误的样本会用来计算在所有学习器中的权重,也会用来更新下一个学习器的样本权重,总体上看错误率越高的学习器权重越小,并且错误样本权重会被更新变大(错误率也是通过权重加权得到)。(注意学习器的权重只跟自身错误率有关,当然这个计算公式是相同的,而样本权重是根所有样本有关的,因为要归一化。学习器的权重不需要归一化)
- 最后每个学习器都有一个权重,在进行任务时,通过加权得到结果。
Boosting 包括以下步骤:
-
初始化:
- 在开始时,Boosting 算法对训练数据中的每个样本分配一个相等的权重。这意味着在第一轮中,每个样本在学习过程中具有相同的重要性。
-
顺序学习:
- 每一轮中,训练一个新的弱学习器。弱学习器通常是简单模型,比如决策树桩(一层决策树)。这些学习器特意设计为仅比随机猜测略好。
- 每个学习器在训练过程中专注于前一个学习器错误分类的样本。这通常通过增加这些样本的权重来实现,这样在计算损失函数时,权重更大的样本对损失函数的贡献更多(加权损失)。
-
错误评估和权重调整:
- 每个学习器的性能通过计算其错误率来评估,错误率是错误分类样本的权重和。
- 根据学习器的错误率,更新样本权重:错误分类的样本权重增加,正确分类的样本权重减少。
-
学习器权重分配:
- 每个学习器根据其性能被赋予一个权重,通常这个权重与其错误率成反比。 误差低的学习器在最终决策中有更大的影响。
-
组合所有学习器:
- Boosting 算法的最终预测是通过组合所有学习器的加权预测得到的。在分类问题中,这通常涉及到加权投票;在回归问题中,通常是加权平均。
- 分类问题,加权求出每个类别的权值,选最高的为最终分类。
- 在组合所有学习器时,样本就没有权重了。样本权值在训练学习器,以及计算学习器权重时有效。
- Boosting 算法的最终预测是通过组合所有学习器的加权预测得到的。在分类问题中,这通常涉及到加权投票;在回归问题中,通常是加权平均。
常见的 Boosting 算法
-
AdaBoost (Adaptive Boosting):
- AdaBoost 是最早的也是最著名的 Boosting 算法之一。它通过调整关注被先前学习器错误分类的样本来增强模型。
-
Gradient Boosting:
- Gradient Boosting 不直接操作数据权重,而是通过优化一个损失函数来减少前一个模型的预测误差。它通过逐步添加新的学习器,专注于当前模型的残差。
-
XGBoost (Extreme Gradient Boosting):
- XGBoost 是 Gradient Boosting 的一种高效实现,支持多线程并行处理,并提供了正则化来防止过拟合。
-
LightGBM:
- LightGBM 是微软开发的基于梯度提升的库,专门优化了大规模数据,提高了训练速度和效率。
优点和缺点
优点:
- 高精度:Boosting 方法通常能提供非常高的准确率。
- 灵活性:可以与任何类型的学习器结合使用。
- 自动特征选择:Boosting 过程中加大了错误分类样本的权重,有助于模型聚焦于
难分类的样本。
缺点:
- 计算成本:Boosting 需要顺序训练学习器,这可能导致训练过程比 Bagging 类方法更长。
- 过拟合风险:尽管 Boosting 通常对过拟合有一定的抵抗力,但如果数据噪声较大,过拟合的风险依然存在。
在Boosting算法中,加权投票是一个关键的机制,用于将多个弱学习器的预测结果合成一个最终的预测。这种方法在分类问题中特别重要,因为它决定了如何根据每个学习器的表现来加权它们的投票。
如何进行加权投票
-
确定每个学习器的权重:
- 在Boosting算法中,通常根据每个学习器的错误率 ϵ \epsilon ϵ 来计算其权重 α \alpha α。权重的计算公式常见的形式是:
α t = 1 2 log ( 1 − ϵ t ϵ t ) \alpha_t = \frac{1}{2} \log\left(\frac{1 - \epsilon_t}{\epsilon_t}\right) αt=21log(ϵt1−ϵt) - 这里 α t \alpha_t αt 是第 t t t 个学习器的权重, ϵ t \epsilon_t ϵt是其错误率。这个权重反映了学习器的准确性,错误率低的学习器获得更高的权重。
- 在Boosting算法中,通常根据每个学习器的错误率 ϵ \epsilon ϵ 来计算其权重 α \alpha α。权重的计算公式常见的形式是:
-
收集每个学习器的预测:
- 对于给定的输入样本,每个学习器都会给出一个预测结果。在二分类问题中,这个结果通常是类标签 + 1 +1 +1或 − 1 -1 −1。
-
计算加权投票的总和:
- 对于每个类别,计算所有学习器预测该类别的加权总和。公式可以表示为:
Score ( c ) = ∑ t = 1 T α t [ y t ( x ) = c ] \text{Score}(c) = \sum_{t=1}^T \alpha_t [y_t(x) = c] Score(c)=t=1∑Tαt[yt(x)=c] - 这里 y t ( x ) y_t(x) yt(x) 是第 t t t 个学习器对样本 x x x 的预测, [ y t ( x ) = c ] [y_t(x) = c] [yt(x)=c] 是一个指示函数,当 y t ( x ) y_t(x) yt(x) 预测为类别 c c c 时值为1,否则为0。
- 对于每个类别,计算所有学习器预测该类别的加权总和。公式可以表示为:
-
选择最终预测:
- 最终的类别预测是基于最高的加权投票得分来确定的。即:
y ^ ( x ) = arg max c Score ( c ) \hat{y}(x) = \arg \max_c \text{Score}(c) y^(x)=argcmaxScore(c) - 这意味着每个样本的类别是由加权投票得分最高的类别确定的。
- 最终的类别预测是基于最高的加权投票得分来确定的。即:
2、XGB
XGBoost(eXtreme Gradient Boosting)是基于梯度提升算法(Gradient Boosting Machine, GBM)的高效实现,它是一种使用Boosting集成学习技术的工具,旨在解决大规模和高维数据的监督学习问题。XGBoost通过优化传统梯度提升算法,在速度和模型性能方面都有显著提升。以下是使用Boosting集成学习框架详细解释XGBoost的工作原理:
1. XGBoost中的梯度提升
XGBoost 实现了梯度提升的算法框架,具体步骤如下:
- 初始化:以一个基函数开始,通常是一个常数预测值,如数据的平均值。
- 迭代构建树:在每次迭代中,添加一个新的决策树,专注于修正前一轮留下的残差,实际上就是调整数据权重。(即前一模型预测的误差)。
梯度提升的定义:
梯度提升是一种集成学习技术,它通过逐步添加新模型来改进整体模型的准确性,每个新模型都尝试纠正前一个模型的残差(错误)。在梯度提升中,"提升"指的是这种逐步改进的过程,而 "梯度"是因为每一步的改进方向由损失函数的梯度决定,即模型在当前步骤中对输出误差最敏感的方向。
2. 目标函数
XGBoost 的目标函数包括两部分:一是传统的损失函数(如均方误差或对数损失),用于度量模型预测和实际值之间的差异;二是正则化项,用于控制模型的复杂性,防止过拟合。公式表示为:
Obj ( Θ ) = ∑ i = 1 n l ( y i , y ^ i ) + ∑ k Ω ( f k ) \text{Obj}(\Theta) = \sum_{i=1}^n l(y_i, \hat{y}_i) + \sum_{k} \Omega(f_k) Obj(Θ)=i=1∑nl(yi,y^i)+k∑Ω(fk)
其中, l l l 是损失函数, Ω \Omega Ω 是正则化项, f k f_k fk 是第 k k k棵树。
3. 树的构建与优化
- 基于直方图的分割:XGBoost 使用一种称为直方图优化的方法来查找最佳分割点,这种方法将连续特征的值离散化到直方图的bin中,显著减少了计算量。(最初采用的是预排序,注意这是决策树分割的策略!)
- 剪枝:在树的构建过程中,XGBoost 先生长到最大深度(层优先),然后自上而下剪枝,去除不增加模型性能的分枝。
- 并行处理:虽然树的生长本身是顺序的,但XGBoost 在构建树的某些部分,如特征的分割点计算上可以实现并行。
4. 处理缺失值与特征重要性
- 缺失值处理:XGBoost 可以自动学习缺失值的处理策略,为每个节点分配一个默认的方向(左或右),以优化模型性能。
- 特征重要性:XGBoost 通过计算每个特征在模型中的贡献度(如增益),提供了特征重要性的评估,有助于特征选择和模型解释。
3、LGB
LightGBM(Light Gradient Boosting Machine)是由微软开发的一种高效的梯度提升框架。它被设计为在保持高精度的同时,提高训练速度和效率,特别适合处理大规模数据。LightGBM 使用基于直方图的决策树算法和一系列高级技术,如叶子优先的生长策略、直接支持类别特征的处理等,从而显著提升了性能。
核心特征
1. 基于直方图的决策树学习
LightGBM 使用基于直方图的方法来减少内存使用量并加速计算过程。在此方法中,连续的特征值被分桶(或离散化)到固定数量的离散bins中。这样,算法只需计算每个bin的边界上的最佳分割点,而不是在每个唯一的特征值上计算,大幅减少了计算量。
2. 叶子优先策略
与传统的按层(Level-wise)生长策略不同,LightGBM实现了叶子优先(Leaf-wise)的生长策略。这种策略会选择增益最大的叶子进行分裂,即使这会导致更深的树。虽然叶子优先可能导致过拟合,但在大数据集上,这种策略可以更快地减少误差,提高模型的整体性能。
3. 处理类别特征
LightGBM 可以直接处理类别特征而无需进行独热编码。它使用特殊的算法来找到最优的分割点,这在处理具有大量类别的特征时非常有效。
4. 缺失值处理
LightGBM 可以自动处理缺失值。在模型训练过程中,LightGBM 会自动学习如何最好地处理缺失值,无需进行预处理。
工作原理
数据预处理
LightGBM 在构建直方图之前将连续的特征值离散化成bins,并对每个特征的数据进行排序存储,准备好用于快速分割。
训练过程
- 直方图合并:在每次迭代中,通过合并已存在的直方图(来自之前的树)来构建新树,这样可以减少重复的数据排序和bin计数的需要。
- 直方图分割:使用直方图来找到最佳的特征分割点。这涉及到比较不同分割点的信息增益,并选择最佳的进行节点分割。
- 树生长:根据叶子优先策略生长树,每次都优先分割那些使得模型损失最大程度减少的叶子节点。
优化与效率
- 并行学习:虽然树的构建本质上是顺序的,但LightGBM 在构建直方图和寻找最优分割点等方面实现了并行计算,提高了效率。
- 网络通信优化:在分布式学习中,LightGBM 优化了网络通信,以减少在多台机器上训练时的数据传输延迟。
应用场景
由于其高效性和灵活性,LightGBM 被广泛应用于各种机器学习任务中,包括但不限于分类、回归、排序等。在处理大规模数据集、需要快
速训练和预测、以及高维数据场景下表现尤为出色。
4、LGB和XGB的区别
XGBoost(eXtreme Gradient Boosting)和LightGBM(Light Gradient Boosting Machine)都是流行的梯度提升框架,它们在许多机器学习任务中表现出色。尽管两者都基于相似的原理—构建决策树以优化损失函数—但它们在实现细节和性能优化上存在一些关键的区别。以下是XGBoost和LightGBM之间的一些主要区别:
1. 处理大数据的效率
-
LightGBM:
- LightGBM 使用基于直方图的决策树算法,这种方法在处理大规模数据时更加高效。直方图优化方法减少了内存使用量,并且能够加快训练速度。
- 它还采用了带深度限制的 Leaf-wise(叶子优先)的生长策略,相比于 XGBoost 的 Level-wise(层次优先)策略,Leaf-wise 在处理大规模数据集时可以减少更多的损失,但也可能导致过拟合(尤其是在数据量较小的情况下)。
-
XGBoost:
- XGBoost 通常使用预排序方法(虽然也可以使用直方图方法),在处理非常大的数据集时可能会比 LightGBM 慢。
- 它采用的是Level-wise 生长策略,这种策略相对更稳健,可以有效控制过拟合,适合大多数情况,特别是当数据集大小适中或小规模时。
2. 内存使用
-
LightGBM:
- 由于直方图的优化方法,LightGBM 在内存使用上通常比 XGBoost 更高效。
-
XGBoost:
- XGBoost 在使用预排序算法时,可能需要更多内存,这是因为它在训练前对数据进行排序并存储排序后的结果。
3. 处理分类特征
-
LightGBM:
- LightGBM 为处理高基数的分类特征提供了原生支持。它不需要对分类特征进行独热编码,直接支持使用分类特征可以提高效率和准确率。
-
XGBoost:
- XGBoost 对分类特征没有原生支持,通常需要先将分类特征转换为数值型(如通过独热编码),这可能导致维度增加并影响模型的性能和速度。