4. 数学基础(三):最优化理论与信息论
好,咱们继续往下走。前两讲我们把概率论和线性代数过了一遍,今天要聊的这两个东西——最优化理论和信息论,说实话,是雷达数据处理里最「烧脑」但也最「实用」的部分。
我个人习惯把最优化看作是「找最优解的艺术」,而信息论则是「度量不确定性的科学」。你想想看,目标关联的本质是什么?不就是从一堆乱七八糟的观测中,找出最可能属于同一个目标的那些点吗?这背后,全是优化和信息论的影子。
4.1 最小二乘估计:最朴素的优化思想
最小二乘法,我估计很多人在大学里就接触过。但说实话,真正在工程里用起来,和课本上那些推导完全是两码事。
它的核心思想很简单:让预测值和观测值的误差平方和最小。为什么是平方?不是绝对值?嗯,这里有个小故事——当年高斯就是用这个方法预测谷神星轨道的,平方的好处是数学上可导,方便求极值。
J(x) = (z - Hx)ᵀR⁻¹(z - Hx)
其中:
- z:观测向量
- H:观测矩阵
- x:状态向量
- R:观测噪声协方差矩阵
我在项目中遇到过这样一个坑:某次做多雷达数据融合,直接用普通最小二乘,结果出来的轨迹全是毛刺。后来才发现,不同雷达的测量精度不一样,必须用加权最小二乘,给精度高的雷达更大的权重。这个「权重」就是上面公式里的 R⁻¹。
4.2 极大似然估计:从数据反推参数
极大似然估计(MLE),说白了就是:给定观测数据,找一组参数,使得这组数据出现的概率最大。
你想想看,目标关联里经常要判断两个点是不是同一个目标。如果它们来自同一个目标,那么它们的运动应该符合某个运动模型。MLE就是帮我们找到最可能的那个模型参数。
举个具体的例子:假设我们观测到一组距离测量值 z₁, z₂, ..., zₙ,它们服从高斯分布 N(μ, σ²)。那么似然函数就是:
L(μ, σ²) = ∏ᵢ₌₁ⁿ (1/√(2πσ²)) · exp(-(zᵢ - μ)²/(2σ²))
取对数后求导,你会发现:μ的MLE估计就是样本均值,σ²的MLE估计就是样本方差。嗯,这个结果很直观,但背后的推导过程值得你亲手走一遍。
4.3 信息论基础:熵与互信息
聊完优化,咱们来看看信息论。很多人觉得信息论是通信领域的东西,跟雷达没关系。其实不然,目标关联里有一个经典问题:如何衡量两个传感器观测之间的「相关性」?互信息就是干这个的。
4.3.1 熵:不确定性的度量
熵的概念,最早是香农提出来的。它的物理意义很直观:一个随机变量的不确定性越大,熵就越大。
公式长这样:
H(X) = -∑ p(x) · log₂ p(x)
举个例子:一个公平的硬币,抛一次,正面和反面概率各0.5,熵是1比特。如果硬币两面都是正面,概率为1和0,熵是0——因为结果完全确定,没有任何不确定性。
在雷达数据处理中,熵可以用来衡量目标状态的不确定性。比如卡尔曼滤波的协方差矩阵,它的行列式或者迹,本质上就是一种熵的度量。
4.3.2 互信息:相关性的量化
互信息衡量的是:知道一个变量后,另一个变量的不确定性减少了多少。
I(X;Y) = H(X) - H(X|Y)
= ∑∑ p(x,y) · log₂(p(x,y)/(p(x)p(y)))
我个人觉得,互信息比相关系数更「高级」的地方在于:它能捕捉非线性关系。相关系数只能描述线性相关,但互信息可以描述任意形式的依赖关系。
4.4 知识体系总览
说了这么多,我画了一张图,帮你把今天的内容串起来:
4.5 三者之间的关系
你可能会问:最小二乘、极大似然估计、信息论,这三者到底什么关系?
我简单总结一下:
- 最小二乘是MLE在噪声服从高斯分布时的特例。换句话说,如果噪声是高斯白噪声,最小二乘解就是MLE解。
- MLE比最小二乘更通用,可以处理各种分布(比如泊松分布、指数分布)。
- 互信息可以看作是MLE的一种推广——MLE找的是最可能的参数,互信息衡量的是变量之间的依赖强度。
4.6 一个简单的代码示例
最后,给你看一段Python代码,演示如何用最小二乘做直线拟合。这段代码我在多个项目里用过,很实用:
import numpy as np
def least_squares_fit(x, y):
"""
最小二乘直线拟合
x: 自变量数组
y: 因变量数组
返回: 斜率a, 截距b
"""
n = len(x)
# 构造设计矩阵
H = np.vstack([x, np.ones(n)]).T
# 最小二乘解: (HᵀH)⁻¹Hᵀy
theta = np.linalg.inv(H.T @ H) @ H.T @ y
a, b = theta[0], theta[1]
return a, b
# 示例数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([2.1, 3.9, 6.2, 7.8, 10.1])
a, b = least_squares_fit(x, y)
print(f"拟合结果: y = {a:.2f}x + {b:.2f}")
嗯,这段代码虽然简单,但背后的思想贯穿了整个目标关联算法。你想想看,航迹关联本质上不就是找一条「最拟合」的轨迹吗?
好了,这一讲的内容就到这里。数学基础部分我们用了三讲,下一讲开始,我们正式进入目标关联的核心算法。