目录
前言
在日常生活中我们在评价一些东西,或者探求某些因素对结果的影响时,往往需要考虑很多因素,既费时又费力,那么我们现在想想能否选出一些代表性的因素进行考虑呢?于是我们提出了主成分分析法
一、主成分分析法是什么?
概念:设法将原来变量重新组合成一组新的互相无关的几个综合变量,同时根据实际需要从中可以取出几个较少的综合变量尽可能多地反映原来变量的信息的统计方法叫做主成分分析或称主分量分析,也是数学上用来降维的一种方法。
二、模型原理
PCA 的核心思想是通过线性变换将原始数据映射到一个新的坐标系中,使得数据在新坐标系中的方差最大化。
三.实现步骤
假设有𝑛个样本,𝑝个指标,则可构成大小为𝑛 × 𝑝的样本矩阵𝑥:
这里所给的数据一般会很多,所以我们先新建一个脚本用来存储数据
🙌第一步:新建脚本,在右侧工作区右键新建变量
🙌第二步:按照下列操作进行
🙌第三步:利用load将前面保存的文件(输文件名)导入
load matlab_data1.mat
[n,p] = size(x); %n是样本个数,p是指标个数
1.x标准化处理
目的:确保每个特征都具有零均值和单位方差——>寻找的是数据的最大方差方向
mean()函数对每列求均值,std()求x的标准差,具体原理的大家可以自己上网搜
X =zscore(x) ;%matlab内置的标准化函数(x-mean(x)/std(x))%这里是计算的无偏估计样本的标准差
2.计算标准化样本后的协方差矩阵/样本相关系数矩阵
协方差矩阵反映了各个特征之间的相关性,使用 cov
函数计算标准化数据的协方差矩阵
R = cov(X);
3.计算R的特征值(入)和特征向量
%第三步:计算R的特征值和特征向量
%注意:R是半正定矩阵,所以其特征值不为负数
%R同时是对称矩阵,Matlab计算对称矩阵时,会将特征值按照从小到大排列
[V,D]=eig(R); % V为特征向量,D为特征值构成的对角矩阵
4.计算主成分贡献率和累计贡献率
由于我们最后是要得出主成分,所以这里我们的特征值要按从大到小的顺序排列
Lambda = diag(D) ;%diag函数用于得到一个矩阵的主对角线元素(返回的是列向量)
Lambda = Lambda(end:-1:1) ;%将Lambda反序排列——》从大到小,从最后一个数开始数到1,步长是-1
Contribute_Rate = Lambda / sum(Lambda); %归一化——计算贡献率
%计算累计贡献率,用cumsum求累加值,对矩阵的列进行累积求和,行向量同理
Cum_Contribute_Rate = cumsum(Lambda) /sum(Lambda);
disp('贡献率为:')
disp(Contribute_Rate')%对矩阵进行转置
disp('累计贡献率为:')
disp(Cum_Contribute_Rate)
disp('与特征值对应的特征向量矩阵为:')
%注意 :这里的特征向量要和特征值一一对应,之前特征值相当于要倾倒过来,所以特征向量的各列需要颠倒
% rot90函数可以让一个矩阵逆时针旋转90度,然后再转置
V =rot90(V)';
disp(V);
上述步骤中Lambda(end:-1:1)即将Lambda中的数逆序排列,变成从大到小
cumsum()函数对矩阵默认是每列累加,对行向量是每行累加
5.写出主成分
我们一般取累计贡献率超过80%的特征值所对应的第一、第二、...、第𝑚 (𝑚 ≤ 𝑝) 个主成分。
第𝑖个主成分:
对于某个主成分而言,指标前面的系数越大,代表该指标对于该主成分的影响越大
总结
总体来说《主成分分析(PCA)是一种用于数据降维的技术,它能有效减少数据的维度、去除冗余信息、降低噪声,并提高数据质量和计算效率,特别适用于处理高维数据集、数据可视化、特征选择及作为机器学习预处理步骤等场景。