PythonAI算法
XGBoost Python 机器学习实战教程与参数详解
介绍 XGBoost 集成学习算法,涵盖原理、安装、参数配置及实战案例。内容包括决策树基础、梯度提升机制、正则化优化,以及鸢尾花分类和糖尿病预测的 Python 代码示例。此外还涉及模型调优技巧如交叉验证、网格搜索,以及过拟合等常见问题的解决方案。适合机器学习初学者快速掌握 XGBoost 工具。

介绍 XGBoost 集成学习算法,涵盖原理、安装、参数配置及实战案例。内容包括决策树基础、梯度提升机制、正则化优化,以及鸢尾花分类和糖尿病预测的 Python 代码示例。此外还涉及模型调优技巧如交叉验证、网格搜索,以及过拟合等常见问题的解决方案。适合机器学习初学者快速掌握 XGBoost 工具。

XGBoost(eXtreme Gradient Boosting) 是一种基于决策树的集成学习算法,通过梯度提升框架实现高效机器学习。它在 Kaggle 竞赛中屡获佳绩。
pip install xgboost pandas scikit-learn matplotlib
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import xgboost as xgb
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import accuracy_score, mean_squared_error
from sklearn.datasets import load_iris, load_diabetes
决策树通过特征分割构建树形结构,每个叶节点代表一个预测结果。
\text{目标函数} = \sum_{i=1}^{n} L(y_i, \hat{y}_i) + \sum_{k=1}^{K} \Omega(f_k)
| 参数 | 说明 | 示例值 |
|---|---|---|
booster | 基础模型类型 | gbtree(默认) |
nthread | 并行线程数 | -1(使用所有核心) |
| 参数 | 说明 | 示例值 |
|---|---|---|
max_depth | 树的最大深度 | 3 |
eta | 学习率 | 0.1 |
gamma | 分裂所需最小损失减少 | 0 |
min_child_weight | 叶子节点最小样本权重和 | 1 |
| 参数 | 说明 | 示例值 |
|---|---|---|
objective | 损失函数 | binary:logistic(二分类) |
multi:softmax(多分类) | ||
reg:squarederror(回归) | ||
eval_metric | 评估指标 | error(分类错误率) |
rmse(均方根误差) |
# 加载数据
iris = load_iris()
X, y = iris.data, iris.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 创建 DMatrix(XGBoost 专用数据结构)
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
# 设置参数
params = {
'objective': 'multi:softmax',
'num_class': 3,
'max_depth': 3,
'eta': 0.1,
'gamma': 0.1,
'subsample': 0.8,
'colsample_bytree': 0.8,
'eval_metric': 'merror'
}
# 训练模型
num_round = 100
model = xgb.train(params, dtrain, num_round)
# 预测
preds = model.predict(dtest)
accuracy = accuracy_score(y_test, preds)
print(f"测试集准确率:{accuracy:.4f}")
# 特征重要性
xgb.plot_importance(model)
plt.title('鸢尾花分类特征重要性')
plt.show()
num_class 参数必须明确指定类别数量# 加载数据
diabetes = load_diabetes()
X, y = diabetes.data, diabetes.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 参数设置
params = {
'objective': 'reg:squarederror',
'max_depth': 4,
'eta': 0.05,
'subsample': 0.7,
'colsample_bytree': 0.7,
'eval_metric': 'rmse'
}
# 训练模型
dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
model = xgb.train(
params, dtrain, num_boost_round=200, early_stopping_rounds=20, evals=[(dtest, "Test")]
)
# 预测与评估
preds = model.predict(dtest)
rmse = np.sqrt(mean_squared_error(y_test, preds))
print(f"测试集 RMSE: {rmse:.4f}")
# 可视化树结构
xgb.plot_tree(model, num_trees=0)
plt.title('XGBoost 决策树示例')
plt.show()
reg:squarederror 作为目标函数early_stopping_rounds 防止过拟合# 交叉验证
cv_results = xgb.cv(
params, dtrain, num_boost_round=200, nfold=5,
metrics='rmse', early_stopping_rounds=20, seed=42
)
print(f"最佳迭代次数:{cv_results.shape[0]}")
print(f"最佳 RMSE: {cv_results['test-rmse-mean'].min():.4f}")
# 使用 sklearn 接口
xgb_model = xgb.XGBRegressor(objective='reg:squarederror')
param_grid = {
'max_depth': [3, 4, 5],
'learning_rate': [0.01, 0.05, 0.1],
'n_estimators': [100, 200, 300],
'gamma': [0, 0.1, 0.2]
}
grid_search = GridSearchCV(
estimator=xgb_model, param_grid=param_grid, cv=5,
scoring='neg_mean_squared_error'
)
grid_search.fit(X_train, y_train)
print(f"最佳参数:{grid_search.best_params_}")
print(f"最佳分数:{-grid_search.best_score_:.4f}")
gamma 值(0.1-0.3)max_depth(3-6)min_child_weight(3-10)lambda 或 alphamax_depthsubsample 和 colsample_bytreegpu_hist 树方法scale_pos_weight 参数balanced 子采样通过本教程,您已掌握:
tree_method='gpu_hist' 参数
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online