前言
之前对EOF分解只是一知片解,没搞懂其存在的意义和数学公式的推导。最近在看文献的时候又遇到了这一概念,因为理解得不是很深导致文献读起来有些困难,因此把它专门学习了一下。以下便是我的一些学习心得:
一、EOF是什么
EOF(Empirical Orthogonal Function)是一种对时空数据进行正交分解的方法,其目标是把一个随时间变化的空间场分解为:空间模态(空间结构) + 时间系数(主成分 PC),其数学形式如下:
其中:表示第
个空间模态(EOF),描述空间结构;
表示对应的时间系数(PC),描述时间变化;
为最大可能的模态数量。
EOF的核心思想是——用少数几个最重要的正交空间模态来解释数据场的主要变化。
在我实际应用EOF的时候也直接对三维空间数据进行过分解,其维度分别为(深度,纬度,经度)。不过EOF是对时空二维数据进行分解的,所以我将水平方向(纬度和经度)展开成一个维度(相当于前面说的“空间”),将垂直方向(深度)作为另一维度(相当于前面说的“时间”),再带入公式中进行计算。
二、EOF 有什么用
1. 寻找主要空间结构
EOF 从数据中提取占方差最高的空间模态。我理解的是方差越大,模态中数据差异就越大,包含的信息就越多,这个模态就越重要。
2. 实现降维
原始数据可能包含数千个网格点,而 EOF 仅需要前几个模态,就能解释 70–90% 甚至更多的方差,从而大幅减小数据维度。
3. 识别时间尺度或物理过程
空间模态配合 PC 时间序列,常能揭示某些物理机制,如海表面温度的季节振荡、风场主控结构、内潮能量传播路径等。
三、EOF 的实现流程是什么
这里有一点让我困惑很久,在我查看其他大佬分享的经验贴时,常看见特征分解和SVD(奇异值分解),第一个在考研的时候学到过,但是第二个接触的很少。我想说的是,这两个方法在解决EOF问题上是等价的,只不过是以不同的方式处理矩阵。
假设原始数据矩阵为
,行表示空间,列表示时间。
1. 特征分解方法
1.1 去除时间均值
(这一步是为了去除相干信息,主要想知道非相干信息的变化)
对每一个空间点(每一行)做时间去均值:
去均值后的矩阵记为。
1.2 构造空间协方差矩阵
其中,为
,表示空间点之间的协方差。
1.3 特征值分解
这里,为第
个 EOF 空间模态;
为该模态的特征值(其大小代表解释的方差量)
1.4 计算时间系数(主成分 PC)
这相当于计算了一个时间点的数据,此时的维度是
,把所有时间放在一起就得到:
其中,为 EOF 模态矩阵。
1.5 计算方差贡献率
用来衡量每个模态的重要性。
2. SVD实现
2.1 去除时间均值,同1.1
2.2 直接对X进行SVD
可将分解为以下三部分:
其中,-
为左奇异向量组成的正交矩阵,其列向量是单位正交向量。
-
为右奇异向量矩阵,列向量为时间方向的单位正交向量。
-
为准对角矩阵,唯一的非零元素位于对角线上。(这里要注意的是Σ为准对角矩阵,可以不是方阵)
2.3 得到空间模态和时间系数
空间模态等于左奇异向量,时间系数等于
。
这里要注意的是,此时对角线上的值为判断空间模态排序的依据,越大排名越靠前,同时也不要忘记对
和
相应的排序。
四、EOF的应用场景
EOF 在地球科学尤其是大气和海洋科学中使用极为广泛,典型应用包括:
1. 空间结构提取
如海温场的主要模态(ENSO 模态)、风场的主导模式、海面高度异常的传播路径。
2. 物理过程分析
EOF 模态往往对应某种物理机制,如内潮能量不均匀分布、涡旋活动主结构、季节变化主模态等。
3. 数据降维
常用于同化、机器学习前处理、预测模型输入压缩。
4. 噪声滤波
通过保留前几个方差贡献率高的模态,可以过滤随机噪声模态(贡献率极低)。
5. 特征构建
在深度学习或统计模型中,EOF 提供更稳定、更物理的特征。
五、实例代码
这个很好实现啦,大家GPT一下就可以了