主成分分析(PCA)是一种降维算法,能够将多个数据指标转换为少数几个主成分,这些主成分是原始变量的线性组合,并且彼此之间互不相关,能够反映原始数据的大部分信息。
一般来说,当研究的问题涉及多个变量且变量之间存在很强的相关性时可以考虑使用主成分分析来对问题数据进行简化。
数据降维是指将高维度的数据(指标太多的数据)保留下最重要的一些特征,去除噪声和不重要的特征。当然,降维会导致信息产生一定的损失。
主成分的含义解释一般都会带有一些模糊性,不像原始变量那么清楚确切,这是变量降维过程中不得不付出的代价。因此,只有当主成分的个数远小于原始变量的个数时才使用主成分分析,否则可能弊大于利。主成分分析中如果有一个主成分解释不了,那么就可以认为主成分分析失败了。
% 首先导入原始数据矩阵
load HighK_Matrix.mat
load PbBa_Matrix.mat
%% 高钾玻璃的主成分计算部分
Sample_Count=size(HighK_Matrix,1);
Factor_Count=size(HighK_Matrix,2);
% 第一步:计算原始数据矩阵的相关系数矩阵
R=corrcoef(HighK_Matrix);
disp("相关系数矩阵为:");
disp(R);
% 第二步:计算相关系数矩阵的特征值和特征向量
[A,B]=eig(R);
% 第三步:计算各个特征值对应的贡献率以及累计贡献率
CharacteristicValues_Vector=diag(B);
CharacteristicValues_Vector=CharacteristicValues_Vector(end:-1:1);
Cum_DevotionRate=cumsum(CharacteristicValues_Vector./Factor_Count);
disp("累计贡献率为:");
disp(Cum_DevotionRate);
% figure(1);
% plot([1:14],Cum_DevotionRate);
% 第四步:筛选合适个数的主成分,并输出相应的主成分
MainFactor_Count=input("请输入需要保留的主成分个数:");
A=rot90(A);
for i=1:MainFactor_Count
disp(strcat("第",num2str(i),"个主成分的系数为:"));
disp((A(:,i))');
end
%% 铅钡玻璃的主成分计算部分
Sample_Count=size(HighK_Matrix,1);
Factor_Count=size(HighK_Matrix,2);
% 第一步:计算原始数据矩阵的相关系数矩阵
R=corrcoef(PbBa_Matrix);
disp("相关系数矩阵为:");
disp(R);
% 第二步:计算相关系数矩阵的特征值和特征向量
[A,B]=eig(R);
% 第三步:计算各个特征值对应的贡献率以及累计贡献率
CharacteristicValues_Vector=diag(B);
CharacteristicValues_Vector=CharacteristicValues_Vector(end:-1:1);
Cum_DevotionRate=cumsum(CharacteristicValues_Vector./Factor_Count);
disp("累计贡献率为:");
disp(Cum_DevotionRate);
% figure(2);
% plot([1:14],Cum_DevotionRate);
% 第四步:筛选合适个数的主成分,并输出相应的主成分
MainFactor_Count=input("请输入需要保留的主成分个数:");
A=rot90(A);
for i=1:MainFactor_Count
disp(strcat("第",num2str(i),"个主成分的系数为:"));
disp((A(:,i))');
end