✨ 欢迎关注 ✨
本节介绍: Geographical-XGBoost:一种基于梯度提升树的空间局部回归的新集成模型实现 。数据采用模拟数据,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,付费成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。 购买前请咨询,避免不必要的问题。
✨ 文献信息 ✨
G-XGBoost 是一种基于梯度提升树的新型集成模型,旨在处理空间局部回归问题。它通过对XGBoost算法的多个扩展来改进其在地理数据上的表现。首先,G-XGBoost通过分配空间权重来创建局部模型,重点关注导致误差最大的样本,从而提升模型的准确性。其次,它采用了集成架构,将全局模型和局部模型结合起来进行训练、验证和预测,进一步提高了模型的预测能力。第三,G-XGBoost使用空间权重计算局部特征的重要性,这是之前未提出的方法
该模型在多个基准数据集上进行了评估,与传统的回归模型(如普通最小二乘法、随机森林和XGBoost)以及空间局部回归模型(如地理加权回归、地理随机森林等)进行了比较。实验结果表明,G-XGBoost在提高R²和减少均方误差方面,优于所有现有的模型,具有更好的空间分析能力。G-XGBoost不仅是一个强大的预测工具,还是一个探索性工具,能够分析特征重要性在空间上的变化,进一步推动了可解释性和可解释AI的发展,尤其对地理学研究具有重要意义。更多文献信息后台输入0527获取
✨ 代码实现 ✨
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
import warnings
# 忽略所有警告
warnings.filterwarnings("ignore")
path = r"2025-5-27公众号Python机器学习AI.xlsx"
df = pd.read_excel(path)
df
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['CMEDV'], axis=1)
y = df['CMEDV']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
Coords_train = X_train[['Xcoord', 'Ycoord']].reset_index(drop=True)
Coords_test = X_test[['Xcoord', 'Ycoord']].reset_index(drop=True)
X_train = X_train.drop(['Xcoord', 'Ycoord'], axis=1).reset_index(drop=True)
X_test = X_test.drop(['Xcoord', 'Ycoord'], axis=1).reset_index(drop=True)
y_train = y_train.reset_index(drop=True)
y_test = y_test.reset_index(drop=True)
将数据集划分为特征(X)和目标变量(y),并将数据随机分为训练集和测试集,其中30%的数据用于测试,同时提取并分别保存训练集和测试集中的坐标信息,并去除Xcoord和Ycoord列用于模型训练
import geoxgboost as gx # 导入 geoxgboost 库
params = {
'n_estimators': 100, # 默认值为100
'learning_rate': 0.1, # 默认值为0.3
'max_depth': 6, # 默认值为6
'min_child_weight': 1, # 默认值为1
'gamma': 0, # 默认值为0
'subsample': 0.8, # 默认值为1
'colsample_bytree': 0.8,# 默认值为1
'reg_alpha': 0, # 默认值为0
'reg_lambda': 1, # 默认值为1
}
# 定义超参数搜索空间
Param1 = None; Param2 = None; Param3 = None # 设置超参数为空,以避免重复设置
Param1_Values = []; Param2_Values = []; Param3_Values = [] # 初始化超参数值列表
# 选择和设置不同的超参数值
Param1 = 'n_estimators'
Param1_Values = [100, 200, 300, 500]
Param2 = 'learning_rate'
Param2_Values = [0.1, 0.05, 0.01]
Param3 = 'max_depth'
Param3_Values = [2, 3, 5, 6]
# 创建超参数网格
param_grid = gx.create_param_grid(Param1, Param1_Values, Param2, Param2_Values, Param3, Param3_Values)
params, Output_NestedCV = gx.nestedCV(X_train, y_train, param_grid, Param1, Param2, Param3, params)
使用geoxgboost库进行超参数调优,通过定义不同超参数n_estimators、learning_rate、max_depth的搜索空间,并利用嵌套交叉验证nestedCV对训练数据X_train和y_train进行超参数优化,最终返回最佳超参数和交叉验证的结果,以下为返回结果
=================Nested CV process===========================================
Tuning with 3 hyperparameters
>Count=1, R2=0.721, RMSE=-2.967, MAE=2.793,cfg={'learning_rate': 0.05, 'max_depth': 2, 'n_estimators': 500}, Progress Completed=20.00%
Tuning with 3 hyperparameters
>Count=2, R2=0.871, RMSE=-3.405, MAE=2.380,cfg={'learning_rate': 0.1, 'max_depth': 2, 'n_estimators': 200}, Progress Completed=40.00%
Tuning with 3 hyperparameters
>Count=3, R2=0.925, RMSE=-3.621, MAE=1.755,cfg={'learning_rate': 0.05, 'max_depth': 2, 'n_estimators': 500}, Progress Completed=60.00%
Tuning with 3 hyperparameters
>Count=4, R2=0.881, RMSE=-3.520, MAE=2.152,cfg={'learning_rate': 0.05, 'max_depth': 2, 'n_estimators': 500}, Progress Completed=80.00%
Tuning with 3 hyperparameters
>Count=5, R2=0.918, RMSE=-3.400, MAE=2.280,cfg={'learning_rate': 0.1, 'max_depth': 3, 'n_estimators': 200}, Progress Completed=100.00%
=================Nested CV results for hyperparamtre tuning==================
Generalization error: mean-R2 (stdev): 0.863 (0.074)
Mean MAE: 2.272 (0.336)
Mean RMSE: -3.382 (0.223)
Best params taken at model with minimum RMSE at count: 1
meanR2 Std_meanR2 meanMAE Std_meanMAE meanRMSE \
Generalized Nested CV 0.863127 0.074144 2.271987 0.336129 -3.382476
meanRMSE
Generalized Nested CV 0.223234
Best hyperparamter values:
{'n_estimators': 500, 'learning_rate': 0.05, 'max_depth': 2, 'min_child_weight': 1, 'gamma': 0, 'subsample': 0.8, 'colsample_bytree': 0.8, 'reg_alpha': 0, 'reg_lambda': 1}
Results have been saved in csv format at the specified path
=============================================================================
调优过程:展示了不同超参数组合下的性能指标(R2、RMSE 和 MAE)和相应的超参数设置。例如,第一个超参数组合 {learning_rate: 0.05, max_depth: 2, n_estimators: 500} 的 R2 为 0.721,RMSE 为 -2.967,MAE 为 2.793,表示该组合的模型在验证集上的表现
结果总结:Generalization error:给出了模型的平均 R2(0.863)和标准差(0.074),以及MAE和RMSE的平均值和标准差,反映了模型的稳定性和预测误差。Best parameters:报告了表现最好的超参数组合,即 n_estimators=500, learning_rate=0.05, max_depth=2,并提供了这些超参数在最小RMSE时的表现
Output\_GlobalXGBoost = gx.global\_xgb(X\_train, y\_train, params)
使用 geoxgboost 库中的 global_xgb 函数在训练数据X_train和目标变量y_train上训练一个全局XGBoost模型,并将训练结果存储在Output_GlobalXGBoost中,以下为相关信息输出
=================XGBoost (global) evaluation results ========================
Global feature importance:
Imp_TRACT Imp_CRIM Imp_ZN Imp_INDUS Imp_CHAS Imp_NOX Imp_RM \
0 0.034551 0.028377 0.03484 0.096587 0.003724 0.108785 0.176211
Imp_AGE Imp_DIS Imp_RAD Imp_TAX Imp_PTRATIO Imp_B Imp_LSTAT
0 0.016627 0.072522 0.007242 0.025602 0.030061 0.019911 0.344962
Test R2: 89.55%
===================Stats and importance======================================
R2Pred MAEPred RMSPred R2test MAEtest RMSETest \
GlobalXGB 0.96201 1.244383 1.821304 0.895525 2.017641 2.754116
Imp_TRACT Imp_CRIM Imp_ZN Imp_INDUS Imp_CHAS Imp_NOX \
GlobalXGB 0.034551 0.028377 0.03484 0.096587 0.003724 0.108785
Imp_RM Imp_AGE Imp_DIS Imp_RAD Imp_TAX Imp_PTRATIO \
GlobalXGB 0.176211 0.016627 0.072522 0.007242 0.025602 0.030061
Imp_B Imp_LSTAT
GlobalXGB 0.019911 0.344962
Results have been saved in xlsx format at the specified path
=============================================================================
训练后的全局 XGBoost 模型的评估结果,包括全局特征重要性(每个特征的贡献度),测试集的 R²(89.55%)、MAE 和 RMSE,以及模型的各项性能指标(如预测的 R²、MAE 和 RMSE),并将结果保存为 Excel 文件
# 使用 geoxgboost 库的 optimize_bw 函数来优化带宽(bandwidth)
bw = gx.optimize_bw(
X_train, # 输入的特征数据(自变量),通常是一个 pandas DataFrame 或 numpy ndarray,包含训练数据中的所有自变量
y_train, # 目标变量(因变量),即模型需要预测的标签数据,通常是 pandas Series 或 numpy ndarray,包含所有数据点的标签
Coords_train, # 数据点的空间坐标,通常是经纬度或其他空间坐标,提供每个数据点的空间位置
params, # 模型的超参数设置,包含了XGBoost模型所需的各种超参数配置,例如学习率、树的数量等
bw_min=77, # 带宽优化的最小值,带宽决定了空间加权的影响范围。带宽越小,影响范围越小
bw_max=83, # 带宽优化的最大值,带宽的最大限制,带宽越大,影响范围越大
step=1, # 带宽搜索的步长,决定了带宽调整的增量,较小的步长会提高搜索精度,但计算时间更长
Kernel='Adaptive', # 核函数类型,'Adaptive' 表示使用自适应核函数,该核函数会根据每个数据点的空间位置调整权重
spatial_weights=True # 是否启用空间权重,True 表示启用空间加权,模型会考虑空间位置的影响来调整预测
)
使用geoxgboost库的optimize_bw函数在给定的训练数据、目标变量和空间坐标基础上,优化空间加权模型的带宽(bandwidth),以便提高预测精度,并指定带宽范围、步长和核函数类型(自适应核)
=================Calculating optimal bandwidth===============================
Calculation with spatial weights
Adaptive Kernel used
Calculating bw= 77, with bw_max=83 and step of 1
bw= 77, with CV= 4525.794
Calculating bw= 78, with bw_max=83 and step of 1
bw= 78, with CV= 4525.647
Calculating bw= 79, with bw_max=83 and step of 1
bw= 79, with CV= 4436.070
Calculating bw= 80, with bw_max=83 and step of 1
bw= 80, with CV= 4461.445
Calculating bw= 81, with bw_max=83 and step of 1
bw= 81, with CV= 4466.268
Calculating bw= 82, with bw_max=83 and step of 1
bw= 82, with CV= 4346.732
Calculating bw= 83, with bw_max=83 and step of 1
bw= 83, with CV= 4321.112
Best bandwidth value: 83 at min CV= 4321.112.
Results have been saved in csv format at the specified path
=============================================================================
输出展示带宽优化过程的结果。模型通过使用自适应核函数(Adaptive Kernel)并启用空间权重,逐步计算不同带宽(从77到83)的交叉验证(CV)误差:计算过程:模型在带宽范围内(77到83)逐个计算每个带宽对应的交叉验证误差(CV)。例如,带宽为77时,CV为4525.794,带宽为78时,CV为4525.647,以此类推。结果:最终,带宽为83时,CV达到最小值4321.112,表示这是最优的带宽值。保存结果:最优带宽和交叉验证误差的结果已保存为CSV文件。总结:该过程找到并报告了最优的带宽值(83),以便在后续的模型训练中使用。
Output_GXGB_LocalModel = gx.gxgb(
X_train, # 输入的特征数据(自变量),通常是一个 pandas DataFrame 或 numpy ndarray,包含自变量信息
y_train, # 目标变量(因变量),也就是需要预测的标签,通常是 pandas Series 或 numpy ndarray
Coords_train, # 数据点的空间坐标,包含每个数据点的地理位置信息(如经纬度)
params, # 模型的超参数设置,包含了 XGBoost 的超参数,如学习率、树的数量等
bw=bw, # 优化得到的带宽(bandwidth),控制空间加权的影响范围
Kernel='Adaptive', # 核函数类型,'Adaptive'表示使用自适应核函数,在地理空间中根据位置调整加权
spatial_weights=True, # 是否启用空间权重,True表示在模型中考虑数据的地理位置进行加权
alpha_wt_type='varying', # 设置空间加权强度的变化类型,'varying'表示不同的数据点使用不同的加权强度
alpha_wt=0.5 # 设置空间加权强度的参数,0.5表示每个数据点的空间权重会根据 alpha_wt_type 调整
)
使用geoxgboost库的gxgb函数,在训练数据X_train、目标变量y_train空间坐标Coords_train上训练一个考虑空间加权的XGBoost模型,使用优化后的带宽(bw)、自适应核函数(Adaptive)以及指定的空间加权强度,进行局部回归建模
# 使用 geoxgboost 库的 predict_gxgb 函数对新数据进行预测
Output_PredictGXGBoost = gx.predict_gxgb(
X_test, # 输入的待预测数据,通常是一个 pandas DataFrame,包含需要进行预测的特征数据
Coords_test, # 待预测数据的空间坐标,包含每个待预测数据点的地理坐标(如经纬度)
Coords_train, # 训练数据的空间坐标,包含训练数据中每个数据点的地理坐标,用于空间加权
Output_GXGB_LocalModel, # 经过训练的地理空间加权 XGBoost 模型,用于对新数据进行预测
alpha_wt=0.5, # 设置空间加权的强度系数,0.5表示适中的空间加权强度,控制空间加权的影响
alpha_wt_type='varying' # 设置空间加权强度的变化类型,'varying'表示每个数据点的空间加权强度是不同的
)
最后使用geoxgboost库的predict_gxgb函数,基于训练好的空间加权XGBoost模型 (Output_GXGB_LocalModel) 对测试数据X_test进行预测,同时考虑测试数据的空间坐标Coords_test和训练数据的空间坐标Coords_train,并根据指定的空间加权强度alpha_wt进行调整,最后对预测结果进行一个可视化
这张图展示模型在外部测试集上的预测结果,其中包括了预测值与真实值的关系,回归线、95%的预测区间以及误差热图。从图中的 R² 值(0.87)和误差指标(RMSE = 3.15, MAE = 2.16)来看,模型在外部测试集上的表现与嵌套交叉验证中的测试集结果(R² = 89.55%)相近,显示出良好的模型稳健性
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 购买介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系,购买作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 购买前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信deep_ML联系 避免淘宝客服漏掉信息 ,希望能为您的学习之路提供帮助!
往期推荐
机器学习在临床数据分析中的应用:从数据预处理到Web应用实现的完整流程教学
因果推断:利用EconML实现双重机器学习估计条件平均处理效应 (CATE)
期刊复现:基于XGBoost模型的网页工具SHAP力图解释单样本预测结果
期刊配图:nature cities通过ALE(累积局部效应)解析特征对模型影响
期刊复现:结合因果推断与SHAP可解释性的机器学习实现应用流程
nature communications:基于Light GBM与随机森林结合的多模型特征选择方法
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考