原始数据通常具有较高的维数导致维数灾难,通过降维(Dimensionality reduction)可以消除数据冗余与数据噪声,降低算法的计算开销,使得数据更加易用,结果更加易懂。
1. 主成分分析
主成分分析(PCA,Principal Component Analysis)将数据从原来的坐标系转换到新的坐标系,新坐标系的选择由数据本身决定。
1.1 问题定义
n n n维正交空间中,坐标系 W n = { w 1 , w 2 , . . . , w n } W_n=\{w_1,w_2,...,w_n\} Wn={w1,w2,...,wn},其中 w w w是标准正交基,即 ∣ ∣ w ∣ ∣ 2 = 1 , w i T w j = 0 ||w||_2=1, w_i^Tw_j=0 ∣∣w∣∣2=1,wiTwj=0。
m m m个样本数据 ( x ( 1 ) , x ( 2 ) , . . . , x ( m ) ) , ∑ i = 1 m x ( i ) = 0 (\boldsymbol x^{(1)},\boldsymbol x^{(2)},...,\boldsymbol x^{(m)}),\sum\limits_{i=1}^{m}x^{(i)}=0 (x(1),x(2),...,x(m)),i=1∑mx(i)=0(已中心化)。
其中 x ( i ) = ( x 1 ( i ) , x 2 ( i ) , . . . , x n ( i ) ) T , i = 1 , 2 , . . . , m \boldsymbol x^{(i)} = (x_1^{(i)}, x_2^{(i)}, ...,x_n^{(i)})^{T},i={1,2,...,m} x(i)=(x1(i),x2(i),...,xn(i))T,i=1,2,...,m
将 m m m个数据的维度从 n n n维降到 n ′ n' n′维(通常由用户指定),新的坐标系 W = { w 1 , w 2 , . . . , w n ′ } W = \{w_1,w_2,...,w_{n'}\} W={w1,w2,...,wn′},
样本点
x
(
i
)
\boldsymbol x^{(i)}
x(i)在新的
n
′
n'
n′维坐标系中投影:
z
(
i
)
=
(
z
1
(
i
)
,
z
2
(
i
)
,
.
.
.
,
z
n
′
(
i
)
)
T
,
i
=
1
,
2
,
.
.
.
,
m
\boldsymbol z^{(i)} = (z_1^{(i)}, z_2^{(i)},...,z_{n'}^{(i)})^T, \;\; i={1,2,...,m}
z(i)=(z1(i),z2(i),...,zn′(i))T,i=1,2,...,m其中
z
j
(
i
)
=
w
j
T
x
(
i
)
,
i
=
1
,
2
,
.
.
.
,
m
,
j
=
1
,
2
,
.
.
.
,
n
′
z_j^{(i)} = w_j^T \boldsymbol x^{(i)},\;\; i={1,2,...,m}, j={1,2,...,n'}
zj(i)=wjTx(i),i=1,2,...,m,j=1,2,...,n′
是
x
i
\boldsymbol x^{i}
xi在低维坐标系中第
j
j
j维的坐标。
使用
z
i
\boldsymbol z^{i}
zi恢复原始数据
x
i
\boldsymbol x_{i}
xi,则得到的恢复数据
x
‾
(
i
)
=
∑
j
=
1
n
′
z
j
(
i
)
w
j
=
W
z
(
i
)
\overline{\boldsymbol x}^{(i)} = \sum\limits_{j=1}^{n'}z_j^{(i)}w_j = Wz^{(i)}
x(i)=j=1∑n′zj(i)wj=Wz(i)
1.2 优化目标
降维相当于使用一个超平面对样本进行表达,该超平面具有以下性质
- 最近重构性:样本点到这个超平面距离足够近
- 最大可分性:样本点在这个超平面上的投影尽可能分开
(1)基于最小投影距离
希望
m
m
m个
n
′
n'
n′维的数据集尽可能的代表原始数据集,即数据从
n
n
n维降到
n
′
n'
n′维的损失尽可能小,优化目标为
min
∑
i
=
1
m
∣
∣
x
‾
(
i
)
−
x
(
i
)
∣
∣
2
2
\min \sum\limits_{i=1}^{m}||\overline{\boldsymbol x}^{(i)} - \boldsymbol x^{(i)}||_2^2
mini=1∑m∣∣x(i)−x(i)∣∣22
∑
i
=
1
m
∣
∣
x
‾
(
i
)
−
x
(
i
)
∣
∣
2
2
=
∑
i
=
1
m
∣
∣
W
z
(
i
)
−
x
(
i
)
∣
∣
2
2
=
−
t
r
(
W
T
X
X
T
W
)
+
∑
i
=
1
m
x
(
i
)
T
x
(
i
)
\begin{aligned} \sum\limits_{i=1}^{m}||\overline{\boldsymbol x}^{(i)} - \boldsymbol x^{(i)}||_2^2 & = \sum\limits_{i=1}^{m}|| W\boldsymbol z^{(i)} - \boldsymbol x^{(i)}||_2^2 \\ & = -tr( W^TXX^TW) + \sum\limits_{i=1}^{m} \boldsymbol x^{(i)T}\boldsymbol x^{(i)} \end{aligned}
i=1∑m∣∣x(i)−x(i)∣∣22=i=1∑m∣∣Wz(i)−x(i)∣∣22=−tr(WTXXTW)+i=1∑mx(i)Tx(i) 由于
∑
i
=
1
m
x
(
i
)
x
(
i
)
T
\sum\limits_{i=1}^{m}\boldsymbol x^{(i)}\boldsymbol x^{(i)T}
i=1∑mx(i)x(i)T是数据集的协方差矩阵,为常量,优化目标等价于:
min
W
−
t
r
(
W
T
X
X
T
W
)
s
.
t
.
W
T
W
=
I
\begin{aligned}\min_{W}\; & -tr( W^TXX^TW) \\ &s.t. \;\; W^TW=I \end{aligned}
Wmin−tr(WTXXTW)s.t.WTW=I
(2)基于最大投影方差
对于任意一个样本
x
(
i
)
\boldsymbol x^{(i)}
x(i),在新的坐标系中的投影为
W
T
x
(
i
)
W^T \boldsymbol x^{(i)}
WTx(i),在新坐标系中的投影方差为
W
T
x
(
i
)
x
(
i
)
T
W
W^T\boldsymbol x^{(i)} \boldsymbol x^{(i)T}W
WTx(i)x(i)TW,
要使所有的样本的投影方差和最大,也就是最大化
∑
i
=
1
m
W
T
x
(
i
)
x
(
i
)
T
W
\sum\limits_{i=1}^{m}W^Tx^{(i)}x^{(i)T}W
i=1∑mWTx(i)x(i)TW的迹,即:
max
W
t
r
(
W
T
X
X
T
W
)
s
.
t
.
W
T
W
=
I
\begin{aligned}\max_{W}\; & tr( W^TXX^TW) \\ &s.t. \;\; W^TW=I \end{aligned}
Wmaxtr(WTXXTW)s.t.WTW=I
可以看出最近重构性等价于最大可分性。
1.3 问题求解
使用拉格朗日乘子法,引入拉格朗日函数
J
(
W
)
=
−
t
r
(
W
T
X
X
T
W
+
λ
(
W
T
W
−
I
)
)
J(W) = -tr( W^TXX^TW + \lambda(W^TW-I))
J(W)=−tr(WTXXTW+λ(WTW−I))
对
W
W
W求导,令导数等于0得,
X
X
T
W
=
λ
W
XX^TW=\lambda W
XXTW=λW
W W W为 X X T XX^T XXT的 n ′ n' n′个特征向量组成的矩阵,而 λ \lambda λ为 X X T XX^T XXT的若干特征值组成的矩阵,特征值在主对角线上,其余位置为0。将数据集从 n n n维降到 n ′ n' n′维时,需要找到最大的 n ′ n' n′个特征值对应的特征向量。
对协方差矩阵
X
X
T
XX^T
XXT进行特征值分解,将求得的特征值排序:
λ
1
≥
λ
2
≥
.
.
.
≥
λ
n
\lambda_1 \geq \lambda_2 \geq ... \geq \lambda_n
λ1≥λ2≥...≥λn取前
n
′
n'
n′个特征值对应的特征向量构成解
W
∗
=
(
w
1
,
w
2
,
.
.
.
w
n
′
)
W^* = (w_1,w_2,...w_{n'})
W∗=(w1,w2,...wn′)
实践中,一般对
X
X
X进行奇异值分解代替协方差矩阵的特征值分解。
2. SVD
奇异值分解(SVD,Singular Value Decomposition)是以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域,是很多机器学习算法的基石。
2.1 特征分解
A
A
A是一个
n
n
n阶矩阵,若
λ
\lambda
λ和
n
n
n维非零向量
x
\boldsymbol x
x满足:
A
x
=
λ
x
A \boldsymbol x=\lambda \boldsymbol x
Ax=λx则
λ
\lambda
λ是矩阵
A
A
A的一个特征值,
x
\boldsymbol x
x是矩阵
A
A
A对应特征值
λ
\lambda
λ的特征向量。
∣
λ
E
−
A
∣
\mid \lambda E - A\mid
∣λE−A∣称为
A
A
A的特征多项式,当特征多项式等于0的时候,称为
A
A
A的特征方程,特征方程是一个齐次线性方程组,求解特征值的过程就是求解特征方程的解。
矩阵 A A A的 n n n个特征值 λ 1 ≤ λ 2 ≤ . . . ≤ λ n \lambda_1 \leq \lambda_2 \leq ... \leq \lambda_n λ1≤λ2≤...≤λn,以及这 n n n个特征值所对应的特征向量 { w 1 , w 2 , . . . w n } \{w_1,w_2,...w_n\} {w1,w2,...wn},如果这 n n n个特征向量线性无关,那么矩阵A就可以用下式的特征分解表示: A = W Σ W − 1 A=W\Sigma W^{-1} A=WΣW−1
其中,
W
W
W是这
n
n
n个特征向量所张成的
n
×
n
n×n
n×n矩阵,而
Σ
\Sigma
Σ为这
n
n
n个特征值为主对角线的
n
×
n
n×n
n×n阶矩阵。
一般会把
W
W
W的
n
n
n个特征向量标准化,即满足
∣
∣
w
i
∣
∣
2
=
1
||w_i||_2 =1
∣∣wi∣∣2=1 或者说
w
i
T
w
i
=
1
w_i^Tw_i =1
wiTwi=1,此时
W
W
W的
n
n
n个特征向量为标准正交基,满足
W
T
W
=
I
W^TW=I
WTW=I,即
W
T
=
W
−
1
W^T=W^{-1}
WT=W−1, 也就是说
W
W
W为酉矩阵。
此时特征分解表达式可以写成:
A
=
W
Σ
W
T
A=W\Sigma W^T
A=WΣWT
2.2 SVD
要进行特征分解,矩阵
A
A
A必须为方阵,那么如果
A
A
A不是方阵,即行和列不相同时,需要使用SVD。
假设矩阵
A
A
A是一个
m
×
n
m×n
m×n的矩阵,定义矩阵
A
A
A的SVD为:
A
=
U
Σ
V
T
A = U\Sigma V^T
A=UΣVT
其中
U
U
U是一个
m
×
m
m×m
m×m的矩阵,
V
V
V是一个
n
×
n
n×n
n×n的矩阵。
U
U
U和
V
V
V称为A的左/右奇异向量矩阵,都是酉矩阵,即满足
U
T
U
=
I
,
V
T
V
=
I
U^TU=I,V^TV=I
UTU=I,VTV=I。
Σ
\Sigma
Σ是一个
m
×
n
m×n
m×n的矩阵,除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值,通常将奇异值由大到小排列,这样
Σ
\Sigma
Σ便能由
A
A
A唯一确定。
奇异值与特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快。很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,也可以用最大的 k k k个的奇异值和对应的左右奇异向量来近似描述矩阵:
A m × n = U m × m Σ m × n V n × n T ≈ U m × k Σ k × k V k × n T \begin{aligned} A_{m \times n} = & U_{m \times m}\Sigma_{m \times n} V^T_{n \times n}\\ \approx & U_{m \times k}\Sigma_{k \times k} V^T_{k \times n} \end{aligned} Am×n=≈Um×mΣm×nVn×nTUm×kΣk×kVk×nT
其中
k
k
k要比
n
n
n小很多,即一个大的矩阵
A
A
A可以用三个小的矩阵
U
m
×
k
,
Σ
k
×
k
,
V
k
×
n
T
U_{m \times k},\Sigma_{k \times k} ,V^T_{k \times n}
Um×k,Σk×k,Vk×nT来表示:
由于这个重要的性质,SVD可以用于PCA降维,来做数据压缩和去噪。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于NLP中的算法,比如潜在语义索引(LSI)。