我必须计算Covaiance Matrix才能进行PCA,但每当我将协方差矩阵结果与matlab的协方差矩阵(使用Cov函数)进行比较时,它会给出不同的结果。
所以这意味着我的程序错了。
这是我的计划:
InputMatrix=[1 2 3; 4 5 6; 9 1 2];
Average=mean(InputMatrix);
[Rows,Columns]=size(InputMatrix);
DataNumbers=Rows*Columns;
%% Substraction
for loop_row=1:Rows
for loop_column=1:Columns
Substract_Matrix(loop_row,loop_column)=InputMatrix(loop_row,loop_column)-Average(loop_column);
end
end
%% Transpose
for loop1=1:Rows
for loop2=1:Columns
Transpose_Matrix(loop2,loop1)=Substract_Matrix(loop1,loop2);
end
end
%% Multiply
CovarianceMatrix=(Substract_Matrix*Transpose_Matrix)*1/DataNumbers;
我的程序给出的协方差矩阵输出:
1.5926 -0.0741 -1.5185
-0.0741 1.2593 -1.1852
-1.5185 -1.1852 2.7037
Matlab Cov函数给出的协方差矩阵结果
16.3333 -3.1667 -3.1667
-3.1667 4.3333 4.3333
-3.1667 4.3333 4.3333
有人可以帮我解决这个问题, 我已经问了这个问题,但没有人接听过。T_T
答案 0 :(得分:1)
你让事情变得复杂
试试这个
InputMatrix=[1 2 3; 4 5 6; 9 1 2];
ave_matrix = repmat(mean(InputMatrix),3,1)
(InputMatrix-ave_matrix)'*(InputMatrix-ave_matrix) / 2 % sample_num -1 which is 3-1
我看到你出错的地方,DataNumbers不是Rows *列 分母应为DataNumbers -1
InputMatrix=[1 2 3; 4 5 6; 9 1 2];
Average=mean(InputMatrix);
[Rows,Columns]=size(InputMatrix);
DataNumbers=Columns;
%% Substraction
for loop_row=1:Rows
for loop_column=1:Columns
Substract_Matrix(loop_row,loop_column)=InputMatrix(loop_row,loop_column)-Average(loop_column);
end
end
%% Transpose
for loop1=1:Rows
for loop2=1:Columns
Transpose_Matrix(loop2,loop1)=Substract_Matrix(loop1,loop2);
end
end
%% Multiply
CovarianceMatrix=(Transpose_Matrix*Substract_Matrix)/(DataNumbers-1);