function [pc, score, latent, tsquare] = PCA(x); % PRINCOMP Principal Component Analysis (centered and scaled data). % [PC, SCORE, LATENT, TSQUARE] = PRINCOMP(X) takes a data matrix X and % returns the principal components in PC, the so-called Z-scores in SCORES, % the eigenvalues of the covariance matrix of X in LATENT, and Hotelling's % T-squared statistic for each data point in TSQUARE. [m,n] = size(x); % 得到矩阵的规模,m行,n列 r = min(m-1,n); % max possible rank of x % 该矩阵最大的秩不能超过列数, % 也不能超过行数减1 avg = mean(x); % 求每一列的均值,付给一个n维行向量 centerx = (x - avg(ones(m,1),:)); % x的每个元素减去该列的均值, % 使样本点集合重心与坐标原点重合 [U,latent,pc] = svd(centerx./sqrt(m-1),0); % “经济型”的奇异值分解 score = centerx*pc; % 得分矩阵即为原始矩阵乘主成分矩阵 if nargout < 3, return; end latent = diag(latent).^2; % 将奇异值矩阵转化为一个向量 if (r<n) latent = [latent(1:r); zeros(n-r,1)]; score(:,r+1:end) = 0; end if nargout < 4, return; end tmp = sqrt(diag(1./latent(1:r)))*score(:,1:r)'; tsquare = sum(tmp.*tmp)';
Principal Component Analysis
最新推荐文章于 2022-04-28 21:27:36 发布