XGBoost在机器学习中被广泛应用于多种场景,特别是在结构化数据的处理上表现出色,XGBoost适用于多种监督学习任务,包括分类、回归和排名问题。在数据挖掘和数据科学竞赛中,XGBoost因其出色的性能而被频繁使用。例如,在Kaggle平台上的许多获奖方案中,XGBoost都发挥了重要作用。此外,它在处理缺失值和大规模数据集上也有很好的表现。
XGBoost是一种基于梯度提升决策树(GBDT)的算法,在机器学习领域被广泛使用,特别是在数据挖掘和推荐系统中。
基本思想:XGBoost的基本思想是通过添加一系列弱学习器(通常是CART回归树)来逐步减少目标函数的残差(模型预测值与实际值之间的差异),从而提升模型的性能。
XGBoost和AdaBoost区别
XGBoost和AdaBoost在模型的基分类器、目标函数以及正则化策略上存在明显区别。
XGBoost和AdaBoost都属于Boosting框架
XGBoost在技术上比AdaBoost更为先进,提供了更多的定制化选项,并且在很多情况下能够获得更好的性能。
XGBoost属于参数学习算法,最终我们要找到一个函数来表示XGBoost模型。
构造目标函数 → 目标函数的优化方法 → 用函数来表示一棵树 → 如何构建树模型
XGBoost原理:
XGBoost API
首先要安装库 pip install xgboost -i https://pypi.tuna.tsinghua.edu.cn/simple
booster
silent
nthread
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
的作用是从一个分类任务中生成一个文本报告,展示主要的分类指标。是一个用于评估分类模型性能的函数,它能够为二分类或多分类任务提供一个详细的性能报告。该报告包括以下几个主要指标:
- 精确度 (Precision):预测为正类别中实际为正类别的比例。
- 召回率 (Recall):实际为正类别中预测为正类别的比例。
- F1分数 (F1 Score):精确度和召回率的调和平均数,是对模型精确度和召回率之间平衡的一个度量。
- 支持度 (Support):每个类别在数据集中的样本数量。
- 准确性 (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)是一种先进的机器学习算法,具有以下特点和优势:
高效性能:XGBoost在许多机器学习竞赛和实际应用中表现出卓越的性能,尤其在结构化数据上的表现尤为突出。
灵活性:它支持多种自定义优化目标和评估指标,使模型能够适应不同的问题场景。
正则化:XGBoost在目标函数中加入了正则化项,这有助于控制模型的复杂度,降低过拟合风险。
并行处理:XGBoost内部设计了并行处理机制,能够充分利用硬件资源,提高计算效率。
缺失值处理:XGBoost能够自动学习出处理缺失值的策略,这使得它在处理实际问题中的不完整数据时更加方便。
内置交叉验证:XGBoost提供了内置的交叉验证功能,可以方便地进行超参数调优和模型选择。
模型可解释性:通过特征重要性等指标,XGBoost可以为模型的预测结果提供一定程度的解释性。
多语言支持:XGBoost提供了多种编程语言的接口,包括Python、R、Java等,方便用户在不同的环境中使用。