XGBoost:从决策树到极限梯度提升树

前言

        XGBoost(eXtreme Gradient Boosting)算法,又叫极限梯度提升树,作为集成学习的代表算法之一,不但在学习效率和可扩展性方面展露头角,更在学习精度与鲁棒性方面做出独特贡献;是横扫各大数据挖掘比赛的首选大杀器。本文将从基础知识决策树作为切入点,以决策树到集成学习的发展脉络为线索,着重介绍XGBoost模型解决了哪些问题,如何解决这些问题。

        1)本文重点:本文主要研究XGBoost算法,重点关注算法解决的问题及思路,其他相关内容均为知识补充,不做详细介绍;

        2)本文缺陷:本文重思路梳理,轻数学推导;由于笔者才疏学浅,如有错误或疏漏敬请批评指正。

目录

1. 决策树

2. 集成学习

3. 随机森林(Random Forest)

4. 自适应提升算法(Adaboost)

5. 梯度提升树算法(GBDT)

6. 极限梯度提升树算法(XGBoost)

7. 总结

8. 基础概念

9. 参考文献

一 决策树

       决策树是一种树形结构的机器学习算法,它利用一系列的条件判断,也可以认为是if-then规则的组合,来对数据进行分类或回归预测的过程。这些条件判断通过递归地选择最优特征来构建,形成了一棵由根节点、内部节点和叶节点组成的树状结构。

      (一)树结构

                1.根节点:是决策树的起始节点,代表整个样本数据集;

                2.内部节:点则代表对某个属性特征的一次判断,这些节点根据属性的不同取值将数据集分割成子集;

                3.叶节点:则代表分类或回归预测的结果,对于分类问题,叶节点通常是样本所属类别的众数;对于回归问题,叶节点通常是样本值的平均值。

      (二)基本思想

                由决策树的根节点到叶节点的每一条路径构建一条规则,路径上的内部结点对应决策条件,叶节点的类别或数值对应着规则的结论;下图为西瓜好坏判别的一个简单决策树示例,其中全部西瓜对应整个数据集,是树的根节点,通过内部节点先后判断一个西瓜样本的纹理,根蒂和色泽是否符合相应条件,最终将西瓜样本划分的'好瓜'的叶节点或'坏瓜'的叶节点中,完成西瓜的分类:

        

       

       在上述示例图中,判断一个西瓜是好瓜还是坏瓜,我们首先判断了纹理,再判断根蒂,最后判断色泽;可以看出当决策树内部节点的特征分裂顺序变换之后,我那将得到一颗完全不同的决策树;当一个新样本进入模型,进行预测,模型的判断结果也会产生差异;因此在多种特征分裂顺序的排列组合中,什么样的分裂顺序是好的,什么样的分裂顺序是不好的,就成为决策树学习的一个关键问题。

(三)分裂算法

       一般来说,随着划分过程的不断进行,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即节点的'纯度'越来越高;根据这一准则,决策树发展出三种不同的特征选则算法,分别是ID3算法,C4.5算法和CART算法。

       1.ID3算法: 通过引入信息熵的概念来度量特征包含的信息量,即'纯度',通常信息熵越大,代表特征所包含的信息量越大,即纯度较低;反之信息熵越小时表示纯度越高;ID3算法使用信息增益作为特征选择的方法,信息增益是整个数据集熵与根据某特征划分节点后的子数据集信息熵之差,即表示通过该特征的分裂,数据集能够提升多少'纯度'; 但ID3算法倾向于选择具有最高信息增益的属性作为决策树的节点,这也导致其更倾向于选择类别更多的属性优选作为分裂点,这可能导致过度拟合;为了弥补ID3的倾向性,C4.5算法对属性分裂方法进行了改进。

       2.C4.5算法:不再单纯使用信息增益进行属性选择,而是使用信息增益率;信息增益率是信息增益除以划分属性的固有信息,即划分属性的类别数;其在信息增益的基础上,使用特征的取值数进行了归一化,这在一定程度上解决了ID3对更多类别属性的倾向性,但也会带来新的问题,C4.5会更倾向于选择更少类别的属性;也会在一定程度上导致过拟合。

      3.CART算法:C4.5虽然在ID3的基础上进行了改进,但仍然是基于信息熵对属性进行选择;而CART算法使用基尼系数来衡量属性的不纯度,其值越小表示数据越纯,使用Gini系数可以减少大量的对数运算,从而简化计算过程的同时,也减小了对特征取值的偏好,它更关注于数据集的整体不纯度,从而减少了对取值较多或少的偏好,这有助于构建出更平衡、更泛化的决策树模型。同时与ID3算法和C4.5是多叉树,只适用于分类场景;CART算法则是一种二叉树算法,在分裂过程中,每个节点最多生成两个子节点,这不仅简化了决策树的复杂度,也提升了建树的效率;该算法既可以用于分类,又可以用于回归;

       4.三种分裂算法对比:

算法 分枝策略 任务类型 特点 连续值处理 分裂准则
ID3 多叉树 二分类 无剪枝策略,易过拟合 无法处理 信息增益
C4.5 多叉树 分类 计算复杂度高 能够处理 信息增益率
CART 二叉树 分类\回归 适用范围更广 能够处理 基尼系数

        尽管决策树算法相较于其他传统机器学习算法具有显著优势,例如其高度的可解释性、清晰的分枝规则、处理非线性关系的能力、自动特征选择的功能以及无需数据标准化的便利性,但它同时也面临一些局限性。首先,决策树对异常值较为敏感,这可能导致模型在含有异常值的数据集上表现不佳。其次,当数据集不平衡时,决策树可能会偏向于预测多数类别,从而影响模型的准确性。此外,如果决策树模型设计得过于简单,可能会引发较大的偏差,即模型无法充分拟合训练数据,导致在训练集和测试集上的性能均不理想,出现欠拟合现象。相反,如果模型过于复杂,由于决策树算法通常采用贪婪策略进行特征选择和分裂,容易在训练数据上产生过拟合,特别是在数据集较小或特征较多的情况下,模型可能会捕捉到噪声信息,从而在测试集上的性能下降,导致预测结果的方差增大。为解决上述问题,集成学习提供了完善的方案。

二 集成学习

        集成学习最大的特点,就是使用多个模型解决单个问题,根据集成的逻辑不同,可以大致分为以下三类:</

### 使用XGBoost实现图像分类任务 #### 准备工作 为了使用XGBoost进行图像分类,首先需要准备数据集并将其转换成适合XGBoost使用的格式。通常情况下,原始图片文件无法直接输入到XGBoost中;因此,需先提取每张图片的特征向量作为训练样本。 可以采用预训练卷积神经网络(CNN)如VGG16、ResNet等来获取这些特征向量[^2]。具体做法是从CNN去掉最后一层全连接层后的输出作为新特征表示形式保存下来供后续建模使用。 #### 数据预处理 完成上述操作之后,则要对得到的新特征矩阵做进一步规范化处理,比如标准化缩放使得各维度数值范围相近以便于提高模型收敛效率。此外还需注意类别标签编码问题,确保其能被正确解析为离散型目标变量用于监督学习过程中的损失函数计算。 #### 构建与训练模型 定义好参数后就可以创建XGBClassifier实例对象来进行拟合了: ```python import xgboost as xgb from sklearn.model_selection import train_test_split from sklearn.preprocessing import LabelEncoder # 假设features是已经过特征工程处理过的numpy数组, labels则是对应的类别列表. label_encoder = LabelEncoder() encoded_labels = label_encoder.fit_transform(labels) X_train, X_val, y_train, y_val = train_test_split(features, encoded_labels, test_size=0.2, random_state=42) dtrain = xgb.DMatrix(X_train, label=y_train) dval = xgb.DMatrix(X_val, label=y_val) param = { 'max_depth': 6, 'eta': 0.3, 'objective': 'multi:softmax', 'num_class': len(set(encoded_labels)) } bst = xgb.train(param, dtrain, num_boost_round=100, evals=[(dval, 'validation')], early_stopping_rounds=10) ``` 这里设置了一些基本超参数配置选项,例如最大树深(`max_depth`)、学习率(`eta`)以及多分类软间隔(`multi:softmax`)[^3]。当然还可以根据实际情况调整更多高级属性以期获得更好的泛化性能表现。 #### 预测与评估 最后一步就是利用已训练好的模型去预测未知测试集中各个样本所属的具体类别,并据此评价整体效果好坏程度: ```python predictions = bst.predict(dval) accuracy_score(y_val, predictions) confusion_matrix(y_val, predictions) classification_report(y_val, predictions) ``` 以上便是整个基于XGBoost框架下执行图像识别工作的流程概述[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值