数学基础:距离、范数与基函数
做径向基函数拟合,说白了就是解决一个问题:如何用已知点的信息,去推测未知点的值。这背后的数学工具,我拆成四个部分来讲。别怕,咱们一步步来。
核心思路:RBF 拟合的本质是「距离决定影响」。一个已知点对远处的影响小,对近处的影响大。这个「影响」的数学表达,就是基函数。
2.1 欧几里得距离:最直观的「远近」度量
你想想看,两个点之间怎么算距离?初中就学过——直线距离。在数学里,这就是欧几里得距离。
对于二维平面上的两个点 \( p_1=(x_1, y_1) \) 和 \( p_2=(x_2, y_2) \),距离公式是:
d = sqrt( (x1 - x2)² + (y1 - y2)² )
推广到 n 维空间,公式长这样:
d(p, q) = sqrt( Σᵢ (pᵢ - qᵢ)² ) // i 从 1 到 n
我在做三维点云重建时,经常要算几千个点之间的欧氏距离。那时候我踩过一个坑——忘记归一化坐标轴。如果 x 轴单位是米,y 轴单位是毫米,距离计算会被 y 轴完全主导。嗯,这里要注意:输入数据最好先做标准化。
| 维度 | 公式 | 常见场景 |
|---|---|---|
| 2D | √[(x₁-x₂)² + (y₁-y₂)²] | 平面插值、图像变形 |
| 3D | √[(x₁-x₂)² + (y₁-y₂)² + (z₁-z₂)²] | 三维重建、地形拟合 |
| nD | √[Σ(pᵢ-qᵢ)²] | 高维数据、机器学习特征 |
2.2 范数:距离的「官方说法」
欧氏距离在数学里有个更正式的名字——L2 范数。其实「范数」就是距离的抽象版本。我习惯这么理解:范数就是一把尺子,量的是向量有多长。
常用的几种范数:
- L1 范数(曼哈顿距离):各维度差的绝对值之和。适合稀疏数据,对异常值没那么敏感。
- L2 范数(欧氏距离):就是我们刚说的那个。最常用,几何意义最直观。
- L∞ 范数(切比雪夫距离):取各维度差的最大值。棋盘上国王走一步的距离就是它。
在 RBF 里,我们几乎只用 L2 范数。为什么?因为高斯、多二次这些基函数,天然就是为 L2 范数设计的。我曾经试过用 L1 范数代替 L2,结果拟合曲面出现了奇怪的棱角——说白了,基函数和距离度量要匹配。
我的习惯:写代码时直接用 numpy.linalg.norm 算 L2 范数。别自己手写平方开方,容易出错。
2.3 基函数类型:三种常用「影响函数」
基函数就是描述「一个点对周围影响有多大」的函数。我常用的有三种,各有各的脾气。
2.3.1 高斯基函数
公式:\(\phi(r) = e^{-(\epsilon r)^2}\)
其中 \(r\) 是距离,\(\epsilon\) 是形状参数(控制影响范围)。
特点:
- 局部影响——距离远了,影响指数级衰减
- 曲线光滑,没有突变
- 适合做局部细节丰富的曲面
我在做医学图像配准时,高斯基函数是首选。因为它只在局部起作用,不会让远处的点「串扰」过来。
2.3.2 多二次基函数
公式:\(\phi(r) = \sqrt{1 + (\epsilon r)^2}\)
特点:
- 全局影响——距离越远,影响反而增大
- 形状像喇叭口,越往外越张开
- 适合做整体趋势的拟合
说实话,我第一次用多二次函数时很困惑——为什么远处的点影响更大?后来才明白,它适合做「大范围趋势」的拟合,比如地形起伏的整体走向。
2.3.3 逆多二次基函数
公式:\(\phi(r) = \frac{1}{\sqrt{1 + (\epsilon r)^2}}\)
特点:
- 局部影响,但衰减比高斯慢
- 尾部更「胖」,过渡更平滑
- 适合做中等范围的插值
| 基函数 | 影响范围 | 光滑度 | 典型用途 |
|---|---|---|---|
| 高斯 | 局部 | 极高 | 细节拟合、图像处理 |
| 多二次 | 全局 | 高 | 趋势拟合、地形建模 |
| 逆多二次 | 中等 | 高 | 通用插值、平滑过渡 |
避坑指南:形状参数 ε 的选择很关键。ε 太大,基函数变得太尖,拟合曲面会过拟合;ε 太小,基函数太平,拟合效果像糊了一层浆糊。我一般用交叉验证来选 ε,或者用经验公式 ε = 1 / (平均最近邻距离)。
2.4 线性方程组求解:把问题算出来
有了基函数,怎么求拟合曲面的系数?答案是解一个线性方程组。
假设我们有 N 个已知点,每个点对应一个基函数。那么拟合曲面可以写成:
f(x) = Σⱼ wⱼ · φ(||x - xⱼ||) // j 从 1 到 N
其中 wⱼ 是待求的权重系数。把 N 个已知点的坐标代入,得到 N 个方程:
Φ · w = f
这里 Φ 是 N×N 的矩阵,Φ[i][j] = φ(||xᵢ - xⱼ||)。f 是已知点的函数值向量。w 就是我们要解的系数。
解这个方程组,我推荐两种方法:
- 直接法(numpy.linalg.solve):N 小于 1000 时用,又快又准。
- 迭代法(共轭梯度):N 很大时用,省内存。
我曾经处理过一个 5000 个点的拟合任务,直接法跑了一个小时还没出结果。换成共轭梯度法,五分钟搞定。所以——数据量大了,别硬算。
关键点:Φ 矩阵是对称的,而且通常是正定的(对高斯和逆多二次来说)。这意味着我们可以用 Cholesky 分解,比普通 LU 分解快一倍。
知识结构总览
下面这张图,把本章的核心逻辑串起来了。你可以把它当作一个「思维导图」来看。
本章小结
这一章的内容,说白了就是 RBF 拟合的「工具箱」:
- 距离:用欧氏距离衡量点与点的远近
- 范数:L2 范数是 RBF 的标配
- 基函数:高斯、多二次、逆多二次,各有各的适用场景
- 求解:解线性方程组,注意数据量大了要换方法
我个人觉得,理解这些基础比背公式更重要。公式忘了可以查,但「为什么选这个基函数」「为什么用这个距离度量」——这些判断力,才是做拟合的核心能力。