主成分分析
主成分能反映出原始数据的大部分信息,并且将多个指标转化为较少的指标
(1) 主成分分析的计算步骤
假设有 n n n 个样本, p p p 个指标,构成 n × p n\times p n×p 的样本矩阵。
x = [ x 11 x 12 ⋯ x 1 p x 21 x 22 ⋯ x 2 p ⋮ ⋮ ⋱ ⋮ x n 1 x n 2 ⋯ x n p ] x=\left[ \begin{matrix} x_{11}&x_{12}&\dotsb&x_{1p}\\ x_{21}&x_{22}&\dotsb&x_{2p}\\ \vdots&\vdots&\ddots&\vdots\\ x_{n1}&x_{n2}&\dotsb&x_{np} \end{matrix} \right] x=⎣⎢⎢⎢⎡x11x21⋮xn1x12x22⋮xn2⋯⋯⋱⋯x1px2p⋮xnp⎦⎥⎥⎥⎤
- step 1:
- 方案一
- 按列计算均值 x ‾ j = 1 n ∑ i = 1 n x i j ( j = 1 , 2 , … , p ) \overline{x}_j=\dfrac{1}{n}\displaystyle\sum_{i=1}^nx_{ij}~~(j=1,2,\dots,p) xj=n1i=1∑nxij (j=1,2,…,p)
- 按列计算标准差 S j = ∑ i = 1 n ( x i j − x ‾ j ) n − 1 S_j=\sqrt{\dfrac{\displaystyle\sum_{i=1}^{n}(x_{ij}-\overline{x}_j)}{n-1}} Sj=n−1i=1∑n(xij−xj)
- 标准化数据 X i j = x i j − x ‾ j S j X_{ij}=\dfrac{x_{ij}-\overline{x}_j}{S_j} Xij=Sjxij−xj
X = [ X 11 X 12 ⋯ X 1 p X 21 X 22 ⋯ X 2 p ⋮ ⋮ ⋱ ⋮ X n 1 X n 2 ⋯ X n p ] = [ A 1 , A 2 , … , A p ] X=\left[ \begin{matrix} X_{11}&X_{12}&\dotsb&X_{1p}\\ X_{21}&X_{22}&\dotsb&X_{2p}\\ \vdots&\vdots&\ddots&\vdots\\ X_{n1}&X_{n2}&\dotsb&X_{np} \end{matrix} \right] =\left[ A_1,A_2,\dots,A_p\right] X=⎣⎢⎢⎢⎡X11X21⋮Xn1X12X22⋮Xn2⋯⋯⋱⋯X1pX2p⋮Xnp⎦⎥⎥⎥⎤=[A1,A2,…,Ap] - 计算标准化样本的协方差矩阵
r i j = 1 n − 1 ∑ i = 1 n ( X k i − A ‾ i ) ( X k j − A ‾ j ) = 1 n − 1 ∑ i = 1 n X k i X k j r_{ij}=\dfrac{1}{n-1}\sum_{i=1}^n(X_{ki}-\overline{A}_i)(X_{kj}-\overline{A}_j)=\dfrac{1}{n-1}\sum_{i=1}^nX_{ki}X_{kj} rij=n−11i=1∑n(Xki−Ai)(Xkj−Aj)=n−11i=1∑nXkiXkj
R = [ r 11 r 12 ⋯ r 1 p r 21 r 22 ⋯ r 2 p ⋮ ⋮ ⋱ ⋮ r p 1 r p 2 ⋯ r p p ] R=\left[ \begin{matrix} r_{11}&r_{12}&\dotsb&r_{1p}\\ r_{21}&r_{22}&\dotsb&r_{2p}\\ \vdots&\vdots&\ddots&\vdots\\ r_{p1}&r_{p2}&\dotsb&r_{pp} \end{matrix} \right] R=⎣⎢⎢⎢⎡r11r21⋮rp1r12r22⋮rp2⋯⋯⋱⋯r1pr2p⋮rpp⎦⎥⎥⎥⎤
- 按列计算均值 x ‾ j = 1 n ∑ i = 1 n x i j ( j = 1 , 2 , … , p ) \overline{x}_j=\dfrac{1}{n}\displaystyle\sum_{i=1}^nx_{ij}~~(j=1,2,\dots,p) xj=n1i=1∑nxij (j=1,2,…,p)
- 方案二
直接计算 x x x 的样本相关系数矩阵
r i j = ∑ k = 1 n ( x k i − x ‾ i ) ( x k j − x ‾ j ) ∑ k = 1 n ( x k i − x ‾ i ) 2 ∑ k = 1 n ( x k j − x ‾ j ) 2 r_{ij}=\dfrac{\displaystyle\sum_{k=1}^n(x_{ki}-\overline{x}_i)(x_{kj}-\overline{x}_j)}{\sqrt{\displaystyle\sum_{k=1}^n(x_{ki}-\overline{x}_i)^2\sum_{k=1}^n(x_{kj}-\overline{x}_j)^2}} rij=k=1∑n(xki−xi)2k=1∑n(xkj−xj)2k=1∑n(xki−xi)(xkj−xj)
- 方案一
- step 2: 计算 R R R 的特征值和特征向量
- 特征值: λ 1 ≥ λ 2 ≥ ⋯ ≥ λ p ≥ 0 \lambda_1\ge\lambda_2\ge\dots\ge\lambda_p\ge0 λ1≥λ2≥⋯≥λp≥0
- 特征向量矩阵:
A = [ a 11 a 12 ⋯ a 1 p a 21 a 22 ⋯ a 2 p ⋮ ⋮ ⋱ ⋮ a p 1 a p 2 ⋯ a p p ] A=\left[ \begin{matrix} a_{11}&a_{12}&\dotsb&a_{1p}\\ a_{21}&a_{22}&\dotsb&a_{2p}\\ \vdots&\vdots&\ddots&\vdots\\ a_{p1}&a_{p2}&\dotsb&a_{pp} \end{matrix} \right] A=⎣⎢⎢⎢⎡a11a21⋮ap1a12a22⋮ap2⋯⋯⋱⋯a1pa2p⋮app⎦⎥⎥⎥⎤
- step 3: 计算主成分贡献率以及累计贡献率
- 主成分贡献率 α = λ i ∑ k = 1 p λ k ( i = 1 , 2 , … , p ) \alpha=\dfrac{\lambda_i}{\displaystyle\sum_{k=1}^p\lambda_k}~~(i=1,2,\dots,p) α=k=1∑pλkλi (i=1,2,…,p)
- 累计贡献率
β = ∑ k = 1 i λ k ∑ k = 1 p λ k ( i = 1 , 2 , … , p ) \beta=\dfrac{\displaystyle\sum_{k=1}^i\lambda_k}{\displaystyle\sum_{k=1}^p\lambda_k}~~(i=1,2,\dots,p) β=k=1∑pλkk=1∑iλk (i=1,2,…,p)
- step 4: 写出主成分
- 选取累计贡献率超过 80 % 80\% 80% 的特征值对应的第 1 1 1 、第 2 2 2 、。。。、第 m ( m ≤ p ) m~~~(m\le p) m (m≤p) 个主成分。
- 第 i i i 个主成分, F i = a 1 i A 1 + a 2 i A 2 + ⋯ + a p i A p ( i = 1 , 2 , … , m ) F_i=a_{1i}A_1+a_{2i}A_2+\dots+a_{pi}A_p~~(i=1,2,\dots,m) Fi=a1iA1+a2iA2+⋯+apiAp (i=1,2,…,m)。注意主成分是一个 p × 1 p\times 1 p×1 的列向量。
- step 5: 分析主成分系数代表的意义 (⭐️ 决定主成分分析是否成功的关键)
对某个主成分而言,指标前面的系数越大,代表该指标对该主成分的影响越大。
主成分分析的重中之重:如何解释根据系数提取出的主成分,如果提取的主成分中有一个主成分解释不了,整个主成分分析就失败了。
(2) 主成分分析用于聚类
- 当指标个数特别多,并且指标之间存在很强的相关性时才用主成分分析的手段辅助聚类可视化。
- 当第一主成分和第二主成分的贡献率已经足够高的话,可以只取前两个主成分,这样可以用于做二维的聚类图。
- 当第一主成分和第二主成分和第三主成分的贡献率已经足够高的话,可以只取前三个主成分,这样可以用于做三维的聚类图。
(3) matlab 相关
① ① ① R = corrcoef(x)
求解样本的相关系数矩阵
② ② ② X=zscore(x);
将样本矩阵标准化,相当于 (x-mean(x))/std(x)
③ ③ ③ R = cov(X);
计算样本的协方差矩阵
④ ④ ④ [V,D] = eig(R);
计算矩阵的特征值与特征向量。
⑤ ⑤ ⑤ B=rot90(A,n)
将矩阵 B B B 逆时针旋转 90 ° × n 90°\times n 90°×n