1、引言
小屌丝:鱼哥,今天可是520啊,
小鱼:那又怎样.
小屌丝:按按脚啊
小鱼:这… 好想法
小屌丝:我说是按脚, 你咋还来全套的?
小鱼:这… 不差这点,咱就全来了吧
小屌丝:你可真行啊。
小鱼:你都说过节了, 这也让人家多加几个钟…
小屌丝:我… 我… 也来全套的吧。
小鱼:你这很上道啊。
小屌丝:198都花了, 还差这798的?
小鱼:…
2、XGBoost
2.1 简介
XGBoost(eXtreme Gradient Boosting)是一种高效且灵活的梯度提升框架,由陈天奇在2016年提出,旨在解决大规模和分布式机器学习问题。
它在传统梯度提升决策树(GBDT)的基础上进行了优化,包括速度和性能的提升、处理缺失值等。
2.1.1 定义
XGBoost是一个基于决策树算法的集成学习框架,它使用梯度提升(Gradient Boosting)算法来优化模型。
它能自动提供并行计算,支持多种语言,广泛应用于分类、回归和排序问题中。
2.1.2 应用场景
应用场景如下:
- 分类问题:如信用评分、疾病诊断。
- 回归问题:如销售预测、房价估计。
- 排序问题:如搜索引擎的结果排序。
2.2 原理
XGBoost的核心在于顺序地构建决策树模型,并不断优化这些模型以减少预测误差。
每一棵新树的构建都是为了针对之前所有树预测的残差进行更好的预测。
XGBoost对传统梯度提升算法进行了优化,包括:
- 正则化:在损失函数中添加正则项,以控制模型的复杂度,防止过拟合。
- 分裂点查找:采用近似算法加速分裂点的查找。
- 并行处理:在决策树的构建过程中使用并行计算,加快模型训练速度。
处理缺失值:自动学习缺失值的处理方式。
2.3 实现方式
实现XGBoost模型通常包括以下步骤:
- 数据准备:加载数据,并将其分为训练集和测试集。
- 模型配置:设置XGBoost的参数,包括学习率、树的最大深度、正则化参数等。
- 模型训练:使用训练数据训练模型。
- 模型评估:使用测试数据评估模型的性能。
- 参数调优(可选):通过交叉验证等方法调整参数,进一步提升模型性能。
2.4 算法公式
XGBoost的目标函数由两部分组成:训练损失和正则化项。
[
O
b
j
=
∑
i
=
1
n
l
(
y
i
,
y
^
i
)
+
∑
k
=
1
K
Ω
(
f
k
)
]
[Obj = \sum_{i=1}^{n}l(y_i, \hat{y}i) + \sum{k=1}^{K}\Omega(f_k)]
[Obj=i=1∑nl(yi,y^i)+∑k=1KΩ(fk)] 其中,
(
l
)
(l)
(l)是损失函数,
(
Ω
)
(\Omega)
(Ω)是正则化项,
(
f
k
)
(f_k)
(fk)是第
(
k
)
(k)
(k)棵树。
2.5 代码示例
# -*- coding:utf-8 -*-
# @Time : 2024-05-20
# @Author : Carl_DJ
# 导入必要的库
import xgboost as xgb
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=123)
# 将数据转换为DMatrix对象,这是XGBoost专用的数据结构,能提高运行效率
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
# 设置模型的参数
param = {
'max_depth': 3, # 树的最大深度
'eta': 0.3, # 学习率
'objective': 'multi:softprob', # 多分类的问题
'num_class': 3 # 类别数,与最终输出类别数一致
}
num_round = 20 # 训练轮数
# 训练模型
bst = xgb.train(param, dtrain, num_round)
# 预测测试集
preds = bst.predict(dtest)
# 由于设置的是'multi:softprob',输出的是每个类别的概率,需要转换为最终的类别
predictions = np.asarray([np.argmax(line) for line in preds])
# 计算准确率
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))
解析
-
导入库:首先导入了XGBoost库以及Scikit-learn库中用于加载数据集、数据划分和计算准确率的函数。
-
加载和划分数据:导入库:**首先导入了XGBoost库以及Scikit-learn库中用于加载数据集、数据划分和计算准确率的函数。
-
数据转换:为了提高效率,将数据转换为XGBoost的DMatrix数据格式。DMatrix是XGBoost优化的数据结构,可以让XGBoost更快地训练模型。
-
设置模型参数:param字典中包含了模型训练所需的各种参数,如max_depth(树的最大深度)、eta(学习率)、objective(目标函数,这里是多分类问题的multi:softprob)和num_class(类别数)。
-
模型训练:使用xgb.train函数训练模型,输入参数包括模型参数、训练数据集以及训练轮数。
-
模型预测:使用训练好的模型对测试集进行预测,因为设置了multi:softprob,所以模型会输出每个样本属于每个类别的概率。接着,通过选择概率最高的类别作为最终预测结果。
-
计算准确率:最后,计算模型在测试集上的准确率,以评估模型性能。使用Scikit-learn提供的load_iris函数加载鸢尾花数据集,并通过train_test_split函数将数据集划分为训练集和测试集。
3、总结
XGBoost以其出色的性能、速度和灵活性,在机器学习领域赢得了广泛的应用和认可。
通过精心设计的正则化和并行计算,XGBoost在处理大规模数据集时表现尤为突出。
不过,为了充分发挥XGBoost的潜力,合理的参数调整是非常关键的。通过细致的参数调优,XGBoost能够在各种机器学习任务中取得优异的结果。
我是小鱼:
- CSDN 博客专家;
- 阿里云 专家博主;
- 51CTO博客专家;
- 企业认证金牌面试官;
- 多个名企认证&特邀讲师等;
- 名企签约职场面试培训、职场规划师;
- 多个国内主流技术社区的认证专家博主;
- 多款主流产品(阿里云等)评测一等奖获得者;
关注小鱼,学习【机器学习】&【深度学习】领域的知识。