2016-12-25 35 views
0

我想霍特林轉換應用於給予載體,並使實踐我自己,那爲什麼我寫了下面的MATLAB代碼hotteling轉型並沒有給期望的結果

function [Y covariance_matrix]=hotteling_trasform(X) 
% this function take X1,X2,X3,,Xn as a matrix and apply hottleing 
%transformation to get new set of vectors y1, y2,..ym so that covariance 
%matrix of matrix consiist by yi vectors are almost diagonal 
%% determine size of given matrix 
[m n]=size(X); 
%% compute mean of columns of given matrix 
means=mean(X); 
%% substract mean from given matrix 
centered=X-repmat(means,m,1); 
%% calculate covariance matrix 
covariance=(centered'*centered)/(m-1); 
%% Apply eigenvector decomposition 
[V,D]=eig(covariance); 
%% determine dimension of V 
[m1 n1]=size(V); 

%% arrange matrix so that eigenvectors are as rows,create matrix with size n1 m1 
A1=zeros(n1,m1); 
for ii=1:n1 
    A1(ii,:)=V(:,ii); 
end 
%% applying hoteling transformation 
Y=A1*centered; %% because centered matrix is original -means 
%% calculate covariance matrix 
covariance_matrix=cov(Y); 

然後我把它檢測到給定矩陣

A 

A = 

    4  6 10 
    3 10 13 
    -2 -6 -8 

和運行代碼

[Y covariance_matrix]=hotteling_trasform(A); 
covariance_matrix 

covariance_matrix = 

    8.9281 22.6780 31.6061 
    22.6780 66.5189 89.1969 
    31.6061 89.1969 120.8030 

後肯定這不是對角矩陣,所以錯在哪裏?在此先感謝

+0

你從哪裏找到你實現的算法?我認識的人看起來完全不同。 (在'for ii = 1:n1'-loop中,你只是計算'V'的轉置,這只是'V'') – flawr

+0

你能告訴我算法的確切形式嗎?關於轉置權我只是複雜:D –

+0

到目前爲止,我只知道使用奇異值分解,這可能會更穩定一些。 – flawr

回答

1

當你處理行向量而不是列,您需要在特徵值/特徵向量,decomposiiton來調整它載體。而不是Y=A1*centered你需要Y=centered*V。然後你會得到

covariance_matrix = 

    0.0000 -0.0000 0.0000 
    -0.0000 1.5644 -0.0000 
    0.0000 -0.0000 207.1022 

所以你會得到兩個非零組件這是你可以從三維空間只有三個百分點的期望。 (它們只能形成一架飛機,但不能成爲一架飛機。)

+0

在我讀過的書中,有人提到將列向量更改爲行向量,所以您的意思是首先我必須計算協方差矩陣的奇異值分解,然後將右奇異矩陣乘法到中心矩陣? –

+0

我明白了,在此先感謝 –

相關問題