本文不会深究原理,如果有时间我会把原理补上,这篇文章主要是讲主成分分析的计算步骤。
在开始详细介绍PCA算法前,我们先来复习一下线性代数中几个重要的概念
线性代数概念复习
向量的内积
假设a=⎣⎢⎢⎡a1a2...an⎦⎥⎥⎤,b=⎣⎢⎢⎡a1a2...an⎦⎥⎥⎤
那么
a⋅b=a1b1+a2b2+...+anbn
a的模记为:∣a∣=a⋅a
a⋅b=∣a∣∣b∣cosθ
假设b的模为1,即单位向量,那么a⋅b=∣a∣cosθ,实际上,内积就是a在b方向上的投影的长度。
如果a⋅b=0,表示a和b正交,也就是线性无关。
基
在线性代数中,基(也称为基底)是描述、刻画向量空间的基本工具。向量空间的基是它的一个特殊的子集,基的元素称为基向量。向量空间中任意一个元素,都可以唯一地表示成基向量的线性组合。如果基中元素个数有限,就称向量空间为有限维向量空间,将元素的个数称作向量空间的维数。
向量空间V的一组向量若满足
1)线性无关
2)V中任一向量可由此向量线性表出,则称该组向量V中的一个基(亦称基底)。
一个向量空间的基有很多,但每个基所含向量个数却是个定数。
例如
上图的一组基是(1,0)和(0,1),向量a=(3,2)=3(1,0)+2(0,1)
假设又有一组新的基(0.5,0.5)和(−0.5,0.5),那么原来的向量a应该怎么表示?
a在新的基(0.5,0.5)上的投影为(0.5,0.5)⋅(3,2)T=2.5,在(0.5,−0.5)上的投影为(−0.5,0.5)⋅(3,2)T=−0.5,所以a在新的基上为(2.5,−0.5)
也可以用矩阵计算:
[0.5−0.50.50.5][32]=[2.5−0.5]
假设⎣⎢⎢⎡p1p2...pr⎦⎥⎥⎤是n组新的基,[a1a2...am]是m个样本,那么m个样本在n组基表达为:
⎣⎢⎢⎡p1p2...pr⎦⎥⎥⎤[a1a2...am]=⎣⎢⎢⎡p1a1p2a1...pra1p1a2p2a2...pra2............p1amp2am...pram⎦⎥⎥⎤r×m
协方差矩阵
假设两个向量x和y,他们的协方差的公式为:
Cov(x,y)=nΣi=1n(xi−xˉ)(yi−yˉ)
也可以写成:
Cov(x,y)=E[(x−E[x])(y−E[y])]
=E[xy]−2E[y]E[x]+E[x]E[y]=E[xy]−E[x][y]
协方差矩阵为:
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)⎦⎤
其中Cov(x,x)=Var(x),Cov(x,y)=Cov(y,x)
实对称矩阵
我们可以看到,协方差矩阵是一个实对称矩阵。
1.实对称矩阵A的不同特征值对应的特征向量是正交的。
2.实对称矩阵A的特征值都是实数,特征向量都是实向量。
3.n阶实对称矩阵A必可相似对角化,且相似对角阵上的元素即为矩阵本身特征值。
特征值和特征向量
设A是n阶方阵,若存在数λ和非零向量x,使得Ax=λx,则称:
λ是A的一个特征值
x是A是对应的λ的特征向量。
因为Ax=λx⇒(A−λE)x=0,因为x是非零向量,所以∣A−λE∣=0
下面直接用一个例子来说明如何求特征值和特征向量。
例:求A=⎣⎡−1−41130002⎦⎤的特征值和特征向量。
解:先求特征值,相当于求:
∣A−λE∣=∣∣∣∣∣∣−1−λ−4113−λ0002−λ∣∣∣∣∣∣=(2−λ)(λ−1)2=0
所以特征值为λ=2,1
当λ=2时,(A−2E)x=0
⇒⎣⎡−3−41110000⎦⎤x=0
矩阵行简化阶梯型求解方程:
⇒⎣⎡−3−41110000∣∣∣∣∣∣000⎦⎤
⇒⎣⎡−3−41110000∣∣∣∣∣∣000⎦⎤
⇒⎣⎡100010000∣∣∣∣∣∣000⎦⎤
⇒x1=0,x2=0
得基础解系:
p1=⎣⎡001⎦⎤
当λ=1时,(A−2E)x=0
⇒⎣⎡−2−41120001⎦⎤x=0
矩阵行简化阶梯型求解方程:
⇒⎣⎡−2−41120001∣∣∣∣∣∣000⎦⎤
⇒⎣⎡100010120∣∣∣∣∣∣000⎦⎤
⇒x1+x3=0,x2+2x3=0
得基础解系:
p2=⎣⎡−1−21⎦⎤
主成分分析的计算步骤
主成分分析的主要步骤为:
- 原始数据减去平均值,使数据的均值变为0
- 计算协方差矩阵
- 计算协方差矩阵的特征值和特征向量
- 将特征值从大到小排序
- 保留最前面的k个特征向量
- 将数据转换到上述k个特征向量构建的新空间中。
下面我们直接用实际例子来看主成分分析的计算步骤。
例子:求A=[0−40−21−23−11−1]的主成分
解:
可以看到原始数据是一个2维数组,共有5个样本。
1. 原始数据减去平均值,使数据的均值变为0
第一个变量的均值为1,第二个变量的均值是-2,分别减去均值后,得到如下数据,后面的计算都会基于下面的矩阵进行计算:
A′=[−1−2−10002101]
2. 计算协方差矩阵
协方差的计算公式为: Cov(x,y)=nΣi=1n(xi−xˉ)(yi−yˉ)
由第一步我们已经知道xˉ=0,yˉ=0,所以:Cov(x,y)=nΣi=1nxiyi
所以协方差矩阵C=A′A′T=51[−1−2−10002101]⎣⎢⎢⎢⎢⎡−1−1020−20011⎦⎥⎥⎥⎥⎤=[56545456]
3. 计算协方差矩阵的特征值和特征向量
∣C−λE∣=∣∣∣∣56−λ545456−λ∣∣∣∣=(56−λ)2−(54)2=(56−λ−54)(56−λ+54)=0
所以特征值为λ1=2,λ2=52
当λ=2时,(C−2E)x=0
⇒[−545454−54]x=0
矩阵行简化阶梯型求解方程:
⇒[−545454−54∣∣∣∣00]
⇒[10−10∣∣∣∣00]
⇒x1−x2=0
得基础解系:
p1=[11]
当λ=52时,(C−52E)x=0
⇒[54545454]x=0
矩阵行简化阶梯型求解方程:
⇒[54545454∣∣∣∣00]
⇒[1010∣∣∣∣00]
⇒x1+x2=0
得基础解系:
p2=[1−1]
因为基的模都是1,所以:
p1′=∣p1∣p1=21[111]=[2121]
p2′=∣p2∣p2=21[1−1]=[21−21]
4. 将特征值从大到小排序
所以特征值为λ1=2,λ2=52,λ1>λ2
5. 保留最前面的k个特征向量
在这个例子中,我们只保留一个特征向量,即λ1=2对应的p1′=[2121]
6. 将数据转换到上述k个特征向量构建的新空间中。
数据转化为Y=p1′TA′=[2121][−1−2−10002101]=[−23−21023−21]