滑坡灾害是山区常见的地质灾害之一,准确地评估滑坡易发性对于灾害防治具有重要意义。本文基于梯度提升决策树( Tree, GBDT)模型,介绍了从数据预处理到模型训练、特征重要性分析、SHAP解释以及最终的易发性概率计算和可视化的完整流程。
1.数据预处理与转换
在滑坡易发性评价中,研究区通常包含多个环境因子栅格数据(如坡度、地貌、地层岩性等)。
首先需要将这些栅格数据转换为CSV格式,便于后续模型训练。代码的核心流程包括:
读取TIFF文件:使用库读取多源栅格数据。
数据转换:将二维栅格数据转换为一维数组,方便存储。
数据合并:将所有栅格数据合并为一个二维数组,并进行转置,使行对应像素点,列对应不同因子。
保存为CSV:转换后的数据以CSV格式导出,便于后续建模。
# 获取TIFF文件路径并读取
folder_path = '数据路径'
tif_files = [f for f in os.listdir(folder_path) if f.endswith('.tif')]
array_list = []
file_names = []
for tif_file in tif_files:
tiff_data = tifffile.imread(os.path.join(folder_path, tif_file))
array_data = np.array(tiff_data)
array_list.append(array_data.flatten())
file_names.append(os.path.splitext(tif_file)[0])
# 合并数据并转置
merged_array = np.vstack(array_list).T
df = pd.DataFrame(merged_array, columns=file_names)
df.to_csv('输出路径.csv', index=False)
这一过程确保了多源数据的标准化和统一化,为模型训练奠定了基础。
2.模型训练
在数据预处理完成后决策树模型,使用GBDT模型进行滑坡易发性预测。GBDT模型是一种强大的集成学习方法,通过构建多个决策树来优化分类性能。
主要步骤包括:
数据划分:将数据集划分为训练集和测试集,通常采用7:3的比例。
模型初始化:设置GBDT模型的关键参数,包括树的数量()、学习率()和最大树深度()。
模型训练与预测:训练GBDT模型并对训练集和测试集进行预测。
性能评估:通过准确率()、精确率()、召回率()、F1分数、ROC曲线和AUC等指标评估模型的性能。
# 导入CSV数据
data = pd.read_csv('样本数据.csv')
X = data.drop(columns=['label'])
y = data['label']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 定义GBDT模型
gbdt_model = GradientBoostingClassifier(n_estimators=100, learning_rate=0.01, max_depth=5, random_state=42)
gbdt_model.fit(X_train, y_train)
# 预测
y_pred_test = gbdt_model.predict(X_test)
test_accuracy = accuracy_score(y_test, y_pred_test)
print(f"测试集准确率: {test_accuracy:.4f}")
训练集和测试集的ROC和AUC值:
训练集和测试集的混淆矩阵:
混淆矩阵计算的各个指标:
模型的训练结果不仅提供了对滑坡易发性的分类判断,还为进一步的特征分析和解释提供了基础。
3.特征重要性分析
特征重要性分析是解释模型的重要方式,用于了解哪些因子对滑坡易发性预测贡献最大。
特征重要性提取:GBDT模型的属性提供了每个特征的贡献度。
可视化分析:利用绘制特征重要性条形图,直观展示各因子的重要性。
import seaborn as sns
import matplotlib.pyplot as plt
# 提取特征重要性
test_importance = pd.DataFrame({'Feature': X_train.columns, 'Importance': gbdt_model.feature_importances_}).sort_values(by='Importance', ascending=False)
# 绘制特征重要性图
plt.figure(figsize=(10, 8))
sns.barplot(x='Importance', y='Feature', data=test_importance)
plt.title('GBDT特征重要性分析')
plt.show()
这种分析方式有助于识别关键影响因子,为滑坡防治措施提供科学依据。
4.SHAP解释
为了进一步解析模型的决策过程,采用SHAP( )方法进行解释。
SHAP解释器:基于训练好的GBDT模型,使用SHAP解释器计算特征对模型输出的贡献。
SHAP特征重要性图:绘制特征重要性柱状图,进一步验证模型中显著的影响因子。
SHAP蜂巢图:通过蜂巢图展示特征对预测结果的影响方向和程度。
import shap
explainer = shap.Explainer(gbdt_model, X_train)
shap_values = explainer(X_train)
# 绘制SHAP特征重要性图
shap.summary_plot(shap_values, X_train, plot_type='bar')
# 绘制SHAP蜂巢图
shap.summary_plot(shap_values, X_train)
这种解释方法不仅提升了模型的透明性,也为决策者提供了更具解释性的风险评估结果。
5.全区易发性概率计算与可视化
在模型验证完成后,可以将训练好的GBDT模型应用于全区栅格数据,生成滑坡易发性概率图。
主要步骤包括:
全区数据读取:将区域内所有像素点的环境因子数据输入模型。
概率预测:利用GBDT模型计算每个像素点的滑坡发生概率。
结果转换:将预测结果保存为CSV格式。
栅格生成:将概率数据重新映射到原始栅格坐标,生成空间分布图。
可视化:通过GIS软件或展示易发性分布图,直观呈现滑坡高风险区域。
import rasterio
# 加载全区数据并预测
all_data = pd.read_csv('全区样本.csv').values
predicted_probabilities = gbdt_model.predict_proba(all_data)[:, 1]
# 转换为栅格
data = pd.read_csv('GBDTprob.csv')
values = data.iloc[:, 0].values
with rasterio.open('Aspect.tif') as src:
profile = src.profile.copy()
raster_data = values.reshape(src.height, src.width)
profile.update(dtype=rasterio.float32, count=1)
with rasterio.open('GBDT_Probability_Map.tif', 'w', **profile) as dst:
dst.write(raster_data, 1)
print("滑坡易发性概率图生成成功!")
结语
文通过完整的流程展示了GBDT模型在滑坡易发性评价中的应用。从数据预处理、模型训练、特征重要性分析到解释性分析和全区易发性概率预测,每一步都为最终的风险评估提供了可靠的支持。全面介绍了决策树模型在滑坡易发性评价中的应用流程,从理论基础到实践操作都提供了详细指导。如需了解更多技术细节或获取完整代码,可后台联系我们,小偿获取整个流程的完整代码。
未来,可以进一步优化模型参数、引入更多环境因子或采用多模型集成方法,提升滑坡预测的精度。同时决策树模型,将不确定性分析纳入评价体系,也将为滑坡灾害防治提供更加全面的科学依据。
限时特惠:本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情
站长微信:Jiucxh