如何快速去除空间数据区域趋势:Verde Trend二维多项式趋势完全教程
如何快速去除空间数据区域趋势Verde Trend二维多项式趋势完全教程【免费下载链接】verdeProcessing and gridding spatial data, machine-learning style项目地址: https://gitcode.com/gh_mirrors/ve/verdeVerde是一个 Python 空间数据处理与网格化gridding库采用机器学习风格接口处理地形、测深、重力、磁法等空间数据。本文围绕其核心功能Trend 二维多项式趋势估计与去除展开教你如何用几行代码分离出数据的区域趋势分量得到干净的残差场——这是重力、磁法数据预处理中最常见的操作之一。为什么需要去除空间数据趋势空间数据气温、高程、重力异常等常常带有随位置缓慢变化的区域趋势。比如德州气温数据中存在从内陆到海岸的明显降温梯度重力/磁法数据中混入了区域背景场掩盖了局部异常。如果不先去除趋势插值方法如verde.Spline在处理长波长信号时效果会变差。verde.Trend正是为此设计拟合任意阶次的二维多项式再用减法把趋势剥离出来。Verde 提供的能力一览功能对应方法说明拟合趋势Trend.fit()加权最小二乘回归估计多项式系数预测趋势值Trend.predict()在任意坐标点评估多项式一步去除趋势Trend.filter()内部完成拟合→预测→求残差网格化趋势Trend.grid()将趋势输出为规则网格便于可视化提取剖面Trend.profile()沿任意路径采样趋势值核心实现位于verde/trend.py其中polynomial_power_combinations()负责生成各阶项的幂次组合。三步完成趋势去除Quick Start1. 安装 Verde通过 conda 安装最简单conda install -c conda-forge verde2. 拟合一阶二维多项式以德州气温数据集为例数据由verde.datasets.fetch_texas_wind()提供import verde as vd data vd.datasets.fetch_texas_wind() coordinates (data.longitude, data.latitude) # 拟合 1 阶线性二维多项式趋势 trend vd.Trend(degree1).fit(coordinates, data.air_temperature_c) print(trend.coef_) # 估计出的多项式系数3. 预测并求残差trend_values trend.predict(coordinates) residuals data.air_temperature_c - trend_values得到的residuals就是去除区域趋势后的局部信号。选择正确的多项式阶数degree 参数详解degree是Trend唯一的构造参数决定了拟合多项式的阶数degree0常数项等价于估计数据平均值degree1线性趋势f(e, n) c0 c1·e c2·n3 个系数degree2增加二次项共 6 个系数可描述弯曲的背景场阶数越高多项式越灵活但过拟合风险越大——新手建议从 1 或 2 开始尝试。内部原理Verde 构造雅可比设计矩阵后用加权最小二乘求解系数并对特征做了标准化处理保证数值稳定。一步到位Trend.filter 方法如果你觉得拟合 预测 求残差三步太繁琐可以直接调用filter# 返回 (坐标, 残差, 权重)这里只取残差 _, residuals, _ vd.Trend(degree1).filter(coordinates, data.air_temperature_c)filter是 Verde 统一网格器接口的一部分与Spline、Neighbors等类保持一致的风格方便写链式流程。稳健拟合用权重处理离群值空间数据中常混有野值。fit接受weights参数通常取不确定度平方的倒数可以给可疑点降权import numpy as np weights np.ones_like(data_values) weights[outlier_index] 1e-10 # 大幅降低离群点权重 trend vd.Trend(degree1).fit(coordinates, data_values, weights)Verde 还提供verde.variance_to_weights()工具函数可直接由方差数组换算权重。这样即使数据中存在极端异常点拟合出的趋势系数依然稳健。实战案例去除德州气温数据的地-海趋势德州样本气温数据中有一个明显的空间梯度内陆热、海岸冷。用Trend(degree1)拟合后原始数据散点图呈现斜向色带趋势分量是一张平滑的斜面残差图的直方图分布更集中说明区域趋势已被有效剥离。完整的可运行示例代码可参考仓库中的两份教程脚本教程版doc/tutorials_src/trends.py含趋势图与残差图绘制示例库版doc/gallery_src/trend.py含原始数据、趋势、残差与分布直方图四联图运行后你会看到趋势分量、残差场以及原始数据 vs 残差的直方图对比——趋势去除效果的直观检验方式就是直方图是否更窄、更接近零均值。常见坑与使用建议坐标系要一致fit和predict传入的坐标必须同坐标系推荐投影坐标而非经纬度避免高纬度处失真。阶数宁低勿高先用 degree1 看残差直方图若仍有明显弯曲再升到 2阶数过高会把局部信号吞进趋势里。fit 后区域自动记录fit会把数据边界存入region_属性作为grid()/scatter()的默认区域省去手动传参。趋势 ≠ 插值Trend只能描述低频背景。去除趋势后如需在规则网格上重建局部场建议接verde.Spline或verde.KNeighbors做网格化。总结场景推荐做法只想快速去掉大背景vd.Trend(degree1).filter(coordinates, data)需要复用趋势模型fitpredict两步式数据含野值传weights降权配合variance_to_weights去除趋势后建网格Trend求残差 →Spline/Neighbors插值Verde 用一套类 scikit-learn 的接口fit/predict/filter/grid让估计并去除空间数据区域趋势这件事既简单又可控——这正是它被称为机器学习风格空间数据处理库的原因。【免费下载链接】verdeProcessing and gridding spatial data, machine-learning style项目地址: https://gitcode.com/gh_mirrors/ve/verde创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考