机器学习和深度学习的_滑坡自动识别和滑坡易发性制图 基于滑坡自动识别和滑坡易发性制图的完整实现

机器学习和深度学习的_滑坡自动识别和滑坡易发性制图 基于滑坡自动识别和滑坡易发性制图的完整实现


以下文字及代码仅供参考。

滑坡自动识别和滑坡易发性制图在这里插入图片描述

机器学习和深度学习实现
语言:Python
软件:Arcgis,Jupyter notebook或Pycharm
模型:随机森林,支持向量机,神经网络
过程:1. 数据集制作(自己准备影像和滑坡标注,本人提供影像是有偿的)2. 代码(数据读取、数据划分、模型训练、应用模型、绘制ROC曲线、精度评价、预测结果输出)3. 结果制图。

基于滑坡自动识别和滑坡易发性制图的完整实现流程,使用 Python 和 ArcGIS、Jupyter Notebook 或 PyCharm 环境。我数据集制作、代码实现(包括随机森林、支持向量机和神经网络模型)、结果制图等步骤。


1. 数据集制作

1.1 数据来源
  • 影像数据:卫星影像(如 Sentinel-2、Landsat)或高分辨率 DEM 数据。
  • 滑坡标注数据:手动标注滑坡区域(可使用 ArcGIS 或 QGIS 标注)。
1.2 数据预处理
  • 使用 ArcGIS 或 QGIS 提取以下特征:
    • 地形因子:坡度、坡向、高程变化率等。
    • 植被指数:NDVI、NDWI。
    • 水文因子:河流密度、流域面积。
    • 土壤因子:土壤类型、渗透性。
    • 地质因子:岩性、断层距离。
1.3 数据格式
  • 将影像和标注数据导出为栅格文件(如 .tif)。
  • 标注数据应为二值化标签(0 表示非滑坡,1 表示滑坡)。

2. 代码实现

2.1 数据读取与处理
import numpy as np
import rasterio
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.metrics import roc_curve, auc, accuracy_score
import matplotlib.pyplot as plt

# 读取影像数据
def read_raster(file_path):
    with rasterio.open(file_path) as src:
        data = src.read()
        profile = src.profile
    return data, profile

# 加载数据
image, profile = read_raster('path/to/image.tif')
labels, _ = read_raster('path/to/labels.tif')

# 展平数据
image = image.reshape(image.shape[0], -1).T
labels = labels.flatten()

# 去除无效值(如 NaN)
valid_mask = ~np.isnan(labels)
X = image[valid_mask]
y = labels[valid_mask]

# 数据划分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

2.2 模型训练
随机森林模型
# 训练随机森林模型
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)

# 预测
y_pred_rf = rf_model.predict(X_test)
y_prob_rf = rf_model.predict_proba(X_test)[:, 1]
支持向量机模型
# 训练支持向量机模型
svm_model = SVC(probability=True, random_state=42)
svm_model.fit(X_train, y_train)

# 预测
y_pred_svm = svm_model.predict(X_test)
y_prob_svm = svm_model.predict_proba(X_test)[:, 1]
神经网络模型
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout

# 构建神经网络模型
nn_model = Sequential([
    Dense(64, activation='relu', input_shape=(X_train.shape[1],)),
    Dropout(0.5),
    Dense(32, activation='relu'),
    Dropout(0.5),
    Dense(1, activation='sigmoid')
])

nn_model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
nn_model.fit(X_train, y_train, epochs=20, batch_size=32, validation_split=0.2, verbose=1)

# 预测
y_prob_nn = nn_model.predict(X_test).flatten()
y_pred_nn = (y_prob_nn > 0.5).astype(int)

2.3 绘制 ROC 曲线
# 计算 ROC 曲线和 AUC
fpr_rf, tpr_rf, _ = roc_curve(y_test, y_prob_rf)
auc_rf = auc(fpr_rf, tpr_rf)

fpr_svm, tpr_svm, _ = roc_curve(y_test, y_prob_svm)
auc_svm = auc(fpr_svm, tpr_svm)

fpr_nn, tpr_nn, _ = roc_curve(y_test, y_prob_nn)
auc_nn = auc(fpr_nn, tpr_nn)

# 绘制 ROC 曲线
plt.figure(figsize=(8, 6))
plt.plot(fpr_rf, tpr_rf, label=f'Random Forest (AUC = {auc_rf:.2f})')
plt.plot(fpr_svm, tpr_svm, label=f'SVM (AUC = {auc_svm:.2f})')
plt.plot(fpr_nn, tpr_nn, label=f'Neural Network (AUC = {auc_nn:.2f})')
plt.plot([0, 1], [0, 1], 'k--', label='Random Guess')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend()
plt.show()

2.4 精度评价
# 计算精度
accuracy_rf = accuracy_score(y_test, y_pred_rf)
accuracy_svm = accuracy_score(y_test, y_pred_svm)
accuracy_nn = accuracy_score(y_test, y_pred_nn)

print(f'Random Forest Accuracy: {accuracy_rf:.2f}')
print(f'SVM Accuracy: {accuracy_svm:.2f}')
print(f'Neural Network Accuracy: {accuracy_nn:.2f}')

2.5 预测结果输出
# 使用随机森林模型进行预测
predicted_labels = rf_model.predict(image)

# 将预测结果保存为栅格文件
output_profile = profile.copy()
output_profile.update(dtype=rasterio.float32, count=1)
with rasterio.open('path/to/predicted_labels.tif', 'w', **output_profile) as dst:
    dst.write(predicted_labels.reshape(profile['height'], profile['width']).astype(np.float32), 1)

3. 结果制图

3.1 在 ArcGIS 中加载结果
  • 打开 ArcGIS Pro 或 QGIS。
  • 加载预测结果文件(predicted_labels.tif)。
  • 设置分类渲染(如滑坡区域为红色,非滑坡区域为绿色)。
3.2 制作易发性地图
  • 在 ArcGIS 中叠加地形、水文等要素。
  • 使用预测概率生成滑坡易发性地图(高概率区域为高风险区)。

总结

从数据准备到模型训练、推理和结果制图的完整流程。同学你可以根据需求选择合适的模型(随机森林、SVM 或神经网络),并调整超参数以优化性能。

仅供参考,我的同学们

### 评估深度学习模型在滑坡识别任务中的能 为了全面评估深度学习模型在滑坡识别任务上的效果,通常会采用多种评价指标来衡量模型的表现。这些指标不仅能够反映模型的整体准确,还能揭示其在处理类别不平衡等问题方面的表现。 #### 常见的评估方法指标 1. **混淆矩阵** 混淆矩阵是一个重要的工具,可以直观展示预测结果与实际标签之间的关系。通过计算真正类(TP)、假正类(FP)、真负类(TN)以及假负类(FN),可以从不同角度分析模型的分类能力[^3]。 2. **精度 (Precision)** **召回率 (Recall)** - 精度表示被预测为正类的样本中有多少是真的正类;即 \( \text{Precision} = \frac{\text{TP}}{\text{TP}+\text{FP}} \) - 召回率反映了所有真实正类中有多大比例被成功检出;即 \( \text{Recall} = \frac{\text{TP}}{\text{TP}+\text{FN}} \) 3. **F1分数** F1分数综合考虑了精确召回率,特别适用于解决类别不均衡的数据集问题。它定义为两者调平均数:\( F_1=2\cdot(\frac{\text{precision}\times\text{recall}}{\text{precision}+\text{recall}})\) 4. **交并比(IoU, Intersection over Union)** IoU 是一种广泛应用于图像分割任务的质量测量标准,尤其适合于地理空间数据分析。对于二元分类而言,IoU 计算方式如下: ```python intersection = np.sum(np.logical_and(y_true, y_pred)) union = np.sum(np.logical_or(y_true, y_pred)) iou_score = intersection / float(union + K.epsilon()) ``` 5. **Dice系数** Dice系数也常用于医学影像等领域,在此背景下同样有效。该指数范围介于0到1之间,越接近1说明匹配程度越高。公式表达式为: $$ DSC=\frac{2|X∩Y|}{|X|+|Y|} $$ 这里 X 表示地面实况集合 Y 则代表预测结果集. 6. **AUC-ROC曲线下的面积(Area Under Curve of Receiver Operating Characteristic)** AUC-ROC 曲线展示了当阈值变化时,敏感(True Positive Rate)相对于特异(False Positive Rate)的变化趋势。理想情况下,这条曲线下方所围成区域越大越好,意味着更好的区分能力泛化能. 7. **Kappa系数(Cohen's kappa coefficient)** 此外还可以利用 Cohen’s κ 来量化观测者间的一致水平,排除随机猜测因素的影响。κ 的取值区间 [-1,+1],其中正值表明存在一定程度的一致,而零则暗示完全由机遇决定的结果分布. 8. **平衡准确率(Balanced Accuracy)** 当面对严重倾斜的目标变量分布情况时,简单地依赖总体准确度可能会掩盖潜在缺陷。因此引入了平衡准确的概念——各子组内部正确判断的比例加权求均值得来的统计量. 综上所述,针对特定应用场景选取合适的评估手段至关重要。考虑到滑坡监测任务往往伴随着显著的数据偏斜现象,建议优先关注那些能较好体现少数群体特征的重要度量项如 Precision@k 或者 Average Precision(AP), 同时兼顾其他常规评测维度以获得更为全面的认识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值