楼主: CDA网校
127 0

[每天一个数据分析师] 7个让预测模型更精准的XGBoost技巧 [推广有奖]

管理员

已卖:189份资源

泰斗

5%

还不是VIP/贵宾

-

威望
3
论坛币
128372 个
通用积分
12885.1011
学术水平
278 点
热心指数
286 点
信用等级
253 点
经验
232009 点
帖子
7134
精华
19
在线时间
4418 小时
注册时间
2019-9-13
最后登录
2026-3-9

初级热心勋章

楼主
CDA网校 学生认证  发表于 2026-3-4 15:03:53 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

一、引言

像XGBoost(极端梯度提升)这样的集成方法,是梯度提升决策树的高效实现,它能将多个较弱的估计器聚合为一个强大的预测模型。这类集成方法因其准确性、高效性以及在结构化(表格)数据上的出色表现而备受青睐。尽管广泛使用的机器学习库scikit-learn并未提供XGBoost的原生实现,但有一个专门的库(恰如其名XGBoost)提供了与scikit-learn兼容的API。

Airia企业级AI(了解更多)

你只需按以下方式导入它:

西北大学(NWU)——提供多种人工智能课程供你选择。

from xgboost import XGBClassifier

下面,我们将介绍7个Python技巧,帮助你充分利用这个独立的XGBoost实现,尤其是在构建更精准的预测模型时。

为了说明这些技巧,我们将使用scikit-learn中可免费获取的乳腺癌数据集,并定义一个基本默认设置的基准模型。在尝试以下7个技巧之前,请务必先运行这段代码:

import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import accuracy_score
from xgboost import XGBClassifier

# 数据加载
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 基准模型
model = XGBClassifier(eval_metric="logloss", random_state=42)
model.fit(X_train, y_train)
print("基准准确率:", accuracy_score(y_test, model.predict(X_test)))

二、调优学习率和估计器数量

虽然这并非通用规则,但在XGBoost集成中,明确降低学习率同时增加估计器(树)数量,通常能提高准确率。较小的学习率让模型学习更平缓,而额外的树则可以补偿步长的减少。

以下是一个示例。你可以亲自尝试,并将得到的准确率与初始基准模型进行比较:

model = XGBClassifier(
    learning_rate=0.01,
    n_estimators=5000,
    eval_metric="logloss",
    random_state=42
)
model.fit(X_train, y_train)
print("模型准确率:", accuracy_score(y_test, model.predict(X_test)))

为简洁起见,后续示例中将省略最后的print()语句。你在自行测试时,只需将其添加到以下任何代码片段末尾即可。


三、调整树的最大深度

max_depth参数是继承自经典决策树的关键超参数,它限制了集成中每棵树的生长深度。限制树的深度看似简单,但令人惊讶的是,较浅的树通常比较深的树泛化能力更好。

以下示例将树的最大深度限制为2:

model = XGBClassifier(
    max_depth=2,
    eval_metric="logloss",
    random_state=42
)
model.fit(X_train, y_train)

四、通过子采样减少过拟合

subsample参数会在集成中每棵树生长前,随机采样一定比例的训练数据(例如80%)。这种简单的技术是一种有效的正则化策略,有助于防止过拟合。

如果不指定该超参数,其默认值为1.0,即使用100%的训练样本:

model = XGBClassifier(
    subsample=0.8,
    colsample_bytree=0.8,
    eval_metric="logloss",
    random_state=42
)
model.fit(X_train, y_train)

请记住,这种方法在数据集规模适中时效果最佳。如果数据集本身已经很小,过度的子采样可能会导致欠拟合。


五、添加正则化项

为了进一步控制过拟合,可以使用传统的正则化策略(如L1正则化(Lasso)和L2正则化(Ridge))对复杂树进行惩罚。在XGBoost中,这分别由reg_alpha和reg_lambda参数控制。

model = XGBClassifier(
    reg_alpha=0.2,   # L1正则化
    reg_lambda=0.5,  # L2正则化
    eval_metric="logloss",
    random_state=42
)
model.fit(X_train, y_train)

六、使用早停策略

早停(Early Stopping)是一种面向效率的机制,当验证集上的性能在指定轮数内停止提升时,它会终止训练。

根据你的编码环境和所使用的XGBoost库版本,你可能需要升级到更新的版本才能使用以下实现。此外,请确保在模型初始化时指定early_stopping_rounds,而不是将其传递给fit()方法。

model = XGBClassifier(
    n_estimators=1000,
    learning_rate=0.05,
    eval_metric="logloss",
    early_stopping_rounds=20,
    random_state=42
)

model.fit(
    X_train, y_train,
    eval_set=[(X_test, y_test)],
    verbose=False
)

如需升级库,请运行:

!pip uninstall -y xgboost
!pip install xgboost --upgrade

七、执行超参数搜索

对于更系统的方法,超参数搜索可以帮助找到最大化模型性能的参数组合。以下是一个使用网格搜索(Grid Search)探索前面介绍的三个关键超参数组合的示例:

param_grid = {
    "max_depth": [345],
    "learning_rate": [0.010.050.1],
    "n_estimators": [200500]
}

grid = GridSearchCV(
    XGBClassifier(eval_metric="logloss", random_state=42),
    param_grid,
    cv=3,
    scoring="accuracy"
)

grid.fit(X_train, y_train)
print("最佳参数:", grid.best_params_)

best_model = XGBClassifier(
    **grid.best_params_,
    eval_metric="logloss",
    random_state=42
)

best_model.fit(X_train, y_train)
print("调优后准确率:", accuracy_score(y_test, best_model.predict(X_test)))

八、调整类别不平衡

最后这个技巧在处理严重类别不平衡的数据集时特别有用(乳腺癌数据集相对平衡,因此即使你观察到微小变化也无需担心)。当类别比例严重倾斜时(例如90/10、95/5或99/1),scale_pos_weight参数尤其有帮助。

以下是如何根据训练数据计算并应用该参数:

ratio = np.sum(y_train == 0) / np.sum(y_train == 1)

model = XGBClassifier(
    scale_pos_weight=ratio,
    eval_metric="logloss",
    random_state=42
)

model.fit(X_train, y_train)

九、总结

在本文中,我们探讨了7个实用技巧,帮助你利用专用的Python库增强XGBoost集成模型。对学习率、树深度、采样策略、正则化和类别权重进行深思熟虑的调优,再结合系统的超参数搜索,往往能让一个不错的模型变得高度精准。

推荐学习书籍 《CDA一级教材》适合CDA一级考生备考,也适合业务及数据分析岗位的从业者提升自我。完整电子版已上线CDA网校,累计已有10万+在读~ !

免费加入阅读:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:boost 预测模型 scikit-learn classifier Estimators

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-3-10 04:12