《百面机器学习》学习笔记(四)降维
机器学习中的数据维数与现实世界的空间维度本同末离。在机器学习中,数据通常需要被表示成向量形式以输入模型进行训练。但众所周知,对向维向量进行处理和分析时,会极大地消耗系统资源,甚至产生维度灾难。因此,进行降维,即用一个低维度的向量表示原始高维度的特征就显得尤为重要。常见的降维方法有主成分分析、线性判别分析、等距映射、局部线性嵌入、拉普拉斯特征映射、局部保留投影等。
降维:在机器学习中经常会碰到一些高维的数据集,而在高维数据情形下会出现数据样本稀疏,距离计算等困难,这类问题是所有机器学习方法共同面临的严重问题,称之为“ 维度灾难 ”。另外在高维特征中容易出现特征之间的线性相关,这也就意味着有的特征是冗余存在的。
特征提取与特征选择:特征提取用于创建一组新的,较小的特征,仍然可以捕获大部分有用信息(降维)。特征选择保留原始特征的子集,而特征提取创建新特征。
PCA principal component analysis ( 主成分分析)
PCA旨在找到数据中的主成分,利用主成分表征原始信息,从而达到降维的目的。举一个简单的例子,在三维空间中有一系列数据点,这些点分布在一个过原点的平面上。如果我们用自然坐标系x, y, z这三个轴来表示数据,需要使用三个维度,而实际上这些点只出现在一个二维平面上,如果我们通过坐标系旋转使得数据所在平面与x, y平面重合,那么我们就可以通过x’, y’两个维度表达原始数据,并且没有任何损失,这样就完成了数据的降维,而x’, y’两个轴所包含的信息就是我们要找到的主成分。
参考:
https://zhuanlan.zhihu.com/p/26951643
https://www.jianshu.com/p/576595f9a16b
http://blog.codinglabs.org/articles/pca-tutorial.html
https://www.cnblogs.com/pinard/p/6239403.html
1 最大方差理论
上图(左)是二维空间中经过中心化的一组数据,我们很容易看出主成分所在的轴(以下称为主轴)的大致方向,即右图中绿线所处的轴。因为在绿线所处的轴上,数据分布的更为分散,这也意味着数据在这个方向上方差更大。在信号处理领域中我们认为信号具有较大方差,噪声具有较小方差,信号与噪声之比称为信噪比,信噪比越大意味着数据的质量越好。由此我们不难引出PCA的目标,即最大化投影方差,也就是让数据在主轴上投影的方差最大。
对于给定的一组中心化后的数据点
{
x
1
,
x
2
,
.
.
.
,
x
n
}
\{x_1,x_2,...,x_n\}
{x1,x2,...,xn} ,其中所有向量均为列向量。我们知道,向量内积在几何上表示为第一个向量投影到第二个向量上的长度,因此向量
x
i
x_i
xi 在
w
w
w(单位方向向量)上的投影坐标可以表示为
(
x
i
,
w
)
=
x
i
T
w
(x_i,w)=x_i^Tw
(xi,w)=xiTw。所以目标是找到一个投影方向
w
w
w,使得在
w
w
w 上的投影方差尽可能大。易知,投影之后均值为0(这也是我们进行中心化的意义):
u
=
1
n
∑
i
=
0
n
x
i
T
w
=
(
1
n
∑
i
=
0
n
x
i
T
)
w
=
0
u=\frac1n\sum_{i=0}^nx_i^Tw=(\frac1n\sum_{i=0}^nx_i^T)w=0
u=n1i=0∑nxiTw=(n1i=0∑nxiT)w=0
因此投影后的方差可以表示为:
D
(
x
)
=
1
n
∑
i
=
0
n
(
x
i
T
w
)
2
=
1
n
∑
i
=
0
n
(
x
i
T
w
)
(
x
i
T
w
)
=
1
n
∑
i
=
0
n
w
T
x
i
T
x
i
w
=
w
T
(
1
n
∑
i
=
0
n
x
i
T
x
i
)
w
\begin{aligned} D(x)&=\frac1n\sum_{i=0}^n(x_i^Tw)^2 \\ &= \frac1n\sum_{i=0}^n(x_i^Tw)(x_i^Tw) \\ &= \frac1n\sum_{i=0}^nw^Tx_i^Tx_iw \\ &= w^T(\frac1n\sum_{i=0}^nx_i^Tx_i)w \end{aligned}
D(x)=n1i=0∑n(xiTw)2=n1i=0∑n(xiTw)(xiTw)=n1i=0∑nwTxiTxiw=wT(n1i=0∑nxiTxi)w
中心化的含义:使得数据点在 w 方向上投影后的均值为0
为什么方差越大,数据质量越好:方差越小,数据越集中,投影后会造成数据重叠,丢失数据信息
2 求解最大方差
2.1 样本协方差与正交基
正交基
对于上面二维降成一维的问题来说,找到那个使得方差最大的方向就可以了。不过对于更高维,还有一个问题需要解决。考虑三维降到二维问题,首先我们希望找到一个方向使得投影后方差最大,继而我们选择第二个投影方向。如果我们还是单纯只选择方差最大的方向,很明显,这个方向与第一个方向应该是“几乎重合在一起”,显然这样的维度是没有用的,因此,应该有其他约束条件。从直观上说,让两个字段尽可能表示更多的原始信息,我们是不希望它们之间存在(线性)相关性的,因为相关性意味着两个字段不是完全独立,必然存在重复表示的信息。因此我们选择第二个方向一定是与第一个方向正交的。
样本协方差
为了衡量降维后的特征(希望降维后的各特征之间互不相关),不相关性可以用协方差来衡量。设降维后的两个特征为
A
,
B
A,B
A,B,则希望
C
o
v
(
A
,
B
)
=
1
m
∑
i
m
a
i
b
i
=
0
Cov(A,B)=\frac1m\sum_i^ma_ib_i=0
Cov(A,B)=m1i∑maibi=0
现假设我们的数据为:
构造出协方差矩阵,并乘以系数
1
m
\frac1m
m1,则
可以看出
1
m
X
T
X
\frac1mX^TX
m1XTX 的对角线元素就是各特征的方差,其他各位置的元素就是各特征之间的协方差。因而只需要降维后的数据协方差矩阵满足对角矩阵的条件即可。
多维协方差矩阵:
设 Y Y Y 为原始数据 X X X 做完PCA降维后的数据,满足 Y = X P Y=XP Y=XP (矩阵乘法相当于映射,若 P P P 的列向量为基向量,那么就相当于映射到新的坐标系), Y c , X c Y_c,X_c Yc,Xc 分别为对应的协方差矩阵,那么:
因而,我们只需要计算出
P
P
P ,使
Y
c
Y_c
Yc 满足对角矩阵的条件即可。而
X
c
X_c
Xc 为实对称矩阵,我们只需要对它做矩阵对角化即可。
至此,我们得到了降维问题的优化目标:将一组N维向量降为K维(K大于0,小于N),其目标是选择K个单位(模为1)正交基,使得原始数据变换到这组基上后,各字段两两间协方差为0,而字段的方差则尽可能大(在正交的约束下,取最大的K个方差)
2.2 拉格朗日求解
目标函数:
D
(
x
)
=
w
T
(
1
n
∑
i
=
0
n
x
i
T
x
i
)
w
=
w
T
1
n
X
T
X
w
=
w
T
X
c
w
\begin{aligned} D(x) & = w^T(\frac1n\sum_{i=0}^nx_i^Tx_i)w \\ & = w^T\frac1nX^TXw \\ & = w^TX_cw \end{aligned}
D(x)=wT(n1i=0∑nxiTxi)w=wTn1XTXw=wTXcw
其中
X
c
X_c
Xc 为数据的协方差矩阵。要使所有的样本的投影方差和最大,也就是最大化
m
a
x
D
(
x
)
maxD(x)
maxD(x) 并且
w
w
w 是单位方向向量,即有
ω
T
ω
=
1
ω^Tω=1
ωTω=1 ,最大化问题可表示为:
m
a
x
D
(
x
)
=
w
T
X
c
w
s
.
t
w
T
w
=
1
\begin{aligned} & maxD(x) = w^TX_c w \\ & \qquad s.t \quad w^Tw=1 \end{aligned}
maxD(x)=wTXcws.twTw=1引入拉格朗日乘子,并对ω求导令其等于0,矩阵求导方法详见矩阵求导
F
(
x
,
w
,
λ
)
=
w
T
X
c
w
+
λ
(
1
−
w
T
w
)
∂
F
(
x
,
w
,
λ
)
∂
w
=
2
X
c
w
−
2
λ
w
=
0
\begin{aligned} F(x,w,λ) & =w^TX_c w+ λ(1-w^Tw)\\ \partial F(x,w,λ) \over \partial w& = 2X_c w- 2λw =0 \end{aligned}
F(x,w,λ)∂w∂F(x,w,λ)=wTXcw+λ(1−wTw)=2Xcw−2λw=0便可以推出
X
c
w
=
λ
w
X_cw=λw
Xcw=λw,此时
D
(
x
)
=
w
T
X
c
w
=
λ
w
T
w
=
λ
D(x)=w^TX_cw=λw^Tw=λ
D(x)=wTXcw=λwTw=λ原来,x投影后的方差就是协方差矩阵的特征值。我们要找到最大的方差也就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量。次佳投影方向位于最佳投影方向的正交空间中,是第二大特征值对应的特征向量,以此类推。
特征值分解
现在的工作就是求解
X
c
w
=
λ
w
X_cw=λw
Xcw=λw,对协方差矩阵
X
c
X_c
Xc 进行特征分解,对求得的特征值进行排序,再对对应的特征向量取前
k
k
k 列组成的矩阵乘以原始数据矩阵X,就得到了我们需要的降维后的数据矩阵Y。
2.3 求解算法流程
输入: n 维样本集 X = { x 1 , x 2 , . . . , x n } X=\{x_1,x_2,...,x_n\} X={x1,x2,...,xn} ,要降维到的维数 k k k ;输出:降维后的样本集 Y Y Y
- 对所有的样本进行中心化 x i = x i − 1 m ∑ j = 1 m x i x_i=x_i-\frac1m\sum_{j=1}^mx_i xi=xi−m1j=1∑mxi
- 计算样本的协方差矩阵 X c = 1 m X T X X_c=\frac1mX^TX Xc=m1XTX
- 求出协方差矩阵的特征值及对应的特征向量
- 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 k k k 行组成矩阵 P P P
- Y = P X Y=PX Y=PX 即为降维到 k k k 维后的数据
有时候,我们不指定降维后的 k 的值,而是换种方式,指定一个降维到的主成分比重阈值 t 。这个阈值 t 在(0,1] 之间 ,则 n ′ n' n′ 可以通过下式得到: ∑ i = 1 n ′ λ i ∑ i = 1 n λ i ≥ t \frac{\sum_{i=1}^{n'}λ_i}{\sum_{i=1}^nλ_i}\geq t ∑i=1nλi∑i=1n′λi≥t
3. 最小平方误差理论
PCA求解的其实是最佳投影方向,即一条直线,这与数学中线性回归问题的目标不谋而合,能否从回归的角度定义PCA的目标并相应地求解问题呢?顺着这个思路,在高维空间中,我们实际上是要找到一个d维超平面,使得数据点到这个超平面的距离平方和最小。以d=1为例,超平面退化为直线,即把样本点投影到最佳直线,最小化的就是所有点到直线的距离平方之和。
数据集中每个点
x
k
x_k
xk (已经进行了中心化)到 d 维超平面D的距离为
d
i
s
t
a
n
c
e
(
x
k
,
D
)
=
∣
∣
x
k
−
x
k
^
∣
∣
2
distance(x_k,D)=||x_k-\hat{x_k}||_2
distance(xk,D)=∣∣xk−xk^∣∣2其中表示
x
k
x_k
xk 在超平面D上的投影向量。如果该超平面由d个标准正交基
W
=
{
w
1
,
w
2
,
.
.
,
w
d
}
W=\{w_1,w_2,..,w_d\}
W={w1,w2,..,wd} 构成,根据线性代数理论
x
k
x_k
xk 可以由这组基线性表示:
x
k
^
=
∑
i
=
1
d
(
w
i
T
x
k
)
w
i
\hat{x_k}=\sum_{i=1}^d(w_i^Tx_k)w_i
xk^=i=1∑d(wiTxk)wi其中
w
i
T
x
k
w_i^Tx_k
wiTxk表示
x
k
x_k
xk 在
w
i
w_i
wi 方向上投影的长度。因此,
x
k
^
\hat{x_k}
xk^实际上就是
x
k
x_k
xk 在这组正交基下的坐标。而PCA要优化的目标为
将式中的每一个距离展开,有
x
k
T
x
k
^
=
x
k
^
T
x
k
x_k^T\hat{x_k}= \hat{x_k}^Tx_k
xkTxk^=xk^Txk
其中第一项
x
k
T
x
k
x_k^Tx_k
xkTxk 与选取的W无关,是个常数。将
x
k
^
\hat{x_k}
xk^ 代入上式的第二项和第三项可得到
注意到,其中
w
i
T
x
k
w_i^Tx_k
wiTxk 和
w
j
T
x
k
w_j^Tx_k
wjTxk 表示投影长度,都是数字。且当 i≠j 时,
w
i
T
w
j
=
0
w_i^Tw_j=0
wiTwj=0 ,因此上式的交叉项中只剩下 d 项:
注意到, 上式实际上就是矩阵
W
T
x
k
x
k
T
W
W^Tx_kx^T_kW
WTxkxkTW 的迹(对角线元素之和),于是可以将上式继续化简:
目标函数变为:
即:
与最大误差法类似,通过构造拉格朗日函数求解:
F
(
X
,
W
,
λ
)
=
t
r
(
W
T
X
X
t
W
)
+
λ
(
I
−
W
T
W
)
∂
F
(
X
,
W
,
λ
)
∂
W
=
2
X
X
T
W
−
2
λ
W
=
0
\begin{aligned} F(X,W,λ) & =tr(W^TXX^tW)+ λ(I-W^TW)\\ \partial F(X,W, λ) \over \partial W& = 2XX^TW- 2λW =0 \end{aligned}
F(X,W,λ)∂W∂F(X,W,λ)=tr(WTXXtW)+λ(I−WTW)=2XXTW−2λW=0整理下即为:
X
X
T
W
=
λ
W
XX^TW=λW
XXTW=λW
如果我们对W中的d个基依次求解,就会发现和最大方差理论的方法完全等价。比如当d=1时,我们实际求解的问题是
最佳直线ω与最大方差法求解的最佳投影方向一致,即协方差矩阵的最大特征值所对应的特征向量,差别仅是协方差矩阵
X
c
X_c
Xc 的一个倍数,以及常数偏差,但这并不影响我们对最大值的优化。
4. 核主成分分析KPCA介绍
在上面的PCA算法中,我们假设存在一个线性的超平面,可以让我们对数据进行投影。但是有些时候,数据不是线性的,不能直接进行PCA降维。这里就需要用到和支持向量机一样的核函数的思想,先把数据集从n维映射到线性可分的高维N>n,然后再从N维降维到一个低维度n’, 这里的维度之间满足n’<n<N。使用了核函数的主成分分析一般称之为核主成分分析(Kernelized PCA, 以下简称KPCA。假设高维空间的数据是由n维空间的数据通过映射ϕ产生。则对于n维空间的特征分解:
通过在高维空间进行协方差矩阵的特征值分解,然后用和PCA一样的方法进行降维。一般来说,映射ϕ不用显式的计算,而是在需要计算的时候通过核函数完成。由于KPCA需要核函数的运算,因此它的计算量要比PCA大很多。
5. PCA算法总结
优点:
- 仅仅需要以方差衡量信息量,不受数据集以外的因素影响。
- 各主成分之间正交,可消除原始数据成分间的相互影响的因素。
- 计算方法简单,主要运算是特征值分解,易于实现。
缺点:
- 主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
- 方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。
LDA Linear Discriminant Analysis(线性判别分析)
参考:
https://www.cnblogs.com/pinard/p/6244265.html
https://zhuanlan.zhihu.com/p/27899927
相比于PCA,LDA可以作为一种有监督的降维算法。在PCA中,算法没有考虑数据的标签(类别),只是把原数据映射到一些方差比较大的方向上而已。假设用不同的颜色标注C1、C2两个不同类别的数据,如图所示。根据PCA算法,数据应该映射到方差最大的那个方向,亦即y轴方向。但是,C1,C2两个不同类别的数据就会完全混合在一起,很难区分开。所以,使用PCA算法进行降维后再进行分类的效果会非常差。但是,如果使用LDA算法,数据会映射到x轴方向。
LDA中心思想:投影后类内方差最小,类间方差最大。意思是我们将数据在低维度上进行投影,投影后希望每一种类别数据的投影点尽可能的接近,而不同类别的数据的类别中心之间的距离尽可能的大。
从直观上可以看出,右图要比左图的投影效果好,因为右图的黑色数据和蓝色数据各个较为集中,且类别之间的距离明显。左图则在边界处数据混杂。
1. 二分类LDA原理
假设我们的数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( ( x m , y m ) ) } D=\{(x_1,y_1),(x_2,y_2),...,((x_m,y_m))\} D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本 x i x_i xi 为n维向量, y i ∈ 0 , 1 y_i∈{0,1} yi∈0,1。我们定义 N j ( j = 0 , 1 ) N_j(j=0,1) Nj(j=0,1) 为第 j 类样本的个数, X j ( j = 0 , 1 ) X_j(j=0,1) Xj(j=0,1)为第 j 类样本的集合,而 μ j ( j = 0 , 1 ) μ_j(j=0,1) μj(j=0,1)为第 j 类样本的均值向量,定义 Σ j ( j = 0 , 1 ) Σ_j(j=0,1) Σj(j=0,1)为第j类样本的协方差矩阵(严格说是缺少分母部分的协方差矩阵)。
其中
μ
j
μ_j
μj 的表达式为:
μ
j
=
1
N
j
∑
x
∈
X
j
x
(
j
=
0
,
1
)
μ_j=\frac1N_j∑_{x∈X_j}x(j=0,1)
μj=N1jx∈Xj∑x(j=0,1)
Σ
j
Σ_j
Σj的表达式为:
Σ
j
=
∑
x
∈
X
j
(
x
−
μ
j
)
(
x
−
μ
j
)
T
(
j
=
0
,
1
)
Σ_j=∑_{x∈X_j}(x−μ_j)(x−μ_j)^T(j=0,1)
Σj=x∈Xj∑(x−μj)(x−μj)T(j=0,1)
由于是两类数据,因此我们只需要将数据投影到一条直线上即可。假设我们的投影直线是向量w,则对任意一个样本本
x
i
x_i
xi,它在直线w的投影为
w
T
x
i
w^Tx_i
wTxi,对于我们的两个类别的中心点
μ
0
,
μ
1
μ_0,μ_1
μ0,μ1,在在直线w的投影为
w
T
μ
0
w^Tμ_0
wTμ0 和
w
T
μ
1
w^Tμ_1
wTμ1。
由于LDA需要让不同类别的数据的类别中心之间的距离尽可能的大,也就是我们要最大化
∣
∣
w
T
μ
0
−
w
T
μ
1
∣
∣
2
2
||w^Tμ_0−w^Tμ_1||_2^2
∣∣wTμ0−wTμ1∣∣22,同时我们希望同一种类别数据的投影点尽可能的接近,也就是要同类样本投影点的协方差
w
T
Σ
0
w
w^TΣ_0w
wTΣ0w 和
w
T
Σ
1
w
w^TΣ_1w
wTΣ1w 尽可能的小,即最小化
w
T
Σ
0
w
+
w
T
Σ
1
w
w^TΣ_0w+w^TΣ_1w
wTΣ0w+wTΣ1w。综上所述,我们的优化目标为:
m
a
x
w
J
(
w
)
=
∣
∣
w
T
μ
0
−
w
T
μ
1
∣
∣
2
2
w
T
Σ
0
w
+
w
T
Σ
1
w
=
w
T
(
u
0
−
u
1
)
(
u
0
−
u
1
)
T
w
w
T
(
Σ
0
+
Σ
1
)
w
max_wJ(w)=\frac{||w^Tμ_0−w^Tμ_1||_2^2}{w^TΣ_0w+w^TΣ_1w}=\frac{w^T(u_0-u_1)(u_0-u_1)^Tw}{w^T(Σ_0+Σ_1)w}
maxwJ(w)=wTΣ0w+wTΣ1w∣∣wTμ0−wTμ1∣∣22=wT(Σ0+Σ1)wwT(u0−u1)(u0−u1)Tw
定义类内散度矩阵
S
w
S_w
Sw 为:
S
w
=
Σ
0
+
Σ
1
=
∑
x
∈
X
0
(
x
−
μ
0
)
(
x
−
μ
0
)
T
+
∑
x
∈
X
1
(
x
−
μ
1
)
(
x
−
μ
1
)
T
S_w=Σ_0+Σ_1=∑_{x∈X_0}(x−μ_0)(x−μ_0)^T+∑_{x∈X_1}(x−μ_1)(x−μ_1)^T
Sw=Σ0+Σ1=x∈X0∑(x−μ0)(x−μ0)T+x∈X1∑(x−μ1)(x−μ1)T同时定义类间散度矩阵
S
b
S_b
Sb 为:
S
b
=
(
u
0
−
u
1
)
(
u
0
−
u
1
)
T
S_b=(u_0-u_1)(u_0-u_1)^T
Sb=(u0−u1)(u0−u1)T优化目标重写为:
m
a
x
w
J
(
w
)
=
w
T
S
b
w
w
T
S
w
w
max_wJ(w)=\frac{w^TS_bw}{w^TS_ww}
maxwJ(w)=wTSwwwTSbw
解法一
对公式J(W)关于w求导,并另之为0,我们发现J(w)取得最大值的条件为:
(
w
T
S
w
w
)
S
b
w
=
(
w
T
S
b
w
)
S
w
w
(w^TS_ww)S_bw=(w^TS_bw)S_ww
(wTSww)Sbw=(wTSbw)Sww由于
w
T
S
b
w
w^TS_bw
wTSbw 和
w
T
S
w
w
w^TS_ww
wTSww 在简化的二分类问题中都是标量,因此我们可以把上式子看做:
S
b
w
=
λ
S
w
w
S_bw=λS_ww
Sbw=λSww两边乘以
S
w
−
1
S_w^{-1}
Sw−1 整理得:
S
w
−
1
S
b
w
=
λ
w
S_w^{-1}S_bw=λw
Sw−1Sbw=λw从这里我们可以看出,我们最大化的目标对应了一个矩阵的特征值,于是LDA降维变成了一个求矩阵特征向量的问题。J(w)就对应了矩阵
S
w
−
1
S
b
S_w^{−1}S_b
Sw−1Sb最大的特征值,而投影方向就是这个特征值对应的特征向量。
容易发现,当 ω ω ω 方向与 ( μ 0 − μ 1 ) (μ_0−μ_1) (μ0−μ1)一致的时候,类间距离达到最大值。而对于二分类这一问题,由于 S b = ( u 0 − u 1 ) ( u 0 − u 1 ) T S_b=(u_0-u_1)(u_0-u_1)^T Sb=(u0−u1)(u0−u1)T ,因此 S b ω S_bω Sbω 的方向始终与 ( μ 0 − μ 1 ) (μ_0−μ_1) (μ0−μ1) 一致,如果只考虑ω的方向,不考虑其长度,可以得到 ω = S w − 1 ω = S_w^{−1} ω=Sw−1。换句话说,我们只需要求样本的均值和类内方差,就可以马上得出最佳的投影方向ω。这便是Fisher在1936年提出的线性判别分析。
解法二
注意到
J
(
w
)
J(w)
J(w) 式中的分子和分母都是关于 w 的二次项,因此
J
(
w
)
J(w)
J(w) 的解与
w
w
w 的长度无关,只与其方向有关(
w
w
w 为投影后直线的方向),不失一般性,令
w
T
S
w
w
=
1
w^TS_ww=1
wTSww=1 ,则式
J
(
w
)
J(w)
J(w) 等价于:
m
i
n
w
−
w
T
S
b
w
min_w-w^TS_bw
minw−wTSbw
s
.
t
w
T
S
w
w
=
1
s.t\quad w^TS_ww=1
s.twTSww=1由拉格朗日乘子法,上式等价于:
F
(
w
,
λ
)
=
−
w
T
S
b
w
+
λ
(
w
T
S
w
w
−
1
)
∂
F
(
w
,
λ
)
∂
w
=
−
2
S
b
w
+
2
λ
S
w
w
=
0
\begin{aligned} F(w,λ) & =-w^TS_bw+ λ(w^TS_ww-1)\\ \partial F(w, λ) \over \partial w& = -2S_bw+2λS_ww =0\\ \end{aligned}
F(w,λ)∂w∂F(w,λ)=−wTSbw+λ(wTSww−1)=−2Sbw+2λSww=0整理后有
S
b
w
=
λ
S
w
w
S_bw=λS_ww
Sbw=λSww后续求解与解法一一致
2. 多类LDA原理
假设我们的数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( ( x m , y m ) ) } D=\{(x_1,y_1),(x_2,y_2),...,((x_m,y_m))\} D={(x1,y1),(x2,y2),...,((xm,ym))},其中任意样本 x i x_i xi 为n维向量, y i ∈ { C 1 , C 2 , . . . , C k } y_i∈\{C_1,C_2,...,C_k\} yi∈{C1,C2,...,Ck}。我们定义 N j ( j = 1 , 2 , . . . , k ) N_j(j=1,2,...,k) Nj(j=1,2,...,k) 为第 j 类样本的个数, X j ( j = 1 , 2 , . . . , k ) X_j(j=1,2,...,k) Xj(j=1,2,...,k)为第 j 类样本的集合,而 μ j ( j = 1 , 2 , . . . , k ) μ_j(j=1,2,...,k) μj(j=1,2,...,k)为第 j 类样本的均值向量,定义 Σ j ( j = 1 , 2 , . . . , k ) Σ_j(j=1,2,...,k) Σj(j=1,2,...,k)为第j类样本的协方差矩阵。在二类LDA里面定义的公式可以很容易的类推到多类LDA。
由于我们是多类向低维投影,则此时投影到的低维空间就不是一条直线,而是一个超平面了。假设我们投影到的低维空间的维度为d,对应的基向量为 ( w 1 , w 2 , . . . w d ) (w_1,w_2,...w_d) (w1,w2,...wd),基向量组成的矩阵为W, 它是一个n×d的矩阵。
考虑之前的目标,通过投影后的类内散度矩阵和类间的散度矩阵来定义,我们发现对于多类的情况,类内散度矩阵依然存在。并且定义和之前一样基本保持不变,即: S w = ∑ j = 1 k S w j = ∑ j = 1 k ∑ x ∈ X j ( x − μ j ) ( x − μ j ) T S_w=∑_{j=1}^kS_{wj}=∑_{j=1}^k∑_{x∈X_j}(x−μ_j)(x−μ_j)^T Sw=j=1∑kSwj=j=1∑kx∈Xj∑(x−μj)(x−μj)T
但是类间散度矩阵已经无法按照之前的定义来求,我们考虑下图:
我们可以定义全局散度矩阵St,即
S
t
=
∑
i
=
1
n
(
x
i
−
u
)
(
x
i
−
u
)
T
S_t=\sum_{i=1}^n(x_i-u)(x_i-u)^T
St=i=1∑n(xi−u)(xi−u)Tμ为所有样本均值向量。可以不是一般性的认为:全局散度矩阵=类内散度矩阵+类间散度矩阵,因此由
S
b
=
S
t
−
S
w
S_b=S_t-S_w
Sb=St−Sw 得:
S
b
=
∑
j
=
1
k
N
j
(
u
j
−
u
)
(
u
j
−
u
)
T
S_b=∑_{j=1}^kN_j(u_j−u)(u_j−u)^T
Sb=j=1∑kNj(uj−u)(uj−u)T从这个式子我们可以看出,其物理意义就是定义了每个类别到全局中心的距离,我们要让类间分离的足够开,就需要让每个类别的样本再投影后,距离全局中心足够远。
此时我们的优化目标应该可以变成为: W T S b W W T S w W \frac{W^TS_bW}{W^TS_wW} WTSwWWTSbW但是有一个问题,就是 W T S b W W^TS_bW WTSbW和 W T S w W W^TS_wW WTSwW都是矩阵,不是标量,无法作为一个标量函数来优化!也就是说,我们无法直接用二类LDA的优化方法,怎么办呢?一般来说,我们可以用其他的一些替代优化目标来实现。
常见的一个LDA多类优化目标函数定义为:
其中
∏
d
i
a
g
A
\prod_{diag}A
∏diagA 为A的主对角线元素的乘积,W为n×d的矩阵。J(W)的优化过程可以转化为:
仔细观察上式最右边,就是二分类LDA的目标函数!则最大值是矩阵
S
w
−
1
S
b
S^{−1}_wS_b
Sw−1Sb 的最大特征值,最大的d个值的乘积就是矩阵
S
w
−
1
S
b
S^{−1}_wS_b
Sw−1Sb 的最大的d个特征值的乘积,此时对应的矩阵W为这最大的d个特征值对应的特征向量张成的矩阵。
由于W是一个利用了样本的类别得到的投影矩阵,因此它的降维到的维度d最大值为k-1。为什么最大维度不是类别数k呢?因为Sb中每个μj−μ的秩为1,因此协方差矩阵相加后最大的秩为k(矩阵的秩小于等于各个相加矩阵的秩的和),但是由于如果我们知道前k-1个μj后,最后一个μk可以由前k-1个μj线性表示,因此Sb的秩最大为k-1,即特征向量最多有k-1个。
3. LDA算法流程
输入:数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
(
x
m
,
y
m
)
)
}
D=\{(x_1,y_1),(x_2,y_2),...,((x_m,y_m))\}
D={(x1,y1),(x2,y2),...,((xm,ym))},
y
i
∈
{
C
1
,
C
2
,
.
.
.
,
C
k
}
y_i∈\{C_1,C_2,...,C_k\}
yi∈{C1,C2,...,Ck},降维到的维度d。
输出:降维后的样本集
D
′
D′
D′
- 计算类内散度矩阵 S w S_w Sw
- 计算类间散度矩阵 S b S_b Sb
- 计算矩阵 S w − 1 S b S^{−1}_wS_b Sw−1Sb
- 计算 S w − 1 S b S^{−1}_wS_b Sw−1Sb 的最大的d个特征值和对应的d个特征向量 ( w 1 , w 2 , . . . w d ) (w_1,w_2,...w_d) (w1,w2,...wd) ,得到投影矩阵W
- 对样本集中的每一个样本特征 x i x_i xi,转化为新的样本 z i = W T x i z_i=W^Tx_i zi=WTxi
- 得到输出样本集 D ′ = { ( z 1 , y 1 ) , ( z 2 , y 2 ) , . . . , ( ( z m , y m ) ) } D′=\{(z_1,y_1),(z_2,y_2),...,((z_m,y_m))\} D′={(z1,y1),(z2,y2),...,((zm,ym))}
4. LDA算法总结
实际上LDA除了可以用于降维以外,还可以用于分类。一个常见的LDA分类基本思想是假设各个类别的样本数据符合高斯分布,这样利用LDA进行投影后,可以利用极大似然估计计算各个类别投影数据的均值和方差,进而得到该类别高斯分布的概率密度函数。当一个新的样本到来后,我们可以将它投影,然后将投影后的样本特征分别带入各个类别的高斯分布概率密度函数,计算它属于这个类别的概率,最大的概率对应的类别即为预测类别。
4.1 LDA算法优缺点
优点:
- 在降维过程中可以使用类别的先验知识经验,而像PCA这样的无监督学习则无法使用类别先验知识。
- LDA在样本分类信息依赖均值而不是方差的时候,比PCA之类的算法较优。
缺点:
- LDA不适合对非高斯分布样本进行降维,PCA也有这个问题。
- LDA降维最多降到类别数k-1的维数,如果我们降维的维度大于k-1,则不能使用LDA。当然目前有一些LDA的进化版算法可以绕过这个问题。
- LDA在样本分类信息依赖方差而不是均值的时候,降维效果不好。
- LDA可能过度拟合数据。
4.2 LDA与PCA
Fisher LDA相比PCA更善于对有类别信息的数据进行降维处理,但它对数据的分布做了一些很强的假设,例如,每个类数据都是高斯分布、各个类的协方差相等。尽管这些假设在实际中并不一定完全满足,但LDA已被证明是非常有效的一种降维方法。主要是因为线性模型对于噪声的鲁棒性比较好,但由于模型简单,表达能力有一定局限性,我们可以通过引入核函数扩展LDA方法以处理分布较为复杂的数据。
LDA与PCA相同点:
- 两者均可以对数据进行降维。
- 两者在降维时均使用了矩阵特征分解的思想。
- 两者都假设数据符合高斯分布。
LDA与PCA不同点:
- LDA是有监督的降维方法,而PCA是无监督的降维方法
- LDA降维最多降到类别数k-1的维数,而PCA没有这个限制。
- LDA除了可以用于降维,还可以用于分类。
- LDA选择分类性能最好的投影方向,而PCA选择样本点投影具有最大方差的方向。PCA假设方差越大,信息量越多,用主成分来表示原始数据可以去除冗余的维度,达到降维。而LDA选择的是投影后类内方差小、类间方差大的方向。其用到了类别标签信息,为了找到数据中具有判别性的维度,使得原始数据在这些方向上投影后,不同类别尽可能区分开
应用:
- 在语音识别中,我们想从一段音频中提取出人的语音信号,这时可以使用PCA先进行降维,过滤掉一些固定频率(方差较小)的背景噪声。但如果我们的需求是从这段音频中区分出声音属于哪个人,那么我们应该使用LDA对数据进行降维,使每个人的语音信号具有区分性。
- 基于PCA的人脸识别方法也称为特征脸(Eigenface)方法,该方法将人脸图像按行展开形成一个高维向量,对多个人脸特征的协方差矩阵做特征值分解,其中较大特征值对应的特征向量具有与人脸相似的形状,故称为特征脸。Eigenface for Recognition一文中将人脸用7个特征脸表示,于是可以把原始65536维的图像特征瞬间降到7维,人脸识别在降维后的空间上进行。然而由于其利用PCA进行降维,一般情况下保留的是最佳描述特征(主成分),而非分类特征。如果我们想要达到更好的人脸识别效果,应该用LDA方法对数据集进行降维,使得不同人脸在投影后的特征具有一定区分性。
从应用的角度,我们可以掌握一个基本的原则——对无监督的任务使用PCA进行降维,对有监督的则应用LDA。
SVD Singular Value Decomposition(奇异值分解)
奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域。是很多机器学习算法的基石。
参考:
https://www.cnblogs.com/pinard/p/6251584.html
1. 矩阵分解
回顾下特征值和特征向量的定义如下: A x = λ x Ax=λx Ax=λx其中A是一个n×n的实对称矩阵,x是一个n维向量,则我们说λ是矩阵A的一个特征值,而x是矩阵A的特征值λ所对应的特征向量。
求出特征值和特征向量有什么好处呢? 就是我们可以将矩阵A特征分解。如果我们求出了矩阵A的n个特征值 λ 1 ≤ λ 2 ≤ . . . ≤ λ n λ_1≤λ_2≤...≤λ_n λ1≤λ2≤...≤λn,以及这n个特征值所对应的特征向量 { w 1 , w 2 , . . . w n } \{w_1,w_2,...w_n\} {w1,w2,...wn},如果这n个特征向量线性无关,那么矩阵A就可以用下式的特征分解表示: A = W Σ W − 1 A=WΣW^{−1} A=WΣW−1其中W是这n个特征向量所张成的n×n维矩阵,而Σ为这n个特征值为主对角线的n×n维矩阵。
一般我们会把W的这n个特征向量标准化,即满足 ∣ ∣ w i ∣ ∣ 2 = 1 ||w_i||^2=1 ∣∣wi∣∣2=1, 或者说 w i T w i = 1 w^T_iw_i=1 wiTwi=1,此时W的n个特征向量为标准正交基,满足 W T W = I W^TW=I WTW=I,即 W T = W − 1 W^T=W^{−1} WT=W−1, 也就是说W为酉矩阵。
这样我们的特征分解表达式可以写成
A
=
W
Σ
W
T
A=WΣW^T
A=WΣWT
注意到要进行特征分解,矩阵A必须为方阵。那么如果A不是方阵,即行和列不相同时,我们还可以对矩阵进行分解吗?答案是可以,此时我们的SVD登场了。
2. SVD矩阵分解
SVD也是对矩阵进行分解,但是和特征分解不同,SVD并不要求要分解的矩阵为方阵。假设我们的矩阵A是一个m×n的矩阵,那么我们定义矩阵A的SVD为: A = U Σ V T A=UΣV^T A=UΣVT其中
- U是一个m×m的矩阵,且为酉矩阵,即满足 U T U = I U^TU=I UTU=I
- Σ是一个m×n的矩阵,除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值,
- V是一个n×n的矩阵,且为酉矩阵,即满足 V T V = I V^TV=I VTV=I。
如图所示:
求解分解后的矩阵
解法一:
如果我们将A的转置和A做矩阵乘法,那么会得到n×n的一个方阵
A
T
A
A^TA
ATA。既然
A
T
A
A^TA
ATA是方阵,那么我们就可以进行特征分解,得到的特征值和特征向量满足下式:
(
A
T
A
)
v
i
=
λ
i
v
i
(A^TA)v_i=λ_iv_i
(ATA)vi=λivi这样我们就可以得到矩阵
A
T
A
A^TA
ATA的n个特征值和对应的n个特征向量v了。将
A
T
A
A^TA
ATA 的所有特征向量张成一个n×n的矩阵V,就是我们SVD公式里面的V矩阵了。一般我们将V中的每个特征向量叫做A的右奇异向量。
如果我们将A和A的转置做矩阵乘法,那么会得到m×m的一个方阵 A A T AA^T AAT。既然 A A T AA^T AAT是方阵,那么我们就可以进行特征分解,得到的特征值和特征向量满足下式: ( A A T ) u i = λ i u i (AA^T)u_i=λ_iu_i (AAT)ui=λiui这样我们就可以得到矩阵 A A T AA^T AAT的m个特征值和对应的m个特征向量u了。将 A A T AA^T AAT的所有特征向量张成一个m×m的矩阵U,就是我们SVD公式里面的U矩阵了。一般我们将U中的每个特征向量叫做A的左奇异向量。
U和V我们都求出来了,现在就剩下奇异值矩阵Σ没有求出了。由于Σ除了对角线上是奇异值其他位置都是0,那我们只需要求出每个奇异值σ就可以了。我们注意到: A = U Σ V T ⇒ A V = U Σ V T V ⇒ A V = U Σ ⇒ A v i = σ i u i ⇒ σ i = A v i / u i A=UΣV^T⇒AV=UΣV^TV⇒AV=UΣ⇒Av_i=σ_iu_i⇒σ_i=Av_i/u_i A=UΣVT⇒AV=UΣVTV⇒AV=UΣ⇒Avi=σiui⇒σi=Avi/ui这样我们可以求出我们的每个奇异值,进而求出奇异值矩阵Σ。
解法二:
其实我们也可以直接利用
A
T
A
A^TA
ATA 和右奇异矩阵
V
V
V来求解做奇异矩阵:首先把
A
T
A
A^TA
ATA 的特征值分为两组:特征值大于零的一组(r个),特征值等于零的一组(m-r个),相应的把右奇异矩阵的列向量分为两组:前r个非零特征值对应的单位特征向量为
V
1
=
(
v
1
,
v
2
,
.
.
.
v
r
)
V_1=(v_1, v_2, ...v_r)
V1=(v1,v2,...vr),而零特征值对应的单位特征向量为
V
2
=
(
v
r
+
1
,
.
.
v
m
)
V_2=(v_{r+1},.. v_m)
V2=(vr+1,..vm)。再把左奇异矩阵U的列向量也分为两组,尽管我们还不知道具体的元素值,但是我们知道它有n个列向量:前 r 个列向量
U
1
=
(
u
1
,
u
2
,
.
.
.
u
r
)
U_1=(u_1, u_2, ...u_r)
U1=(u1,u2,...ur),后n-r个列向量
U
2
=
(
u
r
+
1
,
.
.
.
u
n
)
U_2=(u_{r+1}, ...u_n)
U2=(ur+1,...un)。那么我们可以用
A
、
V
1
A、V_1
A、V1 和奇异值构成的对角阵方阵Σ来求出
U
1
U_1
U1。
A
=
U
Σ
V
T
⇒
A
V
=
U
Σ
⇒
A
(
V
1
,
V
2
)
=
(
U
1
,
U
2
)
Σ
⇒
A
V
1
=
U
1
Σ
⇒
U
1
=
A
V
1
Σ
−
1
A=UΣV^T⇒AV=UΣ⇒A(V_1,V_2)=(U_1,U_2)Σ⇒AV_1=U_1Σ⇒U_1=AV_1Σ^{-1}
A=UΣVT⇒AV=UΣ⇒A(V1,V2)=(U1,U2)Σ⇒AV1=U1Σ⇒U1=AV1Σ−1由第一种做法我们已知
U
1
U_1
U1 是
X
X
T
XX^T
XXT 非零特征值的单位特征向量,那么
U
2
U_2
U2 就是零特征值的单位特征向量了。我们不用去求
U
2
U_2
U2,只要构造n-r个列向量,每一个列向量满足:与其他n-1个列向量正交,且是单位向量——这通常是比较容易构造的。于是我们就得到了左奇异矩阵
U
=
(
U
1
,
U
2
)
U=(U_1, U_2)
U=(U1,U2)。
证明SVD分解后的矩阵
证明:由 A T A A^TA ATA的特征向量组成矩阵的就是SVD中的V矩阵,而由 A A T AA^T AAT 的特征向量组成的矩阵是SVD中的U矩阵
以V矩阵的证明为例。 A = U Σ V T ⇒ A T = V Σ T U T ⇒ A T A = V Σ T U T U Σ V T = V Σ 2 V T A=UΣV^T⇒A^T=VΣ^TU^T⇒A^TA=VΣ^TU^TUΣV^T=VΣ^2V^T A=UΣVT⇒AT=VΣTUT⇒ATA=VΣTUTUΣVT=VΣ2VT上式证明使用了: U T U = I , Σ T Σ = Σ 2 U^TU=I,Σ^TΣ=Σ^2 UTU=I,ΣTΣ=Σ2。可以看出 A T A A^TA ATA 的特征向量组成的的确就是我们SVD中的V矩阵。类似的方法可以得到 A A T AA^T AAT 的特征向量组成的就是我们SVD中的U矩阵。
进一步我们还可以看出我们的特征值矩阵等于奇异值矩阵的平方,也就是说特征值和奇异值满足如下关系:
σ
i
=
λ
i
σ_i=\sqrt λ_i
σi=λi 这样也就是说,我们可以不用
σ
i
=
A
v
i
/
u
i
σ_i=Av_i/u_i
σi=Avi/ui 来计算奇异值,也可以通过求出
A
T
A
A^TA
ATA 的特征值取平方根来求奇异值。
3. SVD计算举例
4. SVD的性质
对于奇异值,它跟我们特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,我们也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵。也就是说:
A
m
×
n
=
U
m
×
m
Σ
m
×
n
V
n
×
n
T
≈
U
m
×
k
Σ
k
×
k
V
k
×
n
T
A_{m×n}=U_{m×m}Σ_{m×n}V^T_{n×n}≈U_{m×k}Σ_{k×k}V^T_{k×n}
Am×n=Um×mΣm×nVn×nT≈Um×kΣk×kVk×nT其中k要比n小很多,也就是一个大的矩阵A可以用三个小的矩阵
U
m
×
k
,
Σ
k
×
k
,
V
k
×
n
T
U_{m×k},Σ_{k×k},V^T_{k×n}
Um×k,Σk×k,Vk×nT来表示。如下图所示,现在我们的矩阵A只需要灰色的部分的三个小矩阵就可以近似描述了。
由于这个重要的性质,SVD可以用于PCA降维,来做数据压缩和去噪。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于NLP中的算法,比如主题模型(LSA)。
5. SVD的应用
降维(在PCA中的应用)
要用PCA降维,需要找到样本协方差矩阵 X T X X^TX XTX 的最大的d个特征向量,然后用这最大的d个特征向量张成的矩阵来做低维投影降维。可以看出,在这个过程中需要先求出协方差矩阵 X T X X^TX XTX,当样本数多样本特征数也多的时候,这个计算量是很大的。
注意到我们的SVD也可以得到协方差矩阵 X T X X^TX XTX 最大的d个特征向量张成的矩阵 X T X = V Σ 2 V T X^TX=VΣ^2V^T XTX=VΣ2VTSVD有个好处,有一些SVD的实现算法可以不求先求出协方差矩阵 X T X X^TX XTX ,也能求出我们的右奇异矩阵V。也就是说,我们的PCA算法可以不用做特征分解,而是做SVD来完成。这个方法在样本量很大的时候很有效。实际上,scikit-learn的PCA算法的背后真正的实现就是用的SVD,而不是我们我们认为的暴力特征分解。
压缩
假设我们的样本是m×n的矩阵X,如果我们通过SVD找到了矩阵 X X T XX^T XXT最大的d个特征向量张成的m×d维矩阵U,则我们如果进行如下处理: X d × n ′ = U d × m T X m × n X^′_{d×n}=U^T_{d×m}X_{m×n} Xd×n′=Ud×mTXm×n可以得到一个d×n的矩阵 X ′ X^′ X′,这个矩阵和我们原来的m×n维样本矩阵X相比,行数从m减到了d,可见对行数进行了压缩。也就是说,左奇异矩阵可以用于行数的压缩。相对的,右奇异矩阵可以用于列数即特征维度的压缩,也就是我们的PCA降维。