matlab中高维数组怎么做PCA

2025-04-15 09:13:01
推荐回答(1个)
回答1:

给个程序你参考哈

X为输入矩阵

[Xrow, Xcol] = size(X); % Xrow:样本个数 Xcol:样本属性个数

%% 数据预处理,进行标准化出理,处理后均值为0方差为1
Xc = repmat(mean(X), [Xrow,1,1]); % 求原始数据的均值
Xe = repmat(std(X), [Xrow,1,1]); % 求原始数据的标准差
X0 = (X - Xc) ./ Xe; % 标准阵X0,标准化为均值0,方差1;

%% 求标准化矩阵的协方差矩阵
sigma = cov(X0);

%% 特征值分解
[V, D] = eig(sigma); % 求协方差矩阵的特征向量(V)和特征值(D)
lmda = diag(D); % 将主对角线上为特征值的对角阵变换成特征值列向量
[Dt, index] = sort(lmda, 'descend'); % 特征值按降序排列,Dt是排列后的数组,index是序号

%% 根据累积主元贡献率选取主元个数
npc = 1;
while sum(Dt(1:npc)) / sum(Dt) < 0.85
npc = npc + 1;
end

%% 计算负荷向量
P_all = V(:, index); % 全部负荷
P_pcs = P_all(:, 1:npc); % 主元负荷

%% 构建主元对角阵
Lambda = diag(Dt(1:npc));

%% 计算得分向量
t_all = X0 * P_all; % 全部得分
t_pcs = t_all(:, 1:npc); % 主元得分