数学建模-主成分分析(PCA)

本文最后更新于 2025年1月17日 中午

PCA是什么?

找新的坐标轴

  1. 去中心化
  2. 找坐标系

关键概念

协方差:

\(cov(x,y)=\dfrac{\sum^n_{i=1}(x_i-\bar x)(y_i-\bar y)}{n-1}\)

协方差矩阵:

\(\begin{aligned}C&=\begin{vmatrix}cov(x,x)&cov(x,y)\\cov(x,y)&cov(y,y)\end{vmatrix}\\&=\dfrac{1}{n-1}\begin{bmatrix}x_1&x_2&x_3&x_4\\y_1&y_2&y_3&y_4\end{bmatrix}\begin{bmatrix}x_1&y_1\\x_2&y_2\\x_3&y_3\\x_4&y_4\\\end{bmatrix}\\&=\dfrac{1}{n-1}DD^T\end{aligned}\) \[ \begin{aligned} C'&=\dfrac{1}{n-1}D'D'^T\\ &=\dfrac{1}{n-1}RSD(RSD)^T\\ &=RS\dfrac{1}{n-1}S^TR^T\\ &=RSS^TR^T\\ &=RLR^{-1}\\ L&=SS^T=\begin{bmatrix}a^2&0\\0&b^2\end{bmatrix} \end{aligned} \]

基本过程

从二维数据入手:

  1. 求出点的中心,将中心移动至坐标原点
  2. 找到一条有着最大投影点到原点距离平方和的线
  3. PC的特征值为最佳拟合线距离的平方和
  4. PC奇异值为PC的特征值的平方根

MATLAB代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function [V,S,E]=princa(X)
[m,n]=size(X); %计算矩阵的行m和列n

%-------------第一步:标准化矩阵-----------------%
mv=mean(X); %计算各变量的均值
st=std(X); %计算各变量的标准差
X=(X-repmat(mv,m,1))./repmat(st,m,1); %标准化矩阵X

%-------------第二步:计算相关系数矩阵-----------------%
% R1=X'*X/(m-1); %方法一:协方差矩阵计算公式
% R2=cov(X); %方法二:协方差矩阵计算函数
R=corrcoef(X); %方法三:相关系数矩阵函数

%-------------第三步:计算特征向量和特征值-----------------%
[V,D]=eig(R); %计算矩阵R的特征向量矩阵V和特征值矩阵D,特征值由小到大
V=(rot90(V))'; %将特征向量矩阵V从大到小排序
D=rot90(rot90(D)); %将特征值矩阵由大到小排序
E=diag(D); %将特征值矩阵转换为特征值向量

%-------------第四步:计算贡献率和累计贡献率-----------------%
ratio=0; %累计贡献率
for k=1:n
r=E(k)/sum(E); %第k主成份贡献率
ratio=ratio+r; %累计贡献率
if(ratio>=0.9) %取累计贡献率大于等于90%的主成分
break;
end
end

%-------------第五步:计算得分-----------------%
S=X*V;
end

数学建模-主成分分析(PCA)
https://meteor041.git.io/2025/01/15/数学建模-主成分分析/
作者
meteor041
发布于
2025年1月15日
许可协议