2014-06-09 150 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