本文不会深究原理,如果有时间我会把原理补上,这篇文章主要是讲主成分分析的计算步骤。
在开始详细介绍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

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中的一个基(亦称基底)。
一个向量空间的基有很多,但每个基所含向量个数却是个定数。
例如

上图的一组基是
(
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应该怎么表示?

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.5−0.50.50.5][32]=[2.5−0.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...pram⎦⎥⎥⎤r×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(xi−xˉ)(yi−yˉ)
也可以写成:
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[(x−E[x])(y−E[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=⎣⎡−1−41130002⎦⎤的特征值和特征向量。
解:先求特征值,相当于求:
∣
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 (A−2E)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 ⇒⎣⎡−3−41110000⎦⎤x=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} ⇒⎣⎡−3−41110000∣∣∣∣∣∣000⎦⎤
⇒ [ − 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} ⇒⎣⎡−3−41110000∣∣∣∣∣∣000⎦⎤
⇒ [ 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} ⇒⎣⎡100010000∣∣∣∣∣∣000⎦⎤
⇒ 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 (A−2E)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 ⇒⎣⎡−2−41120001⎦⎤x=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} ⇒⎣⎡−2−41120001∣∣∣∣∣∣000⎦⎤
⇒ [ 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} ⇒⎣⎡100010120∣∣∣∣∣∣000⎦⎤
⇒ 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=⎣⎡−1−21⎦⎤
主成分分析的计算步骤
主成分分析的主要步骤为:
- 原始数据减去平均值,使数据的均值变为0
- 计算协方差矩阵
- 计算协方差矩阵的特征值和特征向量
- 将特征值从大到小排序
- 保留最前面的k个特征向量
- 将数据转换到上述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=[0−40−21−23−11−1]的主成分
解:
可以看到原始数据是一个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′=[−1−2−10002101]
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(xi−xˉ)(yi−yˉ)
由第一步我们已经知道
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=A′A′T=51[−1−2−10002101]⎣⎢⎢⎢⎢⎡−1−1020−20011⎦⎥⎥⎥⎥⎤=[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 (C−2E)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 ⇒[−545454−54]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} ⇒[−545454−54∣∣∣∣00]
⇒ [ 1 − 1 ∣ 0 0 0 ∣ 0 ] \Rightarrow \begin{bmatrix} 1 &-1 &\big|&0 \\ 0& 0&\big|&0 \end{bmatrix} ⇒[10−10∣∣∣∣00]
⇒ x 1 − x 2 = 0 \Rightarrow x_1 -x_2= 0 ⇒x1−x2=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 (C−52E)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} ⇒[54545454∣∣∣∣00]
⇒ [ 1 1 ∣ 0 0 0 ∣ 0 ] \Rightarrow \begin{bmatrix} 1 &1 &\big|&0 \\ 0& 0&\big|&0 \end{bmatrix} ⇒[1010∣∣∣∣00]
⇒ 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=[1−1]
因为基的模都是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′=∣p1∣p1=21[111]=[2121]
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′=∣p2∣p2=21[1−1]=[21−21]
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′=[2121]
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=p1′TA′=[2121][−1−2−10002101]=[−23−21023−21]
本文介绍了PCA主成分分析的计算过程,包括数据预处理、协方差矩阵计算、特征值和特征向量求解,以及如何选择和应用特征向量进行数据转换。
2万+

被折叠的 条评论
为什么被折叠?



