跟踪 1 参数矩阵族的特征向量



我的问题是:我正在尝试通过(截断的(Karhunen-Loeve变换对随机过程进行谱分解,但我的协方差矩阵实际上是一个1参数矩阵族,我需要一种方法来估计/可视化我的随机过程如何依赖于这个参数。 为此,我需要一种方法来跟踪numpy.linalg.eigh((生成的特征向量。

为了让您了解我的问题,这里有一个示例玩具问题:假设我有一组点 {xs},以及一个协方差为 C(x,y( = 1/(1+a*(x-y(^2( 的随机过程 R,这取决于参数 a。 对于 [0,1] 范围内的网格点的随机样本和给定的 a 选择(例如,a=1(,我可以填充我的协方差矩阵并使用以下命令实现 Karhunen-Loeve 变换:

num_x = 1000
xs = numpy.array([numpy.random.uniform() for i in range(num_x)])
z=numpy.random.standard_normal(num_x)
a0=1
def cov(x,y,a=a0): return 1/(1+a*(x-y)^2)
cov_m = numpy.array(map(lambda y: map(lambda x: cov(x,y),xs),xs))
w,v=numpy.linalg.eigh(cov_m)
R=numpy.dot(v,z*w^0.5)

这将使我实现R,并在每个随机网格点xs处定义值。 然而,我需要做的是 - 对于特定的实现(这意味着我的网格 xs 和我的随机系数 z 的特定选择( - 跟踪 R 如何相对于我的协方差函数中的参数 a 变化。

如果我能符号地计算协方差矩阵并在事后指定一个,这将很容易做到。 但是,对于大型矩阵,这不是一个合理的选择。 另一种方法是找到一种方法来跟踪numpy.linalg.eigh((返回的每个特征向量。 不幸的是,numpy 似乎正在对它们进行重新排序,以便始终首先列出最小的特征值;这意味着,当我改变 a 时,特征向量被不可预测地重新排序,点积 numpy.dot(v,z*w^0.5( 不再将相同的系数分配给相同的特征向量。

有没有办法解决这个问题?

(这是来自ASKSAGE的交叉帖子。 我的实现是使用 Sage,但由于问题不是特定于 Sage,并且这里似乎有更多的活动,我想我会重新发布。 如果不接受交叉发布,我深表歉意;如果是这样,请删除它。

编辑:根据下面的对话,我看到我需要添加有关此问题性质的更多详细信息。

Karhunen-Loeve变换背后的想法是用光谱分解随机过程R(x(,如下所示:

R(x( = \sum_{i} Z_i \lambda_i^{1/2} \phi^{(i(}(x(,

其中每个Z_i都是具有标准正态分布的 I.I.D. 随机变量,每个 \phi^{(i(}(x( 是由协方差矩阵的特征向量解确定的 x 的非随机函数,每个 \lambda_i 是与 \phi^{(i(} 关联的相应特征值。

为了证明 R 对参数 a 的依赖性,我需要能够唯一地为每个 \phi^{(i(} 分配一个系数Z_i。 我如何进行此赋值并不重要,因为所有 Z 都是相同分布的,但赋值必须是唯一的,并且不能依赖于 \lambda_i 的相应值,因为这将取决于参数 a。

分析解决方案很简单:只需计算任意 a 的特征向量和特征值,通过指定我的 Z 来选择 R 的特定实现,然后观察 R 的实现如何依赖于 a。 (对于玩具模型,R 通常会随着增加而变化得更快。

这里的问题是如何以数字方式实现这一点。 Numpy 显然在计算时会打乱特征向量,因此无法唯一标记它们。 我猜唯一的方法是深入研究底层代码并专门实现某种类型的任意标记函数。

简而言之:我需要一种方法来对 numpy 产生的特征向量进行排序,该方法不依赖于相关特征值的大小。

有没有办法做到这一点?

更新:我已经设法找到了这个问题的部分答案,但我需要做更多的研究才能获得完整的答案。 看起来我将不得不为此实现自己的算法。

对于我正在考虑的矩阵类型,Lanczos 算法(对于给定的初始向量选择(是确定性的,步骤不依赖于我的参数的选择。 这给了我一个对称的三对角矩阵来求解特征值。

分而治之在这里可能行得通。 似乎我可以实现它的一个版本,该版本允许我独立于相关的特征值跟踪特征向量。 至少,"除法"部分可以以确定性的、与参数无关的方式实现,但我需要更多地了解算法的"征服"部分才能确定。

经过一番研究,我设法为这个问题提出了两个部分答案。

首先,对于没有零特征向量的实对称矩阵(可能还需要指定非退化(,生成一种算法来解决特征对问题应该是可行的,该算法以固定顺序生成特征对,而与矩阵的选择无关。 给定一个恒定的起始向量,Lanczos 算法将以确定性的方式为任意实数对称矩阵生成一个三对角矩阵。 分而治之算法的"除法"部分同样是确定性的,这意味着算法中迭代次数取决于矩阵元素值的唯一部分是"征服"部分,求解世俗方程:

1+\sum_j^m w_j^2/(d_j-\lambda(=0

因此,对于每个 2x2 块,问题归结为如何以一种实际上不依赖于原始矩阵值的方式对长期方程的两个根进行排序。

第二个部分解决方案更容易实现,但更容易失败。 回想起来,这也是显而易见的。

同一矩阵的两个不同特征向量将始终彼此正交。 因此,如果特征向量平滑地变化为单个参数 a 的函数,则:

v_i(a(.v_j(a+da( = \delta_{ij} + O(da(

因此,这给出了特征向量之间的自然映射,因为参数 a 会发生变化。

这类似于David Zwicker和jorgeca建议的测量特征向量对之间的全局距离的想法,但更容易实现。 但是,在特征向量快速变化或参数 a 变化太大的区域,这种实现很容易失败。

此外,在特征值交叉时会发生什么的问题很有趣,因为在每次这样的交叉时,系统都会退化。 然而,在跨越简并的允许特征向量集中,将有两个满足点积条件,并且可以用作跨越简并的基础,从而保持映射。

当然,这是假设将特征向量视为参数空间上的平滑连续函数是正确的,(正如 jorgeca 指出的那样(我不确定是否可以假设。

如果我理解得很好,您正在寻找矩阵 A(t( 的特征值 \lambda(t(,这些特征值由实变量 t 的连续函数给出的条目给出。

让我建议您查阅书籍:

[1] R. Bathia:矩阵分析,施普林格。第六章?

[2] T. Kato:线性算子扰动理论简介,第二章定理5.2。

[3] D. Hinrichsen, A. Pritchard: Mathematical Systems Theory, Vol. 1, Coferrary 4.1.19.

最新更新