何为主成分分析
主成分定义
利用正交变换对一系列可能相关的变量的观测值进行线性变换,从而投影成一系列线性不相关的值,即为主成分。
应用
在解决问题时,通过主成分分析可以在减少变量尽可能地保留主要信息,从而达到降低分析、解决问题难度的目的。
基本思想
其基本思想为将坐标轴移动到数据中央,并旋转坐标轴使数据在坐标轴上方差最大,即数据投影最为分散,从而保证更多的信息被保留下来。
P 个随机变量可以有 P 个主成分,只需按照上述思想并同时保证与之前的主成分协方差最小即可依次找出
实现 PCA 的步骤
数学基础
将数据表示为矩阵后,计算得到协方差矩阵 C。通过协方差矩阵对角化(即对角线上方差不为零,其余协方差部分为零,从而达到保留更多数据信息的目的)得到所需的 K 维基向量矩阵。然后通过矩阵乘法实现坐标变换及降维,得到变换后的数据矩阵。
实现步骤
(假设有 m 条 n 维数据)
1) 将每一条数据以列向量的形式组成 n×m 的矩阵 X
2)计算每行数据的平均值后,让每个数据减去其对应的平均值,得到新的数据矩阵 B
3)求出数据矩阵 X 的协方差矩阵
C
=
1
m
B
⋅
B
T
C= \frac {1}{m}B \cdot B^{T}
C=m1B⋅BT
4)求协方差矩阵的特征值及特征向量
5)将特征值按照从大到小的顺序排列,并取前 K 个对应的特征向量分别作为列向量组成特征向量矩阵 P
6)取
Y
=
P
⋅
X
\ Y = P \cdot X
Y=P⋅X 得到降维至 k 维的新数据矩阵
Matlab 代码实现举例
代码还不太对QAQ,还在想怎么改
X=[25 2;
5 0.8;
23 2.9;
20 3.1;
16 1.7;
12 1.1;
9 0.8;];
[a,b] = size(X);
Ave = sum(X)/a;
B = zeros(a,b);
for i = 1:b
B(:,i) = X(:,i) - Ave(i);
end
C = (1 / a) * B * B'
value = eig(C);
value = sort(value,'descend')
d = 0;
for i = 1:a
if value(i) ~= 0
d = d + 1;
end
end
P = zeros(d,d);
for i = 1:d
P(i,i) = value(i);
end
P