主成分分析 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的主要内容,如果未能解决你的问题,请参考以下文章

Matlab:数模11-主成分分析法

R语言使用psych包的principal函数对指定数据集进行主成分分析PCA进行数据降维(输入数据为相关性矩阵)计算主成分评分系数每个样本(观察)的主成分得分由主成分分数系数构建的公式得到

数学建模MATLAB应用实战系列(八十七)-主成分分析法(附MATLAB和Python代码)

主成分分析(PCA),用Matlab和SAS、SPSS结果不一样,后二者一样。但三者的特征值一样,特征向量正负不一

matlab主成分分析法是扎回事

图像重建基于matlab主成分分析图像压缩重建含Matlab源码 1173期