前言
在之前的一篇博客机器学习中的数学(7)——PCA的数学原理中深入讲解了,PCA的数学原理。谈到PCA就不得不谈LDA,他们就像是一对孪生兄弟,总是被人们放在一起学习,比较。这这篇博客中我们就来谈谈LDA模型。由于水平有限,积累还不够,有不足之处还望指点。下面就进入正题吧。
为什么要用LDA
前面的博客提到PCA是常用的有效的数据降维的方法,与之相同的是LDA也是一种将数据降维的方法。PCA已经是一种表现很好的数据降维的方法,那为什么还要有LDA呢?下面我们就来回答这个问题?
PCA是一种无监督的数据降维方法,与之不同的是LDA是一种有监督的数据降维方法。我们知道即使在训练样本上,我们提供了类别标签,在使用PCA模型的时候,我们是不利用类别标签的,而LDA在进行数据降维的时候是利用数据的类别标签提供的信息的。
从几何的角度来看,PCA和LDA都是讲数据投影到新的相互正交的坐标轴上。只不过在投影的过程中他们使用的约束是不同的,也可以说目标是不同的。PCA是将数据投影到方差最大的几个相互正交的方向上,以期待保留最多的样本信息。样本的方差越大表示样本的多样性越好,在训练模型的时候,我们当然希望数据的差别越大越好。否则即使样本很多但是他们彼此相似或者相同,提供的样本信息将相同,相当于只有很少的样本提供信息是有用的。样本信息不足将导致模型性能不够理想。这就是PCA降维的目标:将数据投影到方差最大的几个相互正交的方向上。这种约束有时候很有用,比如在下面这个例子:
对于这个样本集我们可以将数据投影到x轴或者y轴,但这都不是最佳的投影方向,因为这两个方向都不能最好地反映数据的分布。很明显还存在最佳的方向可以描述数据的分布趋势,那就是图中红色直线所在的方向。也是数据样本做投影,方差最大的方向。向这个方向做投影,投影后数据的方差最大,数据保留的信息最多。
但是,对于另外的一些不同分布的数据集,PCA的这个投影后方差最大的目标就不太合适了。比如对于下面图片中的数据集:
针对这个数据集,如果同样选择使用PCA,选择方差最大的方向作为投影方向,来对数据进行降维。那么PCA选出的最佳投影方向,将是图中红色直线所示的方向。这样做投影确实方差最大,但是是不是有其他问题。聪明的你一定发现了,这样做投影之后两类数据样本将混合在一起,将不再线性可分,甚至是不可分的。这对我们来说简直就是地狱,本来线性可分的样本被我们亲手变得不再可分。
帅气英俊的你也一定发现了,图中还有一条耀眼的黄色直线,向这条直线做投影即能使数据降维,同时还能保证两类数据仍然是线性可分的。上面的这个数据集如果使用LDA降维,找出的投影方向就是黄色直线所在的方向。
这其实就是LDA的思想,或者说LDA降维的目标:将带有标签的数据降维,投影到低维空间同时满足三个条件:
- 尽可能多地保留数据样本的信息(即选择最大的特征是对应的特征向量所代表的的方向)。
- 寻找使样本尽可能好分的最佳投影方向。
- 投影后使得同类样本尽可能近,不同类样本尽可能远。
其实第二个和第三个条件是基本等价的,我们很容易想到,使样本尽可能好分的投影方向,就是要使投影后使得同类样本尽可能近,不同类样本尽可能远。
上面大致讲解的LDA的基本思想,以及与PCA的不同,下面就来介绍一下LDA模型。
LDA模型
LDA模型实现基本思想是和PCA相同的,都是向低维空间做投影,所以对于向量投影的基本的知识,这里就不再进行讲解了,不懂得同学可以参看文章开头提到的那篇PCA的博客。
符号
- x : 表示训练样本,使用列向量表示
- xji x i j :表示第i类中的第j个样本
- C:表示有C类样本
- μi μ i :表示第i类训练样本的均值 (i=1,2,…,C)
- Mi M i :表示第i类训练样本的数目
- M M :表示训练样本的总数目 M=∑Ci=0Mi M = ∑ i = 0 C M i
- μ μ :是所有样本的均值向量 μ=1M∑Mi=1xi=1C∑Ci=1μi μ = 1 M ∑ i = 1 M x i = 1 C ∑ i = 1 C μ i
- Di D i :表示第i类样本集合
- Sw S w :表示类内散度矩阵,w是within的简写
- Sb S b :表示类间散度矩阵,b是between的简写
优化目标
为什么是线性判别分析呢?所谓的线性就是,我们要将数据点投影到直线上(可能是多条直线),直线的函数解析式又称为线性函数。通常直线的表达式为
y=wTx y = w T x
其实这里的x就是样本向量(列向量),如果投影到一条直线上w就是一个特征向量(列向量形式)或者多个特征向量构成的矩阵。至于w为什么是特征向量,后面我们就能推导出来。y为投影后的样本点(列向量)。
我们首先使用两类样本来说明,然后再推广至多类问题。
将数据投影到直线w上,则两类样本的中心在直线上的投影分别为
wTμ0 w T μ 0 和
wTμ1 w T μ 1 ,若将所有的样本点都都投影到直线上,则两类样本的协方差分别为
wT∑0w w T ∑ 0 w 和
wT∑1w w T ∑ 1 w .
投影后同类样本协方差矩阵的求法:
∑x∈Di(wTx−wTui)2=∑x∈Di(wT(x−ui))2=∑x∈DiwT(x−μi)(x−ui)Tw=wT∑x∈Di[(x−μi)(x−ui)T]w ∑ x ∈ D i ( w T x − w T u i ) 2 = ∑ x ∈ D i ( w T ( x − u i ) ) 2 = ∑ x ∈ D i w T ( x − μ i ) ( x − u i ) T w = w T ∑ x ∈ D i [ ( x − μ i ) ( x − u i ) T ] w
上式的中间部分
∑x∈Di(x−μi)(x−ui)T ∑ x ∈ D i ( x − μ i ) ( x − u i ) T 便是同类样本投影前的协方差矩阵。由还可以看出同类样本投影前后协方差矩阵之间的关系。如果投影前的协方差矩阵为
Σ Σ 则投影后的为
wTΣw w T Σ w .
上式的推导需要用到如下公式: a,b a , b 都是列向量, (a⋅b)2=(aTb)2=(aTb)(aTb)=(aTb)(aTb)T=aTbbTa ( a ⋅ b ) 2 = ( a T b ) 2 = ( a T b ) ( a T b ) = ( a T b ) ( a T b ) T = a T b b T a .
欲使同类样例的投影点尽可能接近,可以让同类样本点的协方差矩阵尽可能小,即
wT∑0w+wT∑1w w T ∑ 0 w + w T ∑ 1 w 尽可能小;
而欲使异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大,即
||wTμ0−wTμ1||22 | | w T μ 0 − w T μ 1 | | 2 2 尽可能大。同时考虑二者,则可得到欲最大化的目标
J=||wTμ0−wTμ1||22wT(∑0+∑1)w=wT(μ0−μ1)(μ0−μ1)TwwT(∑0+∑1)w J = | | w T μ 0 − w T μ 1 | | 2 2 w T ( ∑ 0 + ∑ 1 ) w = w T ( μ 0 − μ 1 ) ( μ 0 − μ 1 ) T w w T ( ∑ 0 + ∑ 1 ) w
上式中的
||⋅|| | | ⋅ | | 表示欧几里得范数,
||x−μi||2=(x−μi)T(x−μi) | | x − μ i | | 2 = ( x − μ i ) T ( x − μ i )
协方差与样本分布的关系
上面的这段话来自于周志华老师的机器学习书籍,不知道大家对上面的这段话是否存在疑问? 我在阅读 的时候是存在疑问的,即为什么同类样本点的协方差矩阵尽可能小,同类样例的投影点就尽可能接近。我想大概是这样的:我们在最初接触协方差是用来表示两个变量的相关性,我们来看一下协方差和方差的公式:
cov=1n∑(X−X¯)(Y−Y¯) c o v = 1 n ∑ ( X − X ¯ ) ( Y − Y ¯ )
cov=1n∑(X−X¯)(X−X¯) c o v = 1 n ∑ ( X − X ¯ ) ( X − X ¯ )
可以看到协方差的公式和方差十分相近,甚至可以说方差是协方差的一种特例。我们知道方差可以用来度量数据的离散程度,
(X−X¯) ( X − X ¯ ) 越大,表示数据距离样本中心越远,数据越离散,数据的方差越大。同样我们观察,协方差的公式,
(X−X¯) ( X − X ¯ ) 和
(Y−Y¯) ( Y − Y ¯ ) 越大,表示数据距离样本中心越远,数据分布越分散,协方差越大。相反他们越小表示数据距离样本中心越近,数据分布越集中,协方差越小。
所以协方差不仅是反映了变量之间的相关性,同样反映了多维样本分布的离散程度(一维样本使用方差),协方差越大(对于负相关来说是绝对值越大),表示数据的分布越分散。所以上面的
“欲使同类样例的投影点尽可能接近,可以让同类样本点的协方差矩阵尽可能小”就可以理解了。
类间散度矩阵
类间散度矩阵其实就是协方差矩阵乘以样本数目,即散度矩阵与协方差矩阵只是相差一个系数。对于协方差矩阵和散度矩阵有疑问的同学可以参考博文:机器学习中的数学(3)——协方差矩阵和散布(散度)矩阵
对于两类样本而言:
Sb=(μ0−μ1)(μ0−μ1)T S b = ( μ 0 − μ 1 ) ( μ 0 − μ 1 ) T
对于多类问题,类间散度矩阵公式:
Sb=∑i=1C(μi−μ)(μi−μ)T S b = ∑ i = 1 C ( μ i − μ ) ( μ i − μ ) T
表示各个类样本均值的协方差矩阵。
如果我们只使用这样一个类间散度矩阵这样一个约束条件来对数据进行降维:即使得类间的样本投影后尽可能远离。那么参考PCA的降维过程:
Sbu=λu S b u = λ u
不同的是,为了保证类间的样本投影后尽可能远离,我们应该选择特征值最大的特征向量代表的方向做投影。这样才能保证,不同类样本投影之后方差尽可能地大,尽可能能地远离。
类内散度矩阵
对于两类问题而言:
Sw=Σ0+Σ1=∑x∈D0(x−μ0)(x−u0)T+∑x∈D1(x−μ1)(x−u1)T S w = Σ 0 + Σ 1 = ∑ x ∈ D 0 ( x − μ 0 ) ( x − u 0 ) T + ∑ x ∈ D 1 ( x − μ 1 ) ( x − u 1 ) T
对于多类问题类内散度矩阵公式:
Sw=∑i=1C∑j=1Mi(xji−μi)(xji−μ1)T S w = ∑ i = 1 C ∑ j = 1 M i ( x i j − μ i ) ( x i j − μ 1 ) T
其中:
∑j=1Mi(xji−μi)(xji−μi)T ∑ j = 1 M i ( x i j − μ i ) ( x i j − μ i ) T
表示第i类样本的协方差矩阵。所以
Sw S w 就是表示C类样本协方差矩阵之和。
如果我们只使用这样一个类内散度矩阵这样一个约束条件来对数据进行降维:即使得类内的样本投影后尽可能接近。那么参考PCA的降维过程:
Swu=λu S w u = λ u
不同的是,为了保证类内的样本投影后尽可能接近,我们应该选择特征值最小的特征向量代表的方向做投影。这样才能保证,同类样本投影之后方差尽可能地小,尽可能能地接近。
优化
定义过类内散度矩阵和类间散度矩阵后,我们可以将上述的优化目标重新写为:
J=wTSbwwTSww J = w T S b w w T S w w
这就是LDA欲最大化的目标,即
Sb S b 与
Sw S w 的广义瑞利商。
如何确定
w w 呢?注意到上式的分子和分母都是关于
w w 的二次项,因此上式的解与
w w 的长度无关,只与其方向有关.不失一般性,令
wTSww=1 w T S w w = 1 ,则上式等价于:
minw−wTSbw m i n w − w T S b w
st.wTSww=1 s t . w T S w w = 1
使用拉格朗日乘子法,(对于拉格朗日乘子法不太了解的同学可以参考博文: 机器学习中的数学(5)——拉格朗日乘子法和KKT条件)上式等价于:
c(w)=wTSbw−λ(wTSww−1) c ( w ) = w T S b w − λ ( w T S w w − 1 )
dcdw=2Sbw−2λSww=0 d c d w = 2 S b w − 2 λ S w w = 0
Sbw=λSww S b w = λ S w w
S−1wSbw=λw S w − 1 S b w = λ w
可以看到上式就有转化为一个求解特征值和特征向量的问题了。w就是我们要求解的特征向量,这就验证了我们之前所说的式子
y=wTx y = w T x 中的w就是特征向量构成的矩阵。
但是到这里我们仍然有个问题需要解决,那就是
Sw S w 是否可逆。遗憾的是在实际的应用中,它通常是不可逆的,我们通常有连个办法解决该问题。
拓展
解决方法一:
令 Sw=Sw+γI S w = S w + γ I , 其中 γ γ 是一个特别小的数,这样 Sw S w 一定可逆。
解决方法二:
先使用PCA对数据进行降维,使得在降维后的数据上 Sw S w 可逆,在使用LDA。
参考文献
1.机器学习-线性判别分析.周志华x
2.机器学习中的数学(4)-线性判别分析(LDA), 主成分分析(PCA)