共计 1861 个字符,预计需要花费 5 分钟才能阅读完成。
背景:为什么选择 SVM 进行地物分类
支持向量机(SVM)在 ArcGIS 中的应用越来越广泛,特别是在遥感影像分类领域。相比传统最大似然法,SVM 有两个突出优势:

- 擅长处理高维数据(如多光谱影像的数十个波段)
- 对小样本数据有更好的泛化能力(野外采样点往往有限)
我最近用 ArcGIS Pro 完成了一个农田识别项目,SVM 的总体精度比随机森林高了 8%,特别是在区分小麦和玉米时效果显著。
数据预处理:打好建模基础
1. 波段组合与指数计算
使用 ArcPy 处理 Landsat 影像的典型流程:
import arcpy
from arcpy.sa import *
# 设置工作空间
arcpy.env.workspace = "./input_data"
# 计算 NDVI
red_band = Raster("B4.tif")
nir_band = Raster("B5.tif")
ndvi = (nir_band - red_band) / (nir_band + red_band)
ndvi.save("./output/ndvi.tif")
2. 特征标准化
不同波段的数值范围差异巨大(如热红外波段和可见光波段),必须进行标准化:
from sklearn.preprocessing import StandardScaler
import numpy as np
# 将栅格转为数组
bands = ["B2.tif", "B3.tif", "B4.tif", "ndvi.tif"]
array_list = []
for band in bands:
raster = arcpy.RasterToNumPyArray(band)
array_list.append(raster.flatten())
X = np.column_stack(array_list)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
模型训练:关键参数解析
核函数选择经验
- 线性核(linear):适合特征数远大于样本数的情况
- 径向基核(RBF):最常用,需要调整 gamma 参数
- 多项式核(poly):适合特征间存在明确阶数关系
from sklearn.svm import SVC
# 使用 RBF 核的示例
model = SVC(kernel='rbf',
C=1.0, # 正则化参数
gamma='scale') # 核系数
model.fit(X_train, y_train)
性能优化实战技巧
解决内存不足问题
当处理大区域影像时,可以采用分块处理:
# 分块读取栅格数据
block_size = 1024 # 像素单位
for x in range(0, width, block_size):
for y in range(0, height, block_size):
# 提取当前块的数据
block = arcpy.RasterToNumPyArray(
raster,
arcpy.Point(x, y),
block_size, block_size)
# 处理当前块...
样本不平衡对策
-
类权重设置:
# 根据样本量自动调整权重 model = SVC(class_weight='balanced') -
过采样少数类(使用 imbalanced-learn 库):
from imblearn.over_sampling import SMOTE smote = SMOTE() X_res, y_res = smote.fit_resample(X, y)
模型评估与部署
精度验证指标计算
from sklearn.metrics import confusion_matrix, cohen_kappa_score
# 生成混淆矩阵
cm = confusion_matrix(y_test, y_pred)
print("混淆矩阵:\n", cm)
# 计算 Kappa 系数
kappa = cohen_kappa_score(y_test, y_pred)
print(f"Kappa 系数:{kappa:.3f}")
模型保存与复用
import joblib
# 保存模型
joblib.dump(model, 'land_use_svm.model')
# 在 ArcGIS Pro 中加载
loaded_model = joblib.load('land_use_svm.model')
思考与延伸
当模型效果稳定后,可以考虑将其部署为地理处理服务。一个可行的方案是:
1. 将训练好的模型封装为 Python 工具箱(.pyt)
2. 通过 ArcGIS Pro 发布到 ArcGIS Server
3. 设置适当的执行模式(同步 / 异步)
你是否有过将机器学习模型部署为 Web 服务的经验?欢迎在评论区分享你的实践心得!
正文完
