ArcGIS Pro随机森林分类实战指南:从数据准备到模型评估

1次阅读
没有评论

共计 2060 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

为什么选择随机森林?

随机森林在空间分析中有几个不可替代的优势:

ArcGIS Pro 随机森林分类实战指南:从数据准备到模型评估

  • 能自动处理高维特征数据(比如多光谱遥感影像的数十个波段)
  • 通过 bagging 机制天然抗过拟合
  • 输出特征重要性排序,帮助理解变量贡献度
  • 对异常值和噪声数据不敏感

这些特性使它成为土地利用分类、植被监测等场景的首选算法。

数据准备三要素

1. 训练样本采集规范

在 ArcGIS Pro 中创建训练样本时要注意:

  • 每个类别至少采集 50-100 个样本点(小样本可用 SMOTE 算法扩充)
  • 使用【影像分类工具栏】的绘制工具时,避免跨越地物边界
  • 保存为.shp 或.geodatabase 格式,属性表需包含『class』字段

2. 特征变量选择策略

好的特征工程能显著提升模型效果:

  • 优先选择 NDVI、NDWI 等光谱指数
  • 加入纹理特征(GLCM 均值 / 方差)
  • 地形因子(坡度、高程)对某些分类很关键
  • 用【波段组合工具】测试不同特征组合

3. 数据标准化处理

遥感数据通常需要:

  • 用【栅格计算器】做 Min-Max 归一化
  • 检查 NoData 值(建议统一填充为 -9999)
  • 确保所有输入栅格具有相同分辨率 / 坐标系

核心代码实现

# -*- coding: utf-8 -*-
import arcpy
from arcpy.sa import *

# 环境设置
arcpy.env.workspace = "C:/Data/Classification.gdb"
arcpy.env.overwriteOutput = True

# 加载数据
train_samples = "Training_Points"  # 训练样本路径
features = ["Band1", "Band2", "NDVI", "Slope"]  # 特征变量列表
output_classifier = "RF_Model"  # 输出模型名称

# 执行随机森林训练
# 关键参数说明:#   ntrees=100     决策树数量(建议 50-500)#   max_depth=20   单棵树最大深度(过大会过拟合)#   min_samples=5  叶节点最小样本数(防止过拟合)rf_model = TrainRandomForestClassifier(
    train_samples, "class", features, output_classifier,
    ntrees=100, max_depth=20, min_samples=5
)

# 精度验证
confusion_matrix = "Confusion_Matrix"
accuracy_report = "Accuracy_Report.txt"

# 生成混淆矩阵
arcpy.sa.ClassifyRaster("Composite_Image", rf_model, "Classified_Result")
arcpy.sa.ComputeConfusionMatrix("Classified_Result", train_samples, confusion_matrix)

# 保存精度报告
with open(accuracy_report, 'w') as f:
    f.write(str(arcpy.GetMessage(0)))

模型优化技巧

决策树调优

通过交叉验证寻找最佳参数组合:

  1. 用【迭代工具】测试 ntrees=50/100/200 时的 OA 变化
  2. 观察验证集精度,当增加树数量不再提升精度时停止
  3. max_depth 通常设为 10-30,复杂场景可适当增大

特征重要性可视化

# 获取特征重要性
importance = rf_model.featureImportances

# 生成柱状图
import matplotlib.pyplot as plt
plt.barh(features, importance)
plt.savefig('Feature_Importance.png')

并行计算加速

在【地理处理选项】中设置:

  • 使用 70% 可用 CPU 核心
  • 将大区域拆分为 100×100 的瓦片

避坑指南

样本不平衡问题

  • 对少数类过采样(复制样本)
  • 在 TrainRandomForestClassifier 中设置 class_weight=’balanced’

坐标系一致性检查

运行前务必执行:

# 检查所有输入数据投影
for fc in [train_samples] + features:
    sr = arcpy.Describe(fc).spatialReference
    if sr.name != 'WGS_1984_UTM_Zone_50N':  # 改为你的目标坐标系
        arcpy.Project_management(fc, fc+"_reprojected", sr)

识别过拟合

  • 训练集精度 >> 验证集精度(差值 >15% 即可疑)
  • 特征重要性前两位占比超过 80%
  • 解决方案:增加 min_samples 或添加 L2 正则化

下一步行动建议

用你自己的数据试试:

  1. 从 Sentinel- 2 影像提取 NDVI 作为特征
  2. 对城市用地做简单 3 类分类
  3. 比较不同树数量对结果的影响

遇到问题时检查:

  • 所有输入数据坐标系是否一致?
  • 样本点是否覆盖了所有地物类型?
  • 特征变量间是否存在强相关性(可用【波段统计工具】检查)?

随机森林就像『空间分析瑞士军刀』,多实践几次你就会爱上它的稳定表现。

正文完
 0
评论(没有评论)