由于任何具有
形式的矩阵是半正定的,所以S也是半正定的。数据的总方差是指S中对角线上方差的综合。一般地,一个方阵S中对角元素之和称为矩阵的迹,记作tr(S),这样
{总方差}=tr{S}
S中的元素称为xi和xj的协方差。
将特征值从大到小排序,取贡献率到90%的前k个特征。
可得到P、D
下面贴完整代码:
clc; clear all; close all; X=[2.5 2.4; 0.5 0.7; 2.2 2.9; 1.9 2.2; 3.1 3.0; 2.3 2.7; 2 1.6; 1 1.1; 1.5 1.6; 1.1 0.9;]; X=X\' % X=[74 87 84 88 74 86 69 73 64; % 85 83 83 77 69 84 74 85 84; % 83 91 89 85 87 86 83 86 85; % 69 100 82 96 84 82 97 98 76; % 97 48 89 36 46 53 88 89 97; % 59 98 93 94 98 100 79 83 61;]; % X=X\'; % X=[2 0 -1.4; % 2.2 0.2 -1.5; % 2.4 0.1 -1; % 1.9 0 -1.2;]; % X=X\'; [a,b]=size(X); M=sum(X)/a; for i=1:b B(:,i)=X(:,i)-M(i); %B=zscore(X); end S=1/(a-1)*B*B\'; [vector,value]=eig(S); vector value=diag(value) varine=sum(value); [value_sort,subscript]=sort(value,\'descend\'); value_sort; subscript; value_sort=value_sort/sum(value_sort); compare=0; sign=0; for i=1:b if compare<0.9 sign=sign+1; compare=compare+value_sort(i); end end for i=1:sign P(:,i)=vector(:,subscript(i)); end P D=zeros(sign,sign); for i=1:sign D(i,i)=value(subscript(i)); end D