2014-06-09 152 views
0

我试图找出大数据集的本征值/本征向量,以便计算PCA的 。我可以计算出特征向量为2x23x3等。Matlab的本征值

的问题是,我有一个包含451x128我计算的协方差矩阵 让我从这个128x128的值的数据集。这一点,因此,如下所示:

A = [ [1, 2, 3, 
     2, 3, 1, 
     .........., 
     = 128] 
     [5, 4, 1, 
     3, 2, 1, 
     2, 1, 2, 
     .......... 
     = 128] 
     ......., 
     128] 

计算的特征值和特征向量128×128向量似乎真的很难和 需要占用大量的计算能力。但是,如果我允许A中的每个块为二维(3xN),则可以计算协方差矩阵,该矩阵将给出3x3矩阵。

我的问题是这样的:这对于求解特征值和向量是否是一个好的或合理的假设?是这样的:

A是含有128x451, 的foreach块的计算的协方差矢量, 的特征向量,像这样的2维矢量:

Eig1 = EIG(COV (A [0])) Eig2 = EIG(COV(A [1]))

这将然后给我128个特征值(每个块的128×128 VECT内部或者)..

如果这不正确,MATLAB如何处理这样的大尺寸数据?

+0

你是什么意思是“如果这是不正确”? MATLAB可以在几分之一秒内找到大方阵的特征向量和特征值。 –

+0

@AdarshChavakula嘿,我试图创建一个算法(在C++中),可以计算特征值和特征向量,而无需使用第三方软件..我可以计算一个'2x2','3x3',但是我很困惑如何计算大方矩阵。我不明白matlab如何做 - 这是否有意义? – Phorce

回答

-3

使用

[Eigenvectors, Eigenvalues] = eig(Matrix) 
0

您是否尝试过svd字()

执行奇异值分解

[U,S,V] = svd(X) 

UV是正交矩阵和S包含特征值。按照S的降序排序UV

+0

我不好,我认为这个问题很混乱 – Phorce

+0

你是什么意思混乱?顺便说一句,'svd'为451x128是相当快的,我认为。 – kkuilla

0

由于kkuilla提到,你可以像我展示在下面的示例使用原始矩阵的SVD作为基质的SVD是关系到特征值和协方差矩阵的特征向量:

A = [1 2 3; 6 5 4]; % A rectangular matrix 
X = A*A';    % The covariance matrix of A 

[V, D] = eig(X);  % Get the eigenvectors and eigenvalues of the covariance matrix 
[U,S,W] = svd(A);  % Get the singular values of the original matrix 

V是包含特征向量的矩阵,D包含特征值。现在,这种关系:

SS 牛逼〜d

ü〜Ⅴ类

至于自己的假设,我可能会误解,但我认为这是错误的。我看不出为什么块的特征值与整个矩阵的特征值有关;它们不会对应于相同的特征向量,因为特征向量的维度不匹配。我认为你的协同性会有所不同,但是我不清楚你是如何创建这些块的。

至于Matlab如何做,它确实使用了一些技巧。也许下面的链接可能是内容丰富的(虽然它可能有点老)。我相信他们使用(或使用)LAPACK和QZ因数分解来获得中间值。

https://au.mathworks.com/company/newsletters/articles/matlab-incorporates-lapack.html