主成分分析 Matlab
Posted Allen_freem
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了主成分分析 Matlab相关的知识,希望对你有一定的参考价值。
主成分分析的优缺点:
优点:化繁为简,降低了计算量。
缺点:一定程度上损失了精度。并且只能处理“线性问题”,这是一种线性降维技术。
总结:
假设我们拿到了一份数据集,有m个样本,每个样本由n个特征(变量)来描述,那么我们可以按照以下的步骤进行降维:
1、将数据集中的每个样本作为列向量,按列排列构成一个n行m列的矩阵;
2、将矩阵的每一个行向量(每个变量)都减去该行向量的均值,从而使得新行向量的均值为0,得到新的数据集矩阵X;
3、求X的协方差矩阵,并求出协方差矩阵的特征值λ和单位特征向量e;
4、按照特征值从大到小的顺序,将单位特征向量排列成矩阵,得到转换矩阵P,并按PX计算出主成分矩阵;
5、用特征值计算方差贡献率和方差累计贡献率,取方差累计贡献率超过85%的前k个主成分,或者想降至特定的k维,直接取前k个主成分。
主成分分析代码:
function [tg xs q px newdt]=pca(h) %输入只能是以分析的指标变量为列,样本变量为行的数据!
h=zscore(h); %数据标准化
r=corrcoef(h); %计算相关系数矩阵
disp('计算的相关系数矩阵如下:');
disp(r);
[x,y,z]=pcacov(r); %计算特征向量与特征值
s=zeros(size(z));
for i=1:length(z)
s(i)=sum(z(1:i));
end
disp('由上计算出相关系数矩阵的前几个特征根及其贡献率:');
disp([z,s])
tg=[z,s];
f=repmat(sign(sum(x)),size(x,1),1);
x=x.*f;
n=input('请选择前n个需要计算的主成分:\\n');
disp('由此可得选择的主成分系数分别为:');
for i=1:n
xs(i,:)=(x(:,i)');
end
newdt=h*xs';
disp('以主成分的贡献率为权重,构建主成分综合评价模型系数:');
q=((z(1:n)./100)')
w=input('是否需要进行主成分综合评价?(y or n)\\n');
if w==y
df=h*x(:,1:n);
tf=df*z(1:n)/100;
[stf,ind]=sort(tf,'descend'); %按照降序排列
disp('主成分综合评价结果排序:');
px=[ind,stf]
else
return;
end
以上是关于主成分分析 Matlab的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用psych包的principal函数对指定数据集进行主成分分析PCA进行数据降维(输入数据为相关性矩阵)计算主成分评分系数每个样本(观察)的主成分得分由主成分分数系数构建的公式得到
数学建模MATLAB应用实战系列(八十七)-主成分分析法(附MATLAB和Python代码)