PCA降维
PCA降维也称为主成分分析法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。
案例分析
本文将一个三维数据降维成二维的数据,同时进行可视化。
基本原理
(1)标准化
设数据矩阵
/
X
=
(
x
i
j
)
m
×
n
/
/X=\left ( x_{ij} \right ) _{m\times n}/
/X=(xij)m×n/,设数据矩阵内元素,经过指标正向化和标准化处理过后的矩阵
/
D
=
(
d
i
j
)
m
×
n
/
/D=\left ( d_{ij} \right ) _{m\times n} /
/D=(dij)m×n/
x
j
ˉ
=
1
n
∑
i
=
1
n
x
i
j
\bar{x_{j} } =\frac{1}{n}\sum_{i=1}^{n} x_{ij}
xjˉ=n1i=1∑nxij
S
j
=
∑
i
=
1
m
(
x
i
j
′
−
x
j
′
ˉ
)
n
−
1
S_{j} =\sqrt{\frac{\sum_{i=1}^{m}\left ( x_{ij}^{'}-\bar{x_{j}^{'} } \right ) }{n-1} }
Sj=n−1∑i=1m(xij′−xj′ˉ)
d
i
j
=
x
i
j
−
x
j
ˉ
S
j
d_{ij} =\frac{x_{ij}-\bar{x_{j} } }{S_{j} }
dij=Sjxij−xjˉ
(2)降维
- 计算相关系数矩阵:计算相关系数矩阵R,使用皮尔逊相关系数计算各指标间的相关系数,即列与列之间的相关系数。
- 计算R的特征值和特征向量:计算出特征值并把它们按照从大到小的顺序排列,对应的特征向量也相应排列。特征值为: / λ 1 ≥ λ 2 ≥ ⋯ λ n ≥ 0 / /\lambda _{1} \ge \lambda _{2} \ge \cdots \lambda _{n} \ge 0/ /λ1≥λ2≥⋯λn≥0/,其对应的特征向量为: / e j = ( l 1 , l 2 , ⋯ l n ) / /e_{j} =\left ( l_{1} , l_{2} ,\cdots l_{n} \right ) / /ej=(l1,l2,⋯ln)/
- 计算主成成分贡献率及累计贡献率: 设第j项指标贡献率为
/
a
j
=
λ
j
∑
j
=
1
n
λ
j
/
/a_{j} =\frac{\lambda _{j} }{\sum_{j=1}^{n} \lambda _{j}} /
/aj=∑j=1nλjλj/,设前p项指标累计贡献为
/
a
s
j
=
∑
j
=
1
p
λ
j
∑
j
=
1
n
λ
j
/
/a_{sj} =\frac{\sum_{j=1}^{p}\lambda _{j} }{\sum_{j=1}^{n} \lambda _{j}} /
/asj=∑j=1nλj∑j=1pλj/。
若前p个指标累计累计贡献率大于85%,则可以认为这p个主成分可以综合体现指标。降维后的矩阵如下: / M i j = D m n × [ l 1 , l 2 , ⋯ l p ] / /M_{ij} =D_{mn} \times \left [ l_{1},l_{2},\cdots l_{p} \right ] / /Mij=Dmn×[l1,l2,⋯lp]/。
PCA降维的Matlab代码
clc
clear
t=-4:0.05:4*pi;x=cos(t);y=sin(t);z=t;
scatter3(x,y,z,'g');
hold on
data=[x;y;z]';
data=zscore(data);
R=corr(data);
%计算特征向量和特征值
[V,D]=eig(R); %V特征向量,D特征值对角线矩阵
lam=diag(D);%取出对角线元素
%对特征值从大到小排列
[lam_sort,index]=sort(lam,'descend');
V_sort=V(:,index);
gong=lam_sort./sum(lam_sort); %贡献率
cgong=cumsum(gong); %累计贡献率
index1=2; %找到累计贡献达到85%的位置
M=data*V_sort;
M=M(:,1:index1); %这就是得到的新的累计贡献率超过85%主成分
plot(M(:,1),M(:,2),'b')
hold on
title('三维数据降为两维数据')
legend('降维前的三维数据','降维后的二维数据')
xlabel('x')
ylabel('y')
zlabel('z')