首先,一个一般的线性代数问题:一个矩阵可以有多个(单位大小)特征向量吗?从不同的角度:不同的分解方法/算法(QR、NIPALS、SVD、Householder 等)是否有可能为同一矩阵提供不同的特征向量集?
其次,关于QR分解:Q矩阵的列是特征向量吗?如何轻松找到它们的特征值(发布 QR 分解)?
首先,一个一般的线性代数问题:一个矩阵可以有多个(单位大小)特征向量吗?从不同的角度:不同的分解方法/算法(QR、NIPALS、SVD、Householder 等)是否有可能为同一矩阵提供不同的特征向量集?
其次,关于QR分解:Q矩阵的列是特征向量吗?如何轻松找到它们的特征值(发布 QR 分解)?
具有 QR 分解的(基本)算法如下。
让由一个对称矩阵。
让,并迭代以下内容:
给定, 写一个 QR 分解, 然后让;
矩阵序列收敛到某个对角矩阵对角线上的特征值;您检索相应的特征向量作为.
这是 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 Factorization和QR Algorithm的区别。另一个答案显示的 QR 算法在每一步都使用 QR 分解,因此得名,但除此之外它们是不同的算法。您询问了 QR 分解/分解,并通过 QR 算法得到了答案。
在维基百科上,查看“QR_algorithm”与“QR_decomposition”的比较