我有一个正在缓慢变化的数据集,我需要跟踪其协方差矩阵的特征向量/特征值。
我一直在使用scipy.linalg.eigh
,但它太贵了,而且它没有使用我已经有一个只是稍微不正确的分解的事实。
任何人都可以提出更好的方法来解决这个问题吗?
我有一个正在缓慢变化的数据集,我需要跟踪其协方差矩阵的特征向量/特征值。
我一直在使用scipy.linalg.eigh
,但它太贵了,而且它没有使用我已经有一个只是稍微不正确的分解的事实。
任何人都可以提出更好的方法来解决这个问题吗?
存在用于更新时间相关协方差矩阵的特征分解的特殊技术。给定一个“先验”特征值分解(比如在某个初始时间),这些递归算法降低了频谱更新的复杂度(本质上是新特征分解的成本)在哪里是矩阵的大小和是您更新的排名。
以下是一些相关的参考资料:
基于一阶扰动的数据协方差矩阵的自适应特征分解 (Champagne, IEEE TSP 42(10) 1994)
递归更新协方差矩阵的特征值分解(Yu, IEEE TSP, 39(5) 1991)
高维在线主成分分析:选择哪种算法?(卡多和德格拉斯)
一种用于更新奇异值分解的稳定且快速的算法(Gu 和 Eisenstadt,1994)
一种天真的方法是使用矩阵的特征值解决方案作为矩阵的迭代特征求解器的初始猜测. 如果您需要全光谱,则可以使用 QR,否则可以使用功率方法。然而,这并不是一种完全可靠的方法,因为矩阵的特征值不一定接近于几乎相邻的矩阵(1),尤其是在其条件不佳的情况下(2)。
极端(最大或最小)特征对(特征值和特征向量)的迭代计算可以追溯到 1966 年 [72]。1980 年,Thompson 提出了一种 LMS 型自适应算法来估计特征向量,它对应于样本协方差矩阵的最小特征值,并结合 Pisarenko 的谐波估计器提供了角度/频率的自适应跟踪算法[14]。萨卡尔等人。[73] 使用共轭梯度算法跟踪慢变信号协方差矩阵的最小特征值对应的极值特征向量的变化,证明其收敛速度比 Thompson 的 LMS 型算法快得多。这些方法仅用于跟踪单个极值和特征向量,应用有限,但后来它们被扩展为特征子空间跟踪和更新方法。1990 年,Comon 和 Golub [6] 提出了跟踪极值奇异值和奇异向量的 Lanczos 方法,该方法最初是为确定一些大而稀疏的对称特征问题而设计的常用方法[74]。
[6]: Comon, P., & Golub, GH (1990)。跟踪信号处理中的一些极端奇异值和向量。在 IEEE 处理中(第 1327-1343 页)。
[14]:宾夕法尼亚州汤普森 (1980)。一种无偏频率的自适应谱分析技术
[72]:布拉德伯里,WW 和弗莱彻,R. (1966)。求解特征问题的新迭代方法。数值数学,9(9),259-266。
[73]:Sarkar, TK, Dianat, SA, Chen, H., & Brule, JD (1986)。通过共轭梯度法进行自适应谱估计。IEEE Transactions on Acoustic, Speech, and Signal Processing, 34(2), 272–284。
[74]:Golub,GH 和 Van Load,CF(1989 年)。矩阵计算(第 2 版)。巴尔的摩:约翰霍普金斯大学出版社。
我还应该提到对称矩阵的解决方案,例如你必须解决的问题,因为你使用scipy.linalg.eigh
,有点便宜。如果您只对几个特征值感兴趣,您可能会发现您的方法也提高了速度。Arnoldi 方法经常用于这种情况。