PCA
主成分分析概述:
主成分分析法(PCA)通过线性变换将原始的数据转化为一组各维度上线性不相关的表示,这些线性不相关的表示就称为"主成分"。
它的目标是降低数据的维度,捕获尽可能多的数据变动。 | |
---|---|
PCA的基本原理是将原始数据投影到一个新的坐标系统上,这个新坐标系统的基向量是由数据的协方差矩阵的特征向量组成的。在这个新的坐标系统中,原始数据的大部分变异性将沿着第一个坐标(称为第一主成分)展现出来,少量的变异性将沿着第二个坐标展现(第二主成分),以此类推。 |
PCA步骤
- 数据标准化
- 计算协方差矩阵
- 求解特征值和特征向量
- 选择主成分
- 得到新的数据表示
主成分可以用于评价类问题:
根据主成分、贡献率计算综合得分并排名
- 计算综合得分并排名
代码
function [f,Vs,S]=PCA(X)
%1.标准化——消除量纲影响
Z=zscore(X);
%2.计算协方差矩阵
C=cov(Z);
%1,2可以合成一步
%C=corrcoef(Z);
%3.计算协方差矩阵的特征值和特征向量
[V,D]=eig(C);%[V,D] = eig(A) 返回特征值的对角矩阵 D 和矩阵 V,其列是对应的右特征向量,使得 A*V = V*D。
%4.将特征值降序排列,同时按照索引排列特征向量,便于后续筛选
[d,ind] = sort(diag(D),'descend');
%Ds=D(ind,ind);
Vs = V(:,ind);
%选出累计贡献率大于95%的主成分
S=0;
i=0;
while S/sum(d)<0.95
i=i+1;
S=S+d(i);
end
%输出累计贡献率
S=S/sum(d);
%输出新坐标下的值
f=Z*Vs(:,1:i);
W=100*d/sum(d);
%绘制方差贡献率的帕累托图
figure(1)
pareto(W,'threshold',1)%将 threshold 参数设置为 1,包括累积分布中的所有值。
title("方差贡献率的帕累托图")
figure(2)
%绘制排列后特征向量的方差贡献率变化图
plot(1:length(d),W,'*r:')
title('方差贡献率%')
PCA作用
PCA的作用有以下4点:
(1). 数据降维:在多维数据分析中,为了简化模型,我们经常需要降低数据的维度;
(2). 特征提取:PCA可以帮助我们发现隐藏在大量数据背后的主要特征;
(3). 去噪:PCA可以帮助我们删除数据中的噪声,因为主成分中捕获的变化通常是信号而不是噪声;
(4). 优化算法性能:某些算法在高维数据上的性能很差,但在经过PCA处理后的低维数据上性能会大大提高。