简介
通常来说,数据是机器学习应用中大部分性能提升的驱动因素,有时数据会很复杂,数据越复杂会导致很难理解哪部分数据特征在实际应用中很重要。因此,降维是一种帮助我们更好地宏观理解数据的技术,它减少了数据集的特征数量,因此我们只剩下最重要的数据集特征。
主成分分析是一种用于降维的技术,通过它,我们可以直接减少特征的数量,从而缩小重要特征的范围并节省计算量。如下图所示,数据从1000个点的三维空间转换为100个点的二维空间,计算节省了10倍。因此,PCA不仅可以减少特征数量,还可以节省计算量,加快算法的训练和测试时间。
基本思想
PCA是无监督的、基于方差的。基本思想是将原有的多个特征转化为几个代表性好的综合特征,这几个综合特征能反映原有特征的大部分信息,且各个特征保持独立。如果提取的特征分布很紧密,模型很难将其分开,如果特征分布比较离散,则容易分开,那么怎么判断数据的离散程度呢?即方差,数据越离散,方差就越大,PCA要做的就是寻找一个坐标轴,使得数据在该坐标轴上离散度最高,这样达到降维的效果,因此将原有的多个特征转化为几个代表性好的综合特征。
举个栗子
概念看起来比较枯燥,举几个例子感受下PCA的降维打击~
下面是用PCA将二维数据(平面)转换为一维数据(数轴)。
下面是用PCA将五维数据转换为二维数据。
以二维数据转换为一维数据为例,这种方向的线会有很多,如下图仅仅展示两种有向线(红色和绿色),那到底选择哪一条线才能尽可能保留最多的原始信息呢?直观上看法:希望投影后的投影值尽可能分散,即方差越大越好,显然,绿色的分散程度高。那么,我们如何从“数学”的角度更精确地去说明呢?接下来继续说明~
PCA原理
基础概念
首先回顾下线性代数基本概念。
向量:有方向、大小,起始点为原点,一般用箭头表示。
内积
两个向量
A
⃗
=
[
a
1
,
a
2
,
⋯
,
a
n
]
和
B
⃗
=
[
b
1
,
b
2
,
⋯
,
b
n
]
内
积
为
:
A
⃗
⋅
B
⃗
=
∑
i
=
1
n
a
i
b
i
=
a
1
b
1
+
a
2
b
2
+
⋯
+
a
n
b
n
\vec{A}=[a_1, a_2, \cdots, a_n]和\vec{B}=[b_1, b_2, \cdots, b_n]内积为:\\ \vec{A}\cdot \vec{B} = \sum_{i=1}^n a_ib_i = a_1b_1 + a_2b_2 + \cdots + a_nb_n
A=[a1,a2,⋯,an]和B=[b1,b2,⋯,bn]内积为:A⋅B=i=1∑naibi=a1b1+a2b2+⋯+anbn
几何定义为:
A
⃗
⋅
B
⃗
=
∣
a
⃗
∣
∣
b
⃗
∣
cos
θ
\vec{A} \cdot \vec{B} = |\vec{a}| \, |\vec{b}| \cos \theta \;
A⋅B=∣a∣∣b∣cosθ
几何意义:向量A与向量B的内积值等于向量A向向量B所在直线投影的矢量长度乘以向量B的模,如下图所示。
基变换
向
量
(
3
,
2
)
=
x
(
1
,
0
)
T
+
y
(
0
,
1
)
T
其
中
,
x
=
3
,
y
=
2
向量(3,2)=x(1,0)^T+y(0,1)^T\\ 其中,x=3,y=2
向量(3,2)=x(1,0)T+y(0,1)T其中,x=3,y=2
基:(1,0)和(0,1)叫做二维空间中的一组基
基需要满足以下两个性质:
①基是正交的 (内积为0,即垂直)
②线性无关
因为坐标系中的坐标轴也满足以上两个性质,因此基可以看作是坐标系,基变换也就是坐标系变换。对于向量来说,向量本身是不变的,但在不同坐标系中的表示是不同的,即向量在不同坐标系中坐标值是不一样的。通过基变换,将得到向量在其他基上的坐标值。
方差
用来度量单个随机变量的离散程度
离散程度越大,方差就越大
协方差
方差仅仅反应的是一个变量(一维)的离散程度,到二维了,我们可以对每个维度求其离散程度,但是人类是不满足的,他们还想知道更多,想知道两个维度之间的关系。举个直观的例子:身高和体重,我们采集的数据里面有一个固有的性质,那就是身高越高的样本似乎总有着更大的体重,那么如何衡量这种关系呢?很显然,单独求两个方差是不行的。
因此,需要协方差这个概念。公式如下:
σ
(
x
,
y
)
=
1
n
−
1
∑
i
=
1
n
(
x
i
−
x
‾
)
(
y
i
−
y
‾
)
c
o
v
(
X
,
Y
)
=
E
[
(
X
−
μ
x
)
(
Y
−
μ
y
)
]
\sigma (x,y)=\frac{1}{n-1}\sum_{i=1}^{n}(x_{i}-\overline{x})(y_{i}-\overline{y})\\ \mathrm{cov}(X, Y) = \mathrm{E}\begin{bmatrix} (X- \mu_x) (Y - \mu_y) \end{bmatrix}
σ(x,y)=n−11i=1∑n(xi−x)(yi−y)cov(X,Y)=E[(X−μx)(Y−μy)]
当Cov(x, y) >0时,说明X与Y正相关。
当Cov(x, y) < 0时,说明X与Y负相关。
当Cov(x, y) = 0时,说明X与Y不相关。
综上:协方差的值如果为正值,则说明两者是正相关的 (数值越大,相关性越强),结果为负值就说明负相关的,如果为0,也是就是统计上说的“相互独立”。
协方差矩阵
对多维随机变量X=[X1,X2,X3,…,Xn]T,我们往往需要计算各维度两两之间的协方差,这样各协方差组成了一个n×n的矩阵,称为协方差矩阵。协方差矩阵是个对称矩阵,对角线上的元素是各维度上随机变量的方差。我们定义协方差矩阵为Σ,这个符号与求和∑相同,需要根据上下文区分。矩阵内的元素Σij为:
这样,这个协方差矩阵为:
协方差矩阵为一个方阵,对角线上是方差。
实对称矩阵
定义:一个n行n列的实对称矩阵一定可以找到n个单位正交特征向量E
E
=
(
e
1
,
e
2
,
.
.
.
,
e
n
)
E=(e_1,e_2,...,e_n)
E=(e1,e2,...,en)
实对称矩阵可进行对角化
E
T
C
E
=
Λ
=
(
λ
1
λ
2
⋱
λ
n
)
E^{T}CE=\Lambda =\begin{pmatrix} \lambda _1 & & & \\ & \lambda _2 & & \\ & & \ddots & \\ & & & \lambda _n \end{pmatrix}
ETCE=Λ=⎝⎜⎜⎛λ1λ2⋱λn⎠⎟⎟⎞
根据特征值从大到小,将特征向量从上到下排列
PCA思想
PCA思想:
(
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
)
\begin{pmatrix} p_1\\ p_2\\ \vdots \\ p_r \end{pmatrix}\begin{pmatrix} a_1 &a_2 &\cdots & a_m \end{pmatrix}=\begin{pmatrix} p_1a_1 &p_1a_2 &\cdots &p_1a_m \\ p_2a_1 & p_2a_2 & \cdots & p_2a_m\\ \vdots & \vdots &\ddots &\vdots \\ p_ra_1 & p_ra_2 &\cdots & p_ra_m \end{pmatrix}
⎝⎜⎜⎜⎛p1p2⋮pr⎠⎟⎟⎟⎞(a1a2⋯am)=⎝⎜⎜⎜⎛p1a1p2a1⋮pra1p1a2p2a2⋮pra2⋯⋯⋱⋯p1amp2am⋮pram⎠⎟⎟⎟⎞
以上,
基
为
:
(
p
1
p
2
⋮
p
r
)
基为:\begin{pmatrix} p_1\\ p_2\\ \vdots \\ p_r \end{pmatrix}
基为:⎝⎜⎜⎜⎛p1p2⋮pr⎠⎟⎟⎟⎞
数
据
为
:
(
a
1
a
2
⋯
a
m
)
数据为:\begin{pmatrix} a_1 &a_2 &\cdots & a_m \end{pmatrix}
数据为:(a1a2⋯am)
数
据
在
该
基
上
的
表
达
:
(
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
)
数据在该基上的表达:\begin{pmatrix} p_1a_1 &p_1a_2 &\cdots &p_1a_m \\ p_2a_1 & p_2a_2 & \cdots & p_2a_m\\ \vdots & \vdots &\ddots &\vdots \\ p_ra_1 & p_ra_2 &\cdots & p_ra_m \end{pmatrix}
数据在该基上的表达:⎝⎜⎜⎜⎛p1a1p2a1⋮pra1p1a2p2a2⋮pra2⋯⋯⋱⋯p1amp2am⋮pram⎠⎟⎟⎟⎞
因此PCA的目的就是找到合适的基。
此时需要引入协方差矩阵,
方向:如何选择这个方向(或者说基)才能尽量保留最多的原始信息?
一种直观的看法:希望投影后的投影值尽可能的分散(回到了文章开头的想法)
越分散,方差就越大。
如果单纯只选择方差最大的方向,那么后续所有的方向会和方差最大的方向接近重合。
为了让两个维度尽可能表示更多的原始信息,我们是不希望它们存在线性相关。
因此我们可以用协方差表示其相关性,即当协方差为0时,表示两个维度完全独立。
为了让协方差为0,我们只能选择第二个基时只能在与第一个基正交的方向上选择。最终选择的两个方向一定是正交的。正如下图所示。
以上都是PCA的思想,即如何找到那个合适的基。
对于一组N维向量降到k维(k>0且k<N),目标就是选择k个单位正交基,使原始数据变换到这组基上后,各维度间协方差为0,维度上的方差尽可能大。
协方差矩阵:
对角线为维度间的方差,其他元素为协方差。
因为协方差矩阵是实对称矩阵,因此可以进行协方差矩阵对角化,即除了对角线以外的其他元素化为0,并在对角线上将元素按大小从上到下进行排列。
因为要降维到k维,进行对角化后的特征向量从上到下排列组成的矩阵,取其前k行组成新的矩阵乘以原始数据矩阵X,就可以得到我们需要的降维后的数据矩阵Y。
summary
从高层次的角度来看,PCA 有三个主要步骤:
(1) 计算数据的协方差矩阵
(2) 计算这个协方差矩阵的特征值和向量
(3) 使用特征值和向量仅选择最重要的特征向量,然后将数据转换为这些向量以降低维度