XGBoost算法

简介: XGBoost是高效、灵活且强大的梯度提升决策树算法,擅长处理结构化数据,广泛应用在数据挖掘和Kaggle竞赛中。它通过迭代地添加决策树优化目标函数,支持自定义损失函数和正则化以防止过拟合。与AdaBoost相比,XGBoost支持更复杂的基分类器,如线性模型,使用二阶导数加速优化,并有内置并行处理能力。XGBoost在模型构建时考虑缺失值处理,并提供了Python等多语言接口,便于参数调优和模型评估,如使用GridSearchCV进行交叉验证。

XGBoost在机器学习中被广泛应用于多种场景,特别是在结构化数据的处理上表现出色,XGBoost适用于多种监督学习任务,包括分类、回归和排名问题。在数据挖掘和数据科学竞赛中,XGBoost因其出色的性能而被频繁使用。例如,在Kaggle平台上的许多获奖方案中,XGBoost都发挥了重要作用。此外,它在处理缺失值和大规模数据集上也有很好的表现。


XGBoost是一种基于梯度提升决策树(GBDT)的算法,在机器学习领域被广泛使用,特别是在数据挖掘和推荐系统中。


基本思想:XGBoost的基本思想是通过添加一系列弱学习器(通常是CART回归树)来逐步减少目标函数的残差(模型预测值与实际值之间的差异),从而提升模型的性能。



XGBoost和AdaBoost区别


XGBoost和AdaBoost在模型的基分类器、目标函数以及正则化策略上存在明显区别。


  • 基分类器:AdaBoost通常使用简单的决策树作为基分类器,而XGBoost除了支持CART树外,还支持线性分类器。这使得XGBoost在处理某些特定问题时能够提供更灵活的建模选项。


  • 目标函数:AdaBoost主要关注于提升模型的正确率,通过不断调整样本权重来加强对错误分类样本的学习。相比之下,XGBoost对代价函数进行了二阶泰勒展开,同时利用一阶和二阶导数信息进行优化,这有助于更精确地找到最优点。此外,XGBoost允许用户自定义代价函数,只要该函数可导即可,这增加了模型的适用性和灵活性。


  • 正则化策略:XGBoost在其代价函数中加入了正则项,用于控制模型的复杂度并防止过拟合。这种策略是XGBoost特有的,它有助于提高模型的泛化能力。



XGBoost和AdaBoost都属于Boosting框架


  • AdaBoost(Adaptive Boosting):是一种早期的集成学习算法,它通过迭代地构建弱分类器并结合它们的输出来提高整体模型的性能。AdaBoost的特点是它会根据前一轮分类器的表现来调整样本权重,错误分类的样本在下一轮训练中会被赋予更高的权重,以此来强化模型对于难以分类样本的学习。


  • XGBoost(eXtreme Gradient Boosting):是一种实现了梯度提升的机器学习方法,它通过添加新的模型(通常是决策树)来纠正之前模型的错误,从而逐渐提高模型的性能。



XGBoost在技术上比AdaBoost更为先进,提供了更多的定制化选项,并且在很多情况下能够获得更好的性能。


XGBoost属于参数学习算法,最终我们要找到一个函数来表示XGBoost模型。


构造目标函数 → 目标函数的优化方法 → 用函数来表示一棵树 → 如何构建树模型


XGBoost原理:


  • 构造目标函数        
  • 使用二阶泰勒泰勒级数展开目标函数
  • 用函数来描述树结构
  • 贪心算法建树
  • 缺失值处理



XGBoost API        


首先要安装库   pip install xgboost -i https://pypi.tuna.tsinghua.edu.cn/simple  


booster


  1. gbtree:使用树模型


  1. gblinear:使用线性模型



silent


  • 设置为 0 打印运行信息
  • 设置为 1不打印运行信息


nthread


  • 并行运行的线程数,输入的参数应该 <= 系统的CPU核心数
  • 若是没有设置算法会检测将其设置为 CPU 的全部核心数


Booster 参数


eta     更新中减少的步长来防止过拟合


gamma    指定了节点分裂所需的最小损失函数下降值


max_depth   为树的最大深度


subsample    参数控制对于每棵树随机采样的比例


案例


import joblib
import numpy as np
import xgboost as xgb
import pandas as pd
import numpy as np
from collections import Counter
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.model_selection import StratifiedKFold


from sklearn.metrics import classification_report 的作用是从一个分类任务中生成一个文本报告,展示主要的分类指标。是一个用于评估分类模型性能的函数,它能够为二分类或多分类任务提供一个详细的性能报告。该报告包括以下几个主要指标:


  1. 精确度 (Precision):预测为正类别中实际为正类别的比例。


  1. 召回率 (Recall):实际为正类别中预测为正类别的比例。


  1. F1分数 (F1 Score):精确度和召回率的调和平均数,是对模型精确度和召回率之间平衡的一个度量。


  1. 支持度 (Support):每个类别在数据集中的样本数量。


  1. 准确性 (Accuracy):正确预测的比例。


def func1():
 
    
    data = pd.read_csv('wine.csv')
    x = data.iloc[:, :-1]
    y = data.iloc[:, -1] - 3
 
    
    x_train, x_valid, y_train, y_valid = train_test_split(x, y, test_size=0.2, stratify=y, random_state=22)
 
    # 存储数据
    pd.concat([x_train, y_train], axis=1).to_csv('wine-train.csv')
    pd.concat([x_valid, y_valid], axis=1).to_csv('wine-valid.csv')


def func2():
 
    # 加载训练数据
    train_data = pd.read_csv('wine-train.csv')
    valid_data = pd.read_csv('wine-valid.csv')
 
    
    x_train = train_data.iloc[:, :-1]
    y_train = train_data.iloc[:, -1]
 
    
    x_valid = valid_data.iloc[:, :-1]
    y_valid = valid_data.iloc[:, -1]
 
    # XGBoost模型训练
    estimator = xgb.XGBClassifier(n_estimators=100,
                                  objective='multi:softmax',
                                  eval_metric='merror',
                                  eta=0.1,
                                  use_label_encoder=False,
                                  random_state=22)
    estimator.fit(x_train, y_train)
 
    # 3. 模型评估
    y_pred = estimator.predict(x_valid)
    print(classification_report(y_true=y_valid, y_pred=y_pred))
 
    # 4. 模型保存
    joblib.dump(estimator, 'model/xgboost.pth')


  • n_estimators: 这是XGBoost模型中树的数量,即迭代次数,设置为100。
  • objective:优化目标函数的选择。'multi:softmax'表示多分类问题,使用softmax作为输出层的激活函数。
  • eval_metric: 评估指标的选择。'merror'表示多分类问题的误差率。
  • eta: 这是学习率,用于控制每次迭代时模型权重更新的步长,设置为0.1。
  • use_label_encoder: 是一个布尔值,指示是否使用标签编码器。如果为False,则不使用标签编码器。
  • random_state: 这是随机数生成器的种子值,用于确保每次运行代码时得到相同的结果。


我们也可以使用交叉验证,网格搜索的方式搜寻最佳参数:


x_train = train_data.iloc[:, :-1]
y_train = train_data.iloc[:, -1]
 
x_valid = valid_data.iloc[:, :-1]
y_valid = valid_data.iloc[:, -1]
 
spliter = StratifiedKFold(n_splits=5)
 
param_grid = {'max_depth': np.arange(3, 5, 1),
              'n_estimators': np.arange(50, 150, 50),
              'eta': np.arange(0.1, 1, 0.3)}
estimator = xgb.XGBClassifier(n_estimators=100,
                              objective='multi:softmax',
                              eval_metric='merror',
                              eta=0.1,
                              use_label_encoder=False,
                              random_state=22)
cv = GridSearchCV(estimator,param_grid,cv=spliter)
y_pred = cv.predict(x_valid)
print(classification_report(y_true=y_valid, y_pred=y_pred))   # 美观


总而言之XGBoost(eXtreme Gradient Boosting)是一种先进的机器学习算法,具有以下特点和优势:


  1. 高效性能:XGBoost在许多机器学习竞赛和实际应用中表现出卓越的性能,尤其在结构化数据上的表现尤为突出。


  1. 灵活性:它支持多种自定义优化目标和评估指标,使模型能够适应不同的问题场景。


  1. 正则化:XGBoost在目标函数中加入了正则化项,这有助于控制模型的复杂度,降低过拟合风险。


  1. 并行处理:XGBoost内部设计了并行处理机制,能够充分利用硬件资源,提高计算效率。


  1. 缺失值处理:XGBoost能够自动学习出处理缺失值的策略,这使得它在处理实际问题中的不完整数据时更加方便。


  1. 内置交叉验证:XGBoost提供了内置的交叉验证功能,可以方便地进行超参数调优和模型选择。


  1. 模型可解释性:通过特征重要性等指标,XGBoost可以为模型的预测结果提供一定程度的解释性。


  1. 多语言支持:XGBoost提供了多种编程语言的接口,包括Python、R、Java等,方便用户在不同的环境中使用。


相关文章
|
6月前
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
304 0
|
6月前
|
机器学习/深度学习 数据采集 算法
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
Python用逻辑回归、决策树、SVM、XGBoost 算法机器学习预测用户信贷行为数据分析报告
|
3月前
|
机器学习/深度学习 算法
【Deepin 20系统】机器学习分类算法模型xgboost、lightgbm、catboost安装及使用
介绍了在Deepin 20系统上使用pip命令通过清华大学镜像源安装xgboost、lightgbm和catboost三个机器学习分类算法库的过程。
48 4
|
5月前
|
机器学习/深度学习 数据采集 存储
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
**摘要:** 这篇文章介绍了决策树作为一种机器学习算法,用于分类和回归问题,通过一系列特征测试将复杂决策过程简化。文章详细阐述了决策树的定义、构建方法、剪枝优化技术,以及优缺点。接着,文章讨论了集成学习,包括Bagging、Boosting和随机森林等方法,解释了它们的工作原理、优缺点以及如何通过结合多个模型提高性能和泛化能力。文中特别提到了随机森林和GBDT(XGBoost)作为集成方法的实例,强调了它们在处理复杂数据和防止过拟合方面的优势。最后,文章提供了选择集成学习算法的指南,考虑了数据特性、模型性能、计算资源和过拟合风险等因素。
73 0
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
|
4月前
|
机器学习/深度学习 数据采集 算法
Python实现xgboost分类模型(XGBClassifier算法)项目实战
Python实现xgboost分类模型(XGBClassifier算法)项目实战
178 0
|
机器学习/深度学习 传感器 算法
【XGBoost回归预测】基于鲸鱼算法WOA优化XGBoost实现数据回归预测附matlab代码
【XGBoost回归预测】基于鲸鱼算法WOA优化XGBoost实现数据回归预测附matlab代码
|
6月前
|
机器学习/深度学习 数据采集 算法
共享单车需求量数据用CART决策树、随机森林以及XGBOOST算法登记分类及影响因素分析
共享单车需求量数据用CART决策树、随机森林以及XGBOOST算法登记分类及影响因素分析
|
机器学习/深度学习 算法 数据挖掘
机器学习集成学习进阶Xgboost算法案例分析 2
机器学习集成学习进阶Xgboost算法案例分析
100 0
|
机器学习/深度学习 缓存 Dart
机器学习集成学习进阶Xgboost算法案例分析 1
机器学习集成学习进阶Xgboost算法案例分析
148 0
|
24天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。