XGBoost发展历程
XGBoost显著优势
XGBoost核心概念
XGBoost(eXtreme Gradient Boosting)是一种在机器学习领域广泛使用的集成学习算法,特别是在分类、回归和排序任务中表现出色。其基本原理建立在决策树、梯度提升和损失函数优化等核心概念之上。以下是对XGBoost基本原理的深入浅出介绍:
一、决策树基础
决策树是一种基本的分类与回归方法,它通过构建树状结构来模拟决策过程。在XGBoost中,决策树作为基学习器(弱学习器)被使用。每个决策树通过评估一系列的条件(即特征值)来做出预测。对于分类问题,决策树通过评估If-Then-Else True/False特征问题树来预测标签;对于回归问题,则通过树结构来估算连续数值。
二、梯度提升原理
梯度提升是一种集成学习方法,它通过逐步构建弱学习器来优化模型的预测能力。在XGBoost中,梯度提升的具体实现是通过迭代地训练新的决策树来拟合之前模型的残差(即实际值与预测值之间的差异)。每一轮迭代都关注于前一轮模型的不足,通过新的决策树来弥补这些不足,从而逐步提升整体模型的预测能力。
三、损失函数优化
损失函数描述了模型预测值与真实值之间的差异,是模型优化的关键。在XGBoost中,损失函数的优化是通过梯度下降(或更具体地说,是牛顿法梯度更新)来实现的。与传统的GBDT(Gradient Boosting Decision Tree)相比,XGBoost对损失函数进行了二阶泰勒展开,保留了更多有关目标函数的信息,从而有助于更精确地优化模型。
具体来说,XGBoost在每一轮迭代中,都会计算当前模型的损失函数关于预测值的一阶导数和二阶导数,并通过这些导数信息来指导新决策树的训练。新决策树的目标是尽可能拟合当前模型的残差,从而减小整体损失函数的值。
四、正则化与过拟合控制
为了防止过拟合,XGBoost在损失函数中引入了正则化项。这些正则化项包括树的复杂度(如叶子节点的数量、叶子节点值的平方和等),通过控制这些正则化项的大小,可以有效地限制模型的复杂度,从而避免过拟合。
五、并行计算与分布式计算
XGBoost支持并行计算和分布式计算,这使得它能够高效地处理大规模数据集。在并行计算方面,XGBoost利用多核CPU的并行计算能力来加速决策树的构建和损失函数的计算;在分布式计算方面,XGBoost可以将数据集分布在多个计算节点上,通过并行地训练多个决策树来加速整体模型的训练过程。
XGBoost简单案例
本章先介绍构建XGBoost模型的主要机器学习算法——决策树。决策树是XGBoost最常用的基学习器,在机器学习领域中具有显著特点。决策树不像线性回归和逻辑回归那样将列值乘以数字权重,而是通过询问有关列的问题来分割数据。
构建决策树就像玩问题测试游戏。例如,一个决策树有一个温度列,该列可以分成两组,一组温度高于70摄氏度,一组温度低于70摄氏度。下一个分割可以基于季度进行,如果是夏天,就跟随一个分支,否则跟随另一个分支。现在数据已经被分为4个独立的组。通过分割将数据分成新群组的过程将继续,直到算法达到所需的精度水平。
决策树能够创建成千上万个分支,直到将每个样本在训练集中准确映射到正确的目标为止。但容易对数据过拟合,换句话说,可能会过分贴合训练数据。
第一个决策树模型
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
import warnings
warnings.filterwarnings('ignore')
df_census = pd.read_csv('/Users/c/jupyter lab/CSDN/梯度提升算法XGBoost从入门到精通/国外人口普查数据集(列名英文版).csv')
df_census = pd.get_dummies(df_census)
X = df_census.iloc[:,:-1]
y = df_census.iloc[:,-1]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=2)
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
clf = DecisionTreeClassifier(random_state=2)
clf.fit(X_train, y_train)
y_pred = clf.predict(X_test)
accuracy_score(y_pred, y_test)
感兴趣的可以试下准确率是多少,数据集我会上传至本篇博文标题下方。
决策树内部结构
上图是来自本篇人口普查数据集(国外)的一个决策树,只有两个分叉。顶部是根节点,True/False箭头是分支,数据点是节点。在树的末端,节点被归类为叶节点。
下面详细研究该图:
根节点
树根节点位于顶部。在第一行marital-status是一个二进制列,因为所有值都是0(否定)或1(肯定)。第一个分割是基于是否已婚,树的左侧是True分支,表示未婚;右侧是False分支,表示已婚。
基尼系数
根节点的第二行数据是基尼系数,是决策树用来决定如何进行分割的误差值,这里的基尼系数为0.364。分割目标是找到一个导致误差最低的切割点。基尼系数为0意味着0个误差,基尼系数为1表示全部为误差。基尼系数为0.5表示元素分布是均等的,那么预测的准确率不比随机猜测更高。误差越接近于0,误差越低。根节点上的基尼系数为0.364,表示训练集是不平衡的,其中36.4%属于类别1。
PS: 基尼系数的应用没想到这么广泛!
样本、值和类别
根节点表明有24420个样本,这是训练集中的样本总数。下面一行是[18575,5845]。由于排序方式为先0后1,因此代表有18575个样本值为0(收入低于5万美元),5845个样本值为1(收入高于5万美元)。
True/False节点
第一个分割后,左边分支是True,右边是False。这种左右模型贯穿了整个决策树。在第二行的左侧节点中,分割capital_gain <= 7073.5被用于后续节点,其余信息来自前一次分割。在13160位未婚人士中,有12311位收入低于5万美元,有849位收入高于5万美元。基尼系数为0.121,接近零代表误差很低。
树桩
只有一个分割的树被称为树桩,尽管树桩本身不能成为强大的预测器,但到了第4章,我们会明白,在使用提升器时,树桩可以变得非常强大。
叶节点
树最末端的节点被称为叶节点,叶节点饮食所有最终预测。
最左侧的叶节点基尼系数为0.093,这表示它正确预测了12938个案例中的12304个,准确率为95%,即对于资本收益低于7073.50的未婚用户来说,其收入不会超过5万美元的可能性有95%。
其他叶节点的信息也可以类似地进行解读。