主成分分析(PCA)
**PCA (principal components analysis)**是一种非监督学习的降维方法,降维就是一种对高维度特征数据预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征(冗余和噪音),从而实现提升数据处理速度的目的。
主要思想:是将n维特征映射到 k k k(小于 n n n)维上,这k维是全新的正交特征也被称为主成分,是在原有 n n n维特征的基础上重新构造出来的 k k k维特征 (新的坐标系)。
基于特征值分解协方差矩阵实现PCA算法
输入:数据集
X
=
{
x
1
,
x
2
,
x
3
,
⋯
,
x
n
}
X=\{x_1,x_2,x_3,\cdots,x_n\}
X={x1,x2,x3,⋯,xn},目标需要降到
k
k
k维度
步骤:
1)去平均值(即去中心化),即每一位特征减去各自的平均值;
E
(
X
)
=
0
E(X)=0
E(X)=0
2)计算协方差矩阵
1
n
X
X
T
\frac{1}{n}XX^{T}
n1XXT.(注:这里除或不除样本数量
n
n
n或
n
−
1
n-1
n−1,其实对求出的特征向量没有影响);
3) 用特征值分解方法求协方差矩阵
1
n
X
X
T
\frac{1}{n}XX^{T}
n1XXT 的特征值与特征向量;
4) 对特征值从大到小排序,选择其中最大的
k
k
k个。然后将其对应的
k
k
k个特征向量分别作为行向量组成特征向量矩阵
P
P
P;
5) 将数据转换到
k
k
k个特征向量构建的新空间中,即
Y
=
P
X
Y=PX
Y=PX.
基于SVD分解协方差矩阵实现PCA算法
3) 换成用SVD的方法求解协方差矩阵的特征值和特征向量。
备注:
SVD分解
奇异值分解是一个能适用于任意矩阵的一种分解的方法,对于任意矩阵A总是存在一个奇异值分解:
A
=
U
Σ
V
T
A = UΣV^{T}
A=UΣVT
假设
A
A
A是一个
m
∗
n
m∗n
m∗n的矩阵,那么得到的
U
U
U是一个
m
∗
m
m∗m
m∗m的方阵,
U
U
U里面的正交向量被称为左奇异向量。
Σ
Σ
Σ是一个
m
∗
n
m∗n
m∗n的矩阵,
Σ
Σ
Σ除了对角线其它元素都为
0
0
0,对角线上的元素称为奇异值。
V
T
V^{T}
VT是
V
V
V的转置矩阵,是一个
n
∗
n
n*n
n∗n的矩阵,它里面的正交向量被称为右奇异值向量。而且一般来讲,我们会Σ上的值按从大到小的顺序排列。
SVD分解矩阵A的步骤:
(1) 求
A
A
T
AA^{T}
AAT的特征值和特征向量,用单位化的特征向量构成 U。
(2) 求
A
T
A
A^{T}A
ATA的特征值和特征向量,用单位化的特征向量构成 V。
(3) 将
A
A
T
AA^{T}
AAT或者
A
T
A
A^{T}A
ATA的特征值求平方根,然后构成
Σ
Σ
Σ。
特征值分解
(1) 特征值与特征向量
如果一个向量v是矩阵A的特征向量,将一定可以表示成下面的形式:
A
v
=
λ
v
Av=\lambda v
Av=λv
其中,
λ
\lambda
λ是特征向量
v
v
v对应的特征值,一个矩阵的一组特征向量是一组正交向量。
(2) 特征值分解矩阵
对于矩阵
A
A
A,有一组特征向量
v
v
v,将这组向量进行正交化单位化,就能得到一组正交单位向量。特征值分解,就是将矩阵
A
A
A分解为如下式:
A
=
Q
Σ
Q
−
1
A=QΣQ^{-1}
A=QΣQ−1
其中,
Q
Q
Q是矩阵A的特征向量组成的矩阵,
Σ
Σ
Σ则是一个对角阵,对角线上的元素就是特征值。
变种
Kernelized PCA 解决非线性问题;
Incremental PCA解决内存限制的增量;
Sparse PCA 解决稀疏数据降维。
优缺点:
优点:
1)仅仅需要以方差衡量信息量,不受数据集以外的因素影响。
2)各主成分之间正交,可消除原始数据成分间的相互影响的因素。
3)计算方法简单,主要运算是特征值分解,易于实现。
缺点:
1)主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
2)方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。