使用 QR 分解查找矩阵特征向量

机器算法验证 矩阵分解 svd 线性代数
2022-02-27 13:51:55

首先,一个一般的线性代数问题:一个矩阵可以有多个(单位大小)特征向量吗?从不同的角度:不同的分解方法/算法(QR、NIPALS、SVD、Householder 等)是否有可能为同一矩阵提供不同的特征向量集?

其次,关于QR分解:Q矩阵的列是特征向量吗?如何轻松找到它们的特征值(发布 QR 分解)?

2个回答

具有 QR 分解的(基本)算法如下。

  • X由一个对称矩阵。

  • X1=X,并迭代以下内容:

  • 给定Xk, 写一个 QR 分解Xk=QkRk, 然后让Xk+1=RkQk;

  • 矩阵序列Xn收敛到某个对角矩阵D对角线上的特征值;您检索相应的特征向量作为iQi.

这是 R 中的示例代码。

# some symmetric matrix
A <- matrix( sample(1:30,16), ncol=4)
A <- A + t(A);

# initialize
X <- A;
pQ <- diag(1, dim(A)[1]);

# iterate 
for(i in 1:30)
{
  d <- qr(X);
  Q <- qr.Q(d);
  pQ <- pQ %*% Q;
  X <- qr.R(d) %*% Q;
}

现在我们看看结果

> A
     [,1] [,2] [,3] [,4]
[1,]   52   30   49   28
[2,]   30   50    8   44
[3,]   49    8   46   16
[4,]   28   44   16   22

矩阵 X 包含对角线上的特征值:

> round(X,5)
         [,1]    [,2]      [,3]     [,4]
[1,] 132.6279  0.0000   0.00000  0.00000
[2,]   0.0000 52.4423   0.00000  0.00000
[3,]   0.0000  0.0000 -11.54113  0.00000
[4,]   0.0000  0.0000   0.00000 -3.52904

所有 Q 的乘积包含特征向量:

> round(pQ,5)
        [,1]     [,2]     [,3]     [,4]
[1,] 0.60946 -0.29992 -0.09988 -0.72707
[2,] 0.48785  0.65200  0.57725  0.06069
[3,] 0.46658 -0.60196  0.22156  0.60898
[4,] 0.41577  0.35013 -0.77956  0.31117

我们可以比较一下结果eigen(A)

> eigen(A)
$values
[1] 132.627875  52.442300  -3.529045 -11.541131

$vectors
           [,1]       [,2]        [,3]        [,4]
[1,] -0.6094595 -0.2999194  0.72707077  0.09987744
[2,] -0.4878528  0.6519967 -0.06068999 -0.57724915
[3,] -0.4665778 -0.6019623 -0.60897966 -0.22156327
[4,] -0.4157690  0.3501285 -0.31117293  0.77956246

有很多改进的空间,但基本上就在这里。我曾经读过很多关于这个主题的论文,但我的记忆力很差:(

请注意,由于您的问题是执行 PCA,因此您会在 Internet 上轻松找到许多 PCA 程序,您可能更愿意自己做而不是自己编程。

抱歉有点晚了,但我认为仍有基本答案的空间。

首先,一个一般的线性代数问题:一个矩阵可以有多个(单位大小)特征向量吗?

如果特征值不同,则答案为“否”。如果有重复的特征值,那么对于这些​​特征值,特征向量不是不同的(但任何与唯一特征值对应的特征向量仍然是不同的)。

例如,如果您正在查看具有 iid 高斯条目的矩阵,那么除非有一些浮点侥幸,否则它不会有重复的特征值,因此特征向量将是唯一确定的。

第二,关于QR分解:Q矩阵的列是特征向量吗?如何轻松找到它们的特征值(发布 QR 分解)?

QR 不会给你这个,但排名显示 QR (RRQR) 会,并且有已知的错误界限。您不应该自己实现 QR 或 RRQR,因为有优秀的代码,这是数值线性代数研究的主要课题。(大问题:稳定性以及利用内存和通信使其高效)

有关 RRQR 给出特征值界限的参考,请尝试TF Chan 和 PC Hansen的一些揭示 QR 分解的秩应用(1992)。

另外,请注意QR FactorizationQR Algorithm的区别另一个答案显示的 QR 算法在每一步都使用 QR 分解,因此得名,但除此之外它们是不同的算法。您询问了 QR 分解/分解,并通过 QR 算法得到了答案。

在维基百科上,查看“QR_algorithm”与“QR_decomposition”的比较