一、概述

  XGBoost 是一种基于梯度提升框架的机器学习算法,它通过迭代地训练一系列决策树来构建模型。核心思想是通过不断地在已有模型的基础上,拟合负梯度方向的残差(真实值与预测值的差)来构建新的弱学习器,达到逐步优化模型的目的。

  XGBoost 在构建决策树时,利用了二阶导数信息。在损失函数的优化过程中,不仅考虑了一阶导数(梯度),还引入了二阶导数(海森矩阵),这使得算法能够更精确地找到损失函数的最优解,加速模型的收敛速度,同时提高模型的泛化能力。此外,XGBoost 还加入了正则化项,包括 L1 和 L2 正则化,用于控制模型的复杂度,防止过拟合。

二、算法原理

1.算法过程

  在 XGBoost 中,弱学习器通常是 CART(分类与回归树)决策树。每一棵决策树的构建都是基于前一轮模型的预测结果与真实值之间的残差。具体过程为:

(1) 初始化模型

  首先,初始化一个简单的模型,通常是一个常数模型,记为\(f_0(X)\) ,其预测值为所有样本真实值的均值(回归任务)或多数类(分类任务),记为\(\hat y_0\)。此时,模型的预测结果与真实值之间存在误差。

(2) 计算残差或负梯度

  在回归任务中,计算每个样本的残差,即真实值\(y_i\)与当前模型预测值\(\hat y_{i,t-1}\)的差值\(r_{i,t}=y_i-\hat y_{i,t-1}\),其中表示迭代的轮数。在分类任务中,计算损失函数关于当前模型预测值的负梯度$$g_{i,t}=-\frac{\vartheta L(y_i,\hat y_{i,t-1})}{\vartheta \hat y_{i,t-1}}$$

(3) 拟合决策树

  使用计算得到的残差(回归任务)或负梯度(分类任务)作为新的目标值,训练一棵新的决策树\(f_t(X)\)。这棵树旨在拟合当前模型的误差,从而弥补当前模型的不足。

(4) 更新模型

  根据新训练的决策树,更新当前模型。更新公式为\(\hat y_{i,t}=\hat y_{i,t-1}+\alpha f_t(x_i)\),其中是学习率(也称为步长),用于控制每棵树对模型更新的贡献程度。学习率较小可以使模型训练更加稳定,但需要更多的迭代次数;学习率较大则可能导致模型收敛过快,甚至无法收敛。

(5) 重复迭代

  重复步骤 (2)–(4)步,不断训练新的决策树并更新模型,直到达到预设的迭代次数、损失函数收敛到一定程度或满足其他停止条件为止。最终,XGBoost由多棵决策树组成,其预测结果是所有决策树预测结果的累加。

算法过程图示

2.目标函数优化

  XGBoost 通过定义一个目标函数来衡量模型的优劣,并在每次迭代中优化这个目标函数。目标函数包括损失函数和正则化项两部分:

  损失函数:用于衡量模型预测值与真实值之间的差异,常见的损失函数有均方误差(MSE,用于回归问题)、交叉熵损失(用于分类问题)等。损失函数反映了模型对训练数据的拟合程度。

  正则化项:为了防止模型过拟合,XGBoost 在目标函数中加入了正则化项。正则化项通常基于决策树的复杂度,例如树的叶子节点数量、叶子节点权重的 L1 或 L2 范数等。正则化项对模型的复杂度进行惩罚,使得模型在拟合数据的同时保持简单,从而提高模型的泛化能力。

  在每次迭代中,XGBoost 通过贪心算法寻找最优的分裂点,使得目标函数在该次迭代中下降最多。具体来说,它会遍历所有可能的特征和分裂点,计算每个分裂点对目标函数的影响,选择使目标函数下降最大的分裂点作为当前节点的分裂点。

三、与GBDT的区别

算法原理

GDBT:是基于决策树的集成学习算法,通过不断生成新的决策树来拟合之前模型的残差,从而逐步提升模型的准确性。

XGBoost:在 GDBT 的基础上进行了优化和扩展,不仅可以拟合残差,还引入了二阶导数信息来更准确地逼近目标函数,从而提高模型的精度。

目标函数

GDBT:通常使用经验风险最小化作为目标,例如均方误差(MSE)、对数损失等,通过迭代优化目标函数来构建模型。

XGBoost:目标函数在经验风险的基础上,增加了正则化项,用于控制模型的复杂度,防止过拟合,使得模型具有更好的泛化能力。

决策树生成

GDBT:决策树的生成过程是基于贪心算法,在每个节点上选择能够最大程度降低损失函数的特征和分裂点。

XGBoost:在决策树生成时,除了考虑特征和分裂点对损失函数的影响外,还考虑了数据的稀疏性、特征的重要性等因素,采用了更复杂的分裂策略,能够更高效地处理大规模数据和高维数据。

并行计算

GDBT:一般情况下,GDBT 算法是顺序生成决策树的,难以进行并行计算,训练速度相对较慢。

XGBoost:支持分布式和并行计算,可以利用多线程、多节点来加速模型的训练过程,大大提高了训练效率,尤其适用于大规模数据集。

对缺失值的处理

GDBT:通常需要对缺失值进行填充或者单独处理,否则在计算分裂点时可能会出现问题。

XGBoost:能够自动学习缺失值的处理方式,在决策树分裂时,会同时考虑将缺失值划分到左子树和右子树的情况,选择最优的划分方式,对缺失值的鲁棒性更强。

四、Python实现

(环境: Python 3.11,scikit-learn 1.6.1)

(1) 分类情形

from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
import xgboost as xgb
from sklearn import metrics # 生成数据集
X, y = make_classification(n_samples = 1000, n_features = 6, random_state = 42)
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42) # 创建XGBoost分类模型
clf = xgb.XGBClassifier()
# 训练模型
rclf = clf.fit(X_train, y_train) # 预测
y_pre = rclf.predict(X_test)
# 性能评价
accuracy = metrics.accuracy_score(y_test,y_pre) print('预测结果为:',y_pre)
print('准确率为:',accuracy)

(2)回归情形

from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
import xgboost as xgb
from sklearn.metrics import mean_squared_error # 生成回归数据集
X, y = make_regression(n_samples = 1000, n_features = 6, random_state = 42)
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42) # 创建XGBoost回归模型
model = xgb.XGBRegressor(n_estimators = 100, learning_rate = 0.1, max_depth = 3)
# 训练模型
model.fit(X_train, y_train) # 进行预测
y_pred = model.predict(X_test) # 计算均方误差评估模型性能
mse = mean_squared_error(y_test, y_pred) print(f"均方误差: {mse}")

End.

下载

XGBooost算法原理及Python实现的更多相关文章

  1. 深入学习主成分分析(PCA)算法原理(Python实现)

    一:引入问题 首先看一个表格,下表是某些学生的语文,数学,物理,化学成绩统计: 首先,假设这些科目成绩不相关,也就是说某一科目考多少分与其他科目没有关系,那么如何判断三个学生的优秀程度呢?首先我们一眼 ...

  2. softmax分类算法原理(用python实现)

    逻辑回归神经网络实现手写数字识别 如果更习惯看Jupyter的形式,请戳Gitthub_逻辑回归softmax神经网络实现手写数字识别.ipynb 1 - 导入模块 import numpy as n ...

  3. KNN算法原理(python代码实现)

    kNN(k-nearest neighbor algorithm)算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性 ...

  4. (数据科学学习手札13)K-medoids聚类算法原理简介&Python与R的实现

    前几篇我们较为详细地介绍了K-means聚类法的实现方法和具体实战,这种方法虽然快速高效,是大规模数据聚类分析中首选的方法,但是它也有一些短板,比如在数据集中有脏数据时,由于其对每一个类的准则函数为平 ...

  5. PageRank算法原理与Python实现

    一.什么是pagerank PageRank的Page可是认为是网页,表示网页排名,也可以认为是Larry Page(google 产品经理),因为他是这个算法的发明者之一,还是google CEO( ...

  6. 【机器学习】:Kmeans均值聚类算法原理(附带Python代码实现)

    这个算法中文名为k均值聚类算法,首先我们在二维的特殊条件下讨论其实现的过程,方便大家理解. 第一步.随机生成质心 由于这是一个无监督学习的算法,因此我们首先在一个二维的坐标轴下随机给定一堆点,并随即给 ...

  7. 【机器学习实战学习笔记(1-1)】k-近邻算法原理及python实现

    笔者本人是个初入机器学习的小白,主要是想把学习过程中的大概知识和自己的一些经验写下来跟大家分享,也可以加强自己的记忆,有不足的地方还望小伙伴们批评指正,点赞评论走起来~ 文章目录 1.k-近邻算法概述 ...

  8. BP算法从原理到python实现

    BP算法从原理到实践 反向传播算法Backpropagation的python实现 觉得有用的话,欢迎一起讨论相互学习~Follow Me 博主接触深度学习已经一段时间,近期在与别人进行讨论时,发现自 ...

  9. 梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python)

    梯度迭代树(GBDT)算法原理及Spark MLlib调用实例(Scala/Java/python) http://blog.csdn.net/liulingyuan6/article/details ...

  10. 模拟退火算法SA原理及python、java、php、c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径

    模拟退火算法SA原理及python.java.php.c++语言代码实现TSP旅行商问题,智能优化算法,随机寻优算法,全局最短路径 模拟退火算法(Simulated Annealing,SA)最早的思 ...

随机推荐

  1. .NET程序员AI开发基座:Microsoft.Extensions.AI

    大家好,我是Edison. 微软在2024年11月就发布了新的AI核心库Microsoft.Extensions.AI,虽然目前还是一个预览版,但其可以大大简化我们的AI集成和开发工作. Micros ...

  2. Studio 3T 试用期破解(含破解补丁) - 解决办法

    使用数据可视化工具Studio 3T查看MongoDB数据集数据,但是Studio 3T试用过期了,没了权限打不开软件怎么办? 这里通过建立批处理文件,重置试用时间,即可临时破解权限. 每次开机重启脚 ...

  3. elementUI中如何在Tabs标签页的标题文字后面添加文字或图标

    1.效果如下: 实现代码如下:<el-tab-pane name="first"> <span slot="label"> <sp ...

  4. 八米云-N1、机顶盒设置静态地址和PPPOE拨号流程

    疑难解答加微信机器人,给它发:进群,会拉你进入八米交流群 机器人微信号:bamibot 简洁版教程访问:https://bbs.8miyun.cn 这里以老毛子路由系统举例: 一.设置静态地址 1.路 ...

  5. 推荐一款最新开源,基于AI人工智能UI自动化测试工具!支持自然语言编写脚本!

    随着互联网技术的飞速发展,Web应用越来越普及,前端页面也越来越复杂.为了确保产品质量,UI自动化测试成为了开发过程中不可或缺的一环.然而,传统的UI自动化测试工具往往存在学习成本高.维护困难等问题. ...

  6. Flink学习(十六) ProcessFunctionAPI(底层API)

    我们之前学习的转换算子是无法访问时间的时间戳信息和水位线信息的.而这些在一些应用场景下,极为重要,例如MapFunction这样的map转换算子就无法访问时间戳或者当前事件的事件时间. 基于此,Dat ...

  7. Qt QDateEdit下拉日历的样式设计

    文章目录 QDateEdit样式设计 QDateEdit QCalendarWidget QDateEdit样式设计   最近做了一个用到QDateEdit的项目,涉及到对这个控件进行设计的方面,对于 ...

  8. linux ssh 免密登录

    1.服务器端开启密钥登录模式 $ vim /etc/ssh/sshd_config # 是否允许 root 远程登录 PermitRootLogin yes # 密码登录是否打开 PasswordAu ...

  9. EmlBuilder:一款超轻量级的EML格式电子邮件阅读和编辑工具

    EmlBuilder 是一款超轻量级的电子邮件阅读和编辑工具,针对EML格式的文件具有非常强大的解析和容错能力,可实现超文本邮件的编写,并具备内嵌图片的编辑功能.该工具内部使用EmlParse对电子邮 ...

  10. 最新活动 ISS 国际空间站 MAI-75 SSTV活动计划于2020年8月4日至5日

    MAI-75  SSTV活动计划于2020年8月4日和5日举行 8月3日至9日这一周的最后宇航员时间表最近公布了,它显示了定于8月4日和5日进行的MAI-75活动.这是在Space X Demo-2脱 ...