线性代数——PCA主成分分析计算步骤

主成分分析

  • 线性代数概念复习
    • 向量的内积
    • 协方差矩阵
    • 实对称矩阵
    • 特征值和特征向量
  • 主成分分析的计算步骤

本文不会深究原理,如果有时间我会把原理补上,这篇文章主要是讲主成分分析的计算步骤。

在开始详细介绍PCA算法前,我们先来复习一下线性代数中几个重要的概念

线性代数概念复习

向量的内积

假设 a ⃗ = [ a 1 a 2 . . . a n ] \vec{a}=\begin{bmatrix} a_1 \\ a_2 \\ ...\\a_n \end{bmatrix} a =a1a2...an, b ⃗ = [ a 1 a 2 . . . a n ] \vec{b}=\begin{bmatrix} a_1 \\ a_2 \\ ...\\a_n \end{bmatrix} b =a1a2...an
那么
a ⃗ ⋅ b ⃗ = a 1 b 1 + a 2 b 2 + . . . + a n b n \vec{a}\cdot\vec{b}=a_1b_1+a_2b_2+...+a_nb_n a b =a1b1+a2b2+...+anbn
线性代数——PCA主成分分析计算步骤_第1张图片
a ⃗ \vec{a} a 的模记为: ∣ a ⃗ ∣ = a ⃗ ⋅ a ⃗ |\vec{a}|=\sqrt{\vec{a}\cdot \vec{a}} a =a a
a ⃗ ⋅ b ⃗ = ∣ a ⃗ ∣ ∣ b ⃗ ∣ c o s θ \vec{a}\cdot\vec{b}=|\vec{a}||\vec{b}|cos\theta a b =a b cosθ
假设 b ⃗ \vec{b} b 的模为1,即单位向量,那么 a ⃗ ⋅ b ⃗ = ∣ a ⃗ ∣ c o s θ \vec{a}\cdot\vec{b}=|\vec{a}|cos\theta a b =a cosθ,实际上,内积就是 a ⃗ \vec{a} a b ⃗ \vec{b} b 方向上的投影的长度。

如果 a ⃗ ⋅ b ⃗ = 0 \vec{a}\cdot\vec{b}=0 a b =0,表示 a ⃗ \vec{a} a b ⃗ \vec{b} b 正交,也就是线性无关。

在线性代数中,基(也称为基底)是描述、刻画向量空间的基本工具。向量空间的基是它的一个特殊的子集,基的元素称为基向量。向量空间中任意一个元素,都可以唯一地表示成基向量的线性组合。如果基中元素个数有限,就称向量空间为有限维向量空间,将元素的个数称作向量空间的维数。

向量空间V的一组向量若满足
1)线性无关
2)V中任一向量可由此向量线性表出,则称该组向量V中的一个基(亦称基底)。
一个向量空间的基有很多,但每个基所含向量个数却是个定数。

例如

线性代数——PCA主成分分析计算步骤_第2张图片
上图的一组基是 ( 1 , 0 ) (1, 0) (1,0) ( 0 , 1 ) (0, 1) (0,1),向量 a ⃗ = ( 3 , 2 ) = 3 ( 1 , 0 ) + 2 ( 0 , 1 ) \vec{a}=(3, 2) = 3(1, 0)+2(0, 1) a =(3,2)=3(1,0)+2(0,1)

假设又有一组新的基 ( 0.5 , 0.5 ) (0.5, 0.5) (0.5,0.5) ( − 0.5 , 0.5 ) (-0.5, 0.5) (0.5,0.5),那么原来的向量 a ⃗ \vec{a} a 应该怎么表示?
线性代数——PCA主成分分析计算步骤_第3张图片
a ⃗ \vec{a} a 在新的基 ( 0.5 , 0.5 ) (0.5, 0.5) (0.5,0.5)上的投影为 ( 0.5 , 0.5 ) ⋅ ( 3 , 2 ) T = 2.5 (0.5, 0.5) \cdot (3, 2)^T=2.5 (0.5,0.5)(3,2)T=2.5,在 ( 0.5 , − 0.5 ) (0.5, -0.5) (0.5,0.5)上的投影为 ( − 0.5 , 0.5 ) ⋅ ( 3 , 2 ) T = − 0.5 (-0.5, 0.5) \cdot (3, 2)^T=-0.5 (0.5,0.5)(3,2)T=0.5,所以 a ⃗ \vec{a} a 在新的基上为 ( 2.5 , − 0.5 ) (2.5, -0.5) (2.5,0.5)
也可以用矩阵计算:
[ 0.5 0.5 − 0.5 0.5 ] [ 3 2 ] = [ 2.5 − 0.5 ] \begin{bmatrix} 0.5 & 0.5 \\ -0.5 & 0.5 \end{bmatrix}\begin{bmatrix} 3\\ 2 \end{bmatrix}=\begin{bmatrix} 2.5\\ -0.5 \end{bmatrix} [0.50.50.50.5][32]=[2.50.5]
假设 [ p 1 p 2 . . . p r ] \begin{bmatrix} p_1\\ p_2\\...\\p_r \end{bmatrix} p1p2...pr是n组新的基, [ a 1 a 2 . . . a m ] \begin{bmatrix} a_1& a_2&...&a_m \end{bmatrix} [a1a2...am]是m个样本,那么m个样本在n组基表达为:
[ p 1 p 2 . . . p r ] [ a 1 a 2 . . . a m ] = [ p 1 a 1 p 1 a 2 . . . p 1 a m p 2 a 1 p 2 a 2 . . . p 2 a m . . . . . . . . . . . . p r a 1 p r a 2 . . . p r a m ] r × m \begin{bmatrix} p_1\\ p_2\\...\\p_r \end{bmatrix} \begin{bmatrix} a_1& a_2&...&a_m \end{bmatrix}= \begin{bmatrix} p_1a_1& p_1a_2&...&p_1a_m \\p_2a_1& p_2a_2&...&p_2a_m \\...& ...&...&... \\p_ra_1& p_ra_2&...&p_ra_m \end{bmatrix}_{r\times m} p1p2...pr[a1a2...am]=p1a1p2a1...pra1p1a2p2a2...pra2............p1amp2am...pramr×m

协方差矩阵

假设两个向量x和y,他们的协方差的公式为:
C o v ( x , y ) = Σ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) n Cov(x,y)=\frac{\Sigma_{i=1}^n(x_i-\bar{x})(y_i-\bar{y})}{n} Cov(x,y)=nΣi=1n(xixˉ)(yiyˉ)
也可以写成:
C o v ( x , y ) = E [ ( x − E [ x ] ) ( y − E [ y ] ) ] Cov(x,y)=E[(x-E[x])(y-E[y])] Cov(x,y)=E[(xE[x])(yE[y])]
= E [ x y ] − 2 E [ y ] E [ x ] + E [ x ] E [ y ] = E [ x y ] − E [ x ] [ y ] =E[xy]-2E[y]E[x]+E[x]E[y]=E[xy]-E[x][y] =E[xy]2E[y]E[x]+E[x]E[y]=E[xy]E[x][y]
协方差矩阵为:
C = [ C o v ( x , x ) C o v ( x , y ) C o v ( x , z ) C o v ( y , x ) C o v ( y , y ) C o v ( y , z ) C o v ( z , x ) C o v ( z , y ) C o v ( z , z ) ] C=\begin{bmatrix} Cov(x,x) & Cov(x,y) & Cov(x,z) \\ Cov(y,x) & Cov(y,y) & Cov(y,z) \\ Cov(z,x) & Cov(z,y) & Cov(z,z) \end{bmatrix} C=Cov(x,x)Cov(y,x)Cov(z,x)Cov(x,y)Cov(y,y)Cov(z,y)Cov(x,z)Cov(y,z)Cov(z,z)
其中 C o v ( x , x ) = V a r ( x ) Cov(x,x)=Var(x) Cov(x,x)=Var(x) C o v ( x , y ) = C o v ( y , x ) Cov(x,y)=Cov(y,x) Cov(x,y)=Cov(y,x)

实对称矩阵

我们可以看到,协方差矩阵是一个实对称矩阵。
1.实对称矩阵 A A A的不同特征值对应的特征向量是正交的。
2.实对称矩阵 A A A的特征值都是实数,特征向量都是实向量。
3.n阶实对称矩阵 A A A必可相似对角化,且相似对角阵上的元素即为矩阵本身特征值。

特征值和特征向量

A A A是n阶方阵,若存在数 λ \lambda λ非零向量 x x x,使得 A x = λ x Ax=\lambda x Ax=λx,则称:
λ \lambda λ A A A的一个特征值
x x x A A A是对应的 λ \lambda λ的特征向量。

因为 A x = λ x ⇒ ( A − λ E ) x = 0 Ax=\lambda x \Rightarrow (A-\lambda E)x=0 Ax=λx(AλE)x=0,因为 x x x是非零向量,所以 ∣ A − λ E ∣ = 0 |A-\lambda E|=0 AλE=0

下面直接用一个例子来说明如何求特征值和特征向量。

例:求 A = [ − 1 1 0 − 4 3 0 1 0 2 ] A=\begin{bmatrix} -1 & 1 & 0 \\ -4 & 3 & 0 \\ 1 & 0 & 2 \end{bmatrix} A=141130002的特征值和特征向量。
解:先求特征值,相当于求:
∣ A − λ E ∣ = ∣ − 1 − λ 1 0 − 4 3 − λ 0 1 0 2 − λ ∣ = ( 2 − λ ) ( λ − 1 ) 2 = 0 |A-\lambda E|=\begin{vmatrix} -1-\lambda & 1 & 0 \\ -4 & 3-\lambda & 0 \\ 1 & 0 & 2 -\lambda \end{vmatrix}=(2-\lambda)(\lambda-1)^2=0 AλE=1λ4113λ0002λ=(2λ)(λ1)2=0
所以特征值为 λ = 2 , 1 \lambda=2,1 λ=2,1

λ = 2 \lambda=2 λ=2时, ( A − 2 E ) x = 0 (A-2E)x=0 (A2E)x=0

⇒ [ − 3 1 0 − 4 1 0 1 0 0 ] x = 0 \Rightarrow \begin{bmatrix} -3 & 1 & 0 \\ -4 & 1 & 0 \\ 1 & 0 & 0 \end{bmatrix}x=0 341110000x=0

矩阵行简化阶梯型求解方程:

⇒ [ − 3 1 0 ∣ 0 − 4 1 0 ∣ 0 1 0 0 ∣ 0 ] \Rightarrow \begin{bmatrix} -3 & 1 & 0 &\big|&0 \\ -4 & 1 & 0&\big|&0 \\ 1 & 0 & 0 &\big|&0 \end{bmatrix} 341110000000

⇒ [ − 3 1 0 ∣ 0 − 4 1 0 ∣ 0 1 0 0 ∣ 0 ] \Rightarrow \begin{bmatrix} -3 & 1 & 0 &\big|&0 \\ -4 & 1 & 0&\big|&0 \\ 1 & 0 & 0 &\big|&0 \end{bmatrix} 341110000000

⇒ [ 1 0 0 ∣ 0 0 1 0 ∣ 0 0 0 0 ∣ 0 ] \Rightarrow \begin{bmatrix} 1 & 0 & 0 &\big|&0 \\ 0 & 1 & 0&\big|&0 \\ 0 & 0 & 0 &\big|&0 \end{bmatrix} 100010000000

⇒ x 1 = 0 , x 2 = 0 \Rightarrow x_1 = 0, x_2 = 0 x1=0,x2=0

得基础解系:

p 1 = [ 0 0 1 ] p_1=\begin{bmatrix} 0 \\ 0 \\ 1 \end{bmatrix} p1=001

λ = 1 \lambda=1 λ=1时, ( A − 2 E ) x = 0 (A-2E)x=0 (A2E)x=0

⇒ [ − 2 1 0 − 4 2 0 1 0 1 ] x = 0 \Rightarrow \begin{bmatrix} -2 & 1 & 0 \\ -4 & 2 & 0 \\ 1 & 0 & 1 \end{bmatrix}x=0 241120001x=0

矩阵行简化阶梯型求解方程:

⇒ [ − 2 1 0 ∣ 0 − 4 2 0 ∣ 0 1 0 1 ∣ 0 ] \Rightarrow \begin{bmatrix} -2 & 1 & 0 &\big|&0 \\ -4 & 2 & 0&\big|&0 \\ 1 & 0 & 1 &\big|&0 \end{bmatrix} 241120001000

⇒ [ 1 0 1 ∣ 0 0 1 2 ∣ 0 0 0 0 ∣ 0 ] \Rightarrow \begin{bmatrix} 1 & 0 & 1 &\big|&0 \\0 & 1 & 2&\big|&0 \\ 0 & 0 & 0 &\big|&0 \end{bmatrix} 100010120000

⇒ x 1 + x 3 = 0 , x 2 + 2 x 3 = 0 \Rightarrow x_1 +x_3= 0, x_2 +2x_3= 0 x1+x3=0,x2+2x3=0

得基础解系:

p 2 = [ − 1 − 2 1 ] p_2=\begin{bmatrix} -1 \\ -2 \\1 \end{bmatrix} p2=121

主成分分析的计算步骤

主成分分析的主要步骤为:

  1. 原始数据减去平均值,使数据的均值变为0
  2. 计算协方差矩阵
  3. 计算协方差矩阵的特征值和特征向量
  4. 将特征值从大到小排序
  5. 保留最前面的k个特征向量
  6. 将数据转换到上述k个特征向量构建的新空间中。

下面我们直接用实际例子来看主成分分析的计算步骤。

例子:求 A = [ 0 0 1 3 1 − 4 − 2 − 2 − 1 − 1 ] A=\begin{bmatrix} 0&0&1&3&1 \\ -4 &-2&-2&-1&-1\end{bmatrix} A=[0402123111]的主成分
解:

可以看到原始数据是一个2维数组,共有5个样本。

1. 原始数据减去平均值,使数据的均值变为0

第一个变量的均值为1,第二个变量的均值是-2,分别减去均值后,得到如下数据,后面的计算都会基于下面的矩阵进行计算:
A ′ = [ − 1 − 1 0 2 0 − 2 0 0 1 1 ] A'=\begin{bmatrix} -1&-1&0&2&0 \\ -2 &0&0&1&1\end{bmatrix} A=[1210002101]

2. 计算协方差矩阵

协方差的计算公式为: C o v ( x , y ) = Σ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) n Cov(x,y)=\frac{\Sigma_{i=1}^n(x_i-\bar{x})(y_i-\bar{y})}{n} Cov(x,y)=nΣi=1n(xixˉ)(yiyˉ)
由第一步我们已经知道 x ˉ = 0 , y ˉ = 0 \bar{x}=0,\bar{y}=0 xˉ=0,yˉ=0,所以: C o v ( x , y ) = Σ i = 1 n x i y i n Cov(x,y)=\frac{\Sigma_{i=1}^nx_iy_i}{n} Cov(x,y)=nΣi=1nxiyi

所以协方差矩阵 C = A ′ A ′ T = 1 5 [ − 1 − 1 0 2 0 − 2 0 0 1 1 ] [ − 1 − 2 − 1 0 0 0 2 1 0 1 ] = [ 6 5 4 5 4 5 6 5 ] C=A'A'^T=\frac{1}{5}\begin{bmatrix} -1&-1&0&2&0 \\ -2 &0&0&1&1\end{bmatrix} \begin{bmatrix} -1&-2\\ -1&0\\ 0&0\\ 2&1\\ 0&1\end{bmatrix} =\begin{bmatrix} \frac{6}{5}&\frac{4}{5}\\ \frac{4}{5}&\frac{6}{5}\\ \end{bmatrix} C=AAT=51[1210002101]1102020011=[56545456]

3. 计算协方差矩阵的特征值和特征向量

∣ C − λ E ∣ = ∣ 6 5 − λ 4 5 4 5 6 5 − λ ∣ = ( 6 5 − λ ) 2 − ( 4 5 ) 2 = ( 6 5 − λ − 4 5 ) ( 6 5 − λ + 4 5 ) = 0 |C-\lambda E|=\begin{vmatrix} \frac{6}{5}-\lambda&\frac{4}{5}\\ \frac{4}{5}&\frac{6}{5}-\lambda\\ \end{vmatrix}=(\frac{6}{5}-\lambda)^2-(\frac{4}{5})^2=(\frac{6}{5}-\lambda-\frac{4}{5})(\frac{6}{5}-\lambda+\frac{4}{5})=0 CλE=56λ545456λ=(56λ)2(54)2=(56λ54)(56λ+54)=0
所以特征值为 λ 1 = 2 , λ 2 = 2 5 \lambda_1=2,\lambda_2=\frac{2}{5} λ1=2,λ2=52

λ = 2 \lambda=2 λ=2时, ( C − 2 E ) x = 0 (C-2E)x=0 (C2E)x=0

⇒ [ − 4 5 4 5 4 5 − 4 5 ] x = 0 \Rightarrow \begin{bmatrix}- \frac{4}{5} & \frac{4}{5} \\ \frac{4}{5} & -\frac{4}{5} \end{bmatrix}x=0 [54545454]x=0

矩阵行简化阶梯型求解方程:

⇒ [ − 4 5 4 5 ∣ 0 4 5 − 4 5 ∣ 0 ] \Rightarrow \begin{bmatrix} - \frac{4}{5} & \frac{4}{5} &\big|&0 \\ \frac{4}{5} & -\frac{4}{5}&\big|&0 \end{bmatrix} [5454545400]

⇒ [ 1 − 1 ∣ 0 0 0 ∣ 0 ] \Rightarrow \begin{bmatrix} 1 &-1 &\big|&0 \\ 0& 0&\big|&0 \end{bmatrix} [101000]

⇒ x 1 − x 2 = 0 \Rightarrow x_1 -x_2= 0 x1x2=0

得基础解系:

p 1 = [ 1 1 ] p_1=\begin{bmatrix} 1 \\1 \end{bmatrix} p1=[11]

λ = 2 5 \lambda=\frac{2}{5} λ=52时, ( C − 2 5 E ) x = 0 (C-\frac{2}{5}E)x=0 (C52E)x=0

⇒ [ 4 5 4 5 4 5 4 5 ] x = 0 \Rightarrow \begin{bmatrix} \frac{4}{5} & \frac{4}{5} \\ \frac{4}{5} & \frac{4}{5} \end{bmatrix}x=0 [54545454]x=0

矩阵行简化阶梯型求解方程:

⇒ [ 4 5 4 5 ∣ 0 4 5 4 5 ∣ 0 ] \Rightarrow \begin{bmatrix} \frac{4}{5} & \frac{4}{5} &\big|&0 \\ \frac{4}{5} & \frac{4}{5}&\big|&0 \end{bmatrix} [5454545400]

⇒ [ 1 1 ∣ 0 0 0 ∣ 0 ] \Rightarrow \begin{bmatrix} 1 &1 &\big|&0 \\ 0& 0&\big|&0 \end{bmatrix} [101000]

⇒ x 1 + x 2 = 0 \Rightarrow x_1 +x_2= 0 x1+x2=0

得基础解系:

p 2 = [ 1 − 1 ] p_2=\begin{bmatrix} 1 \\-1 \end{bmatrix} p2=[11]

因为基的模都是1,所以:
p 1 ′ = p 1 ∣ p 1 ∣ = 1 2 [ 1 11 ] = [ 1 2 1 2 ] p_1'=\frac{p_1}{|p_1|}=\frac{1}{\sqrt{2}}\begin{bmatrix} 1 \\11 \end{bmatrix}=\begin{bmatrix} \frac{1}{\sqrt{2}} \\\frac{1}{\sqrt{2}} \end{bmatrix} p1=p1p1=2 1[111]=[2 12 1]
p 2 ′ = p 2 ∣ p 2 ∣ = 1 2 [ 1 − 1 ] = [ 1 2 − 1 2 ] p_2'=\frac{p_2}{|p_2|}=\frac{1}{\sqrt{2}}\begin{bmatrix} 1 \\-1 \end{bmatrix}=\begin{bmatrix} \frac{1}{\sqrt{2}} \\-\frac{1}{\sqrt{2}} \end{bmatrix} p2=p2p2=2 1[11]=[2 12 1]
4. 将特征值从大到小排序

所以特征值为 λ 1 = 2 , λ 2 = 2 5 \lambda_1=2,\lambda_2=\frac{2}{5} λ1=2,λ2=52 λ 1 > λ 2 \lambda_1>\lambda_2 λ1>λ2

5. 保留最前面的k个特征向量
在这个例子中,我们只保留一个特征向量,即 λ 1 = 2 \lambda_1=2 λ1=2对应的 p 1 ′ = [ 1 2 1 2 ] p_1'=\begin{bmatrix} \frac{1}{\sqrt{2}} \\\frac{1}{\sqrt{2}} \end{bmatrix} p1=[2 12 1]

6. 将数据转换到上述k个特征向量构建的新空间中。

数据转化为 Y = p 1 ′ T A ′ = [ 1 2 1 2 ] [ − 1 − 1 0 2 0 − 2 0 0 1 1 ] = [ − 3 2 − 1 2 0 3 2 − 1 2 ] Y=p_1'^TA'= \begin{bmatrix} \frac{1}{\sqrt{2}} &\frac{1}{\sqrt{2}} \end{bmatrix} \begin{bmatrix} -1&-1&0&2&0 \\ -2 &0&0&1&1\end{bmatrix}= \begin{bmatrix} -\frac{3}{\sqrt{2}}&-\frac{1}{\sqrt{2}}&0&\frac{3}{\sqrt{2}}&-\frac{1}{\sqrt{2}} \end{bmatrix} Y=p1TA=[2 12 1][1210002101]=[2 32 102 32 1]

你可能感兴趣的:(线性代数)