转载:https://blog.csdn.net/liuweiyuxiang/article/details/78874106?utm_source=app

介绍

LDA,即线性判别分析(linear discriminant analysi),当然在NLP中,这个简写也常被认为是Latent Dirichlet allocation。LDA是一种常用的有监督降维手段,与之相对应的是PCA(无监督降维)。

为什么要用LDA

前面的博客提到PCA是常用的有效的数据降维的方法,与之相同的是LDA也是一种将数据降维的方法。PCA已经是一种表现很好的数据降维的方法,那为什么还要有LDA呢?下面我们就来回答这个问题?

PCA是一种无监督的数据降维方法,与之不同的是LDA是一种有监督的数据降维方法。我们知道即使在训练样本上,我们提供了类别标签,在使用PCA模型的时候,我们是不利用类别标签的,而LDA在进行数据降维的时候是利用数据的类别标签提供的信息的。

从几何的角度来看,PCA和LDA都是讲数据投影到新的相互正交的坐标轴上。只不过在投影的过程中他们使用的约束是不同的,也可以说目标是不同的。PCA是将数据投影到方差最大的几个相互正交的方向上,以期待保留最多的样本信息。样本的方差越大表示样本的多样性越好,在训练模型的时候,我们当然希望数据的差别越大越好。否则即使样本很多但是他们彼此相似或者相同,提供的样本信息将相同,相当于只有很少的样本提供信息是有用的。样本信息不足将导致模型性能不够理想。这就是PCA降维的目标:将数据投影到方差最大的几个相互正交的方向上。这种约束有时候很有用,比如在下面这个例子:
机器学习降维之LDA

对于这个样本集我们可以将数据投影到x轴或者y轴,但这都不是最佳的投影方向,因为这两个方向都不能最好地反映数据的分布。很明显还存在最佳的方向可以描述数据的分布趋势,那就是图中红色直线所在的方向。也是数据样本做投影,方差最大的方向。向这个方向做投影,投影后数据的方差最大,数据保留的信息最多。

但是,对于另外的一些不同分布的数据集,PCA的这个投影后方差最大的目标就不太合适了。比如对于下面图片中的数据集:

机器学习降维之LDA

针对这个数据集,如果同样选择使用PCA,选择方差最大的方向作为投影方向,来对数据进行降维。那么PCA选出的最佳投影方向,将是图中红色直线所示的方向。这样做投影确实方差最大,但是是不是有其他问题。聪明的你一定发现了,这样做投影之后两类数据样本将混合在一起,将不再线性可分,甚至是不可分的。这对我们来说简直就是地狱,本来线性可分的样本被我们亲手变得不再可分。

帅气英俊的你也一定发现了,图中还有一条耀眼的黄色直线,向这条直线做投影即能使数据降维,同时还能保证两类数据仍然是线性可分的。上面的这个数据集如果使用LDA降维,找出的投影方向就是黄色直线所在的方向。
这其实就是LDA的思想,或者说LDA降维的目标:将带有标签的数据降维,投影到低维空间同时满足三个条件:

  • 尽可能多地保留数据样本的信息(即选择最大的特征是对应的特征向量所代表的的方向)。
  • 寻找使样本尽可能好分的最佳投影方向。
  • 投影后使得同类样本尽可能近,不同类样本尽可能远。

其实第二个和第三个条件是基本等价的,我们很容易想到,使样本尽可能好分的投影方向,就是要使投影后使得同类样本尽可能近,不同类样本尽可能远。

上面大致讲解的LDA的基本思想,以及与PCA的不同,下面就来介绍一下LDA模型。

LDA模型

LDA模型实现基本思想是和PCA相同的,都是向低维空间做投影,所以对于向量投影的基本的知识,这里就不再进行讲解了,不懂得同学可以参看文章开头提到的那篇PCA的博客。

符号

  • x: 表示训练样本,使用列向量表示
  • xijx_i^j:表示第i类中的第j个样本
  • C:表示有C类样本
  • μi\mu_i:表示第i类训练样本的均值(i=1, 2, …, C)
  • MiM_i:表示第i类训练样本的数目
  • MM:表示训练样本的总数目 M=i=0CMiM = \sum_{i=0}^C M_i
  • μ\mu:是所有样本的均值向量 μ=1Mi=1Mxi=1Ci=0Cμi\mu = \frac 1 M \sum_{i=1}^M x_i = \frac 1 C \sum_{i=0}^C \mu_i
  • DiD_i:表示第i类样本集合
  • SwS_w:表示类内散度矩阵,w是within的简写
  • SbS_b:表示类间散度矩阵,b是between的简写

优化目标

为什么是线性判别分析呢?所谓的线性就是,我们要将数据点投影到直线上(可能是多条直线),直线的函数解析式又称为线性函数。通常直线的表达式为
y=wTx y = w^Tx

其实这里的x就是样本向量(列向量),如果投影到一条直线上w就是一个特征向量(列向量形式)或者多个特征向量构成的矩阵。至于w为什么是特征向量,后面我们就能推导出来。y为投影后的样本点(列向量)。
我们首先使用两类样本来说明,然后再推广至多类问题。

将数据投影到直线w上,则两类样本的中心在直线上的投影分别为wTμ0w^T\mu_0wTμ1w^T\mu_1,若将所有的样本点都都投影到直线上,投影后同类样本协方差矩阵的求法:
xDi(wTxwTμi)2=xDi(wT(xμi))2=xDi(wT(xμi))(wT(xμi))T=xDiwT(xμi)(xμi)Tw \sum_{x\in D_i} (w^Tx - w^T\mu_i)^2 = \sum_{x\in D_i} (w^T(x-\mu_i))^2 = \sum_{x\in D_i} (w^T(x-\mu_i))(w^T(x-\mu_i))^T = \sum_{x\in D_i} w^T(x-\mu_i)(x-\mu_i)^Tw
上式的中间部分xDi(xμ)(xμ)T\sum_{x\in D_i} (x−\mu)(x−\mu)^T便是同类样本投影前的协方差矩阵。由还可以看出同类样本投影前后协方差矩阵之间的关系。如果投影前的协方差矩阵为\sum,则投影后的为wTww^T\sum w。则两类样本的协方差分别为wT0ww^T\sum_0wwT1ww^T\sum_1w

欲使同类样例的投影点尽可能接近,可以让同类样本点的协方差矩阵尽可能小,即wT0w+wT1ww^T\sum_0w + w^T\sum_1w尽可能小; 而欲使异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大,即wTμ0wTμ1|w^T\mu_0 - w^T\mu_1|尽可能大。同时考虑二者,则可得到欲最大化的目标:
J=wTμ0wTμ12wT(0w+1)w=wT(μ0μ1)(μ0μ1)TwwT(0+1)w J = \frac {||w^T\mu_0 - w^T\mu_1||^2} {w^T(\sum_0w +\sum_1)w} = \frac {w^T(\mu_0 - \mu_1)(\mu_0 - \mu_1)^Tw} {w^T(\sum_0 + \sum_1)w}

协方差与样本分布的关系

上面的这段话来自于周志华老师的机器学习书籍,不知道大家对上面的这段话是否存在疑问? 我在阅读 的时候是存在疑问的,即为什么同类样本点的协方差矩阵尽可能小,同类样例的投影点就尽可能接近。我想大概是这样的:我们在最初接触协方差是用来表示两个变量的相关性,我们来看一下协方差和方差的公式:
cov=1n(XX)(YY) cov = \frac 1 n \sum (X-\overline{X})(Y-\overline{Y})
cov=1n(XX)(XX) cov = \frac 1 n \sum (X-\overline{X})(X-\overline{X})

可以看到协方差的公式和方差十分相近,甚至可以说方差是协方差的一种特例。我们知道方差可以用来度量数据的离散程度,(XX)(XX)(X-\overline{X})(X-\overline{X})越大,表示数据距离样本中心越远,数据越离散,数据的方差越大。同样我们观察,协方差的公式,XXX-\overline{X}YYY-\overline{Y}越大,表示数据距离样本中心越远,数据分布越分散,协方差越大。相反他们越小表示数据距离样本中心越近,数据分布越集中,协方差越小。
所以协方差不仅是反映了变量之间的相关性,同样反映了多维样本分布的离散程度(一维样本使用方差),协方差越大(对于负相关来说是绝对值越大),表示数据的分布越分散。所以上面的“欲使同类样例的投影点尽可能接近,可以让同类样本点的协方差矩阵尽可能小”就可以理解了。

类间散度矩阵

类间散度矩阵其实就是协方差矩阵乘以样本数目,即散度矩阵与协方差矩阵只是相差一个系数。
对于两类样本而言:
Sb=(μ0μ1)(μ0μ1)T S_b = (\mu_0 - \mu_1)(\mu_0 - \mu_1)^T

类内散度矩阵

对于两类问题而言:
Sw=0+1=xD0(xμ0)(xμ0)T+xD1(xμ1)(xμ1)T S_w = \sum_0 + \sum_1 = \sum_{x\in D_0} (x-\mu_0)(x-\mu_0)^T + \sum_{x\in D_1} (x-\mu_1)(x-\mu_1)^T

优化

定义过类内散度矩阵和类间散度矩阵后,我们可以将上述的优化目标重新写为:
J=wTSbwwTSww J = \frac {w^TS_bw} {w^TS_ww}
这就是LDA欲最大化的目标,即SbS_bSwS_w的广义瑞利商。

如何确定w呢?注意到上式的分子和分母都是关于ww的二次项,因此上式的解与w的长度无关,只与其方向有关(这个地方不太理解).不失一般性,令wTSwww^TS_ww=1,则上式等价于:
minwwTSbw min_w - w^TS_bw
st.wTSww=1 st. w^TS_ww = 1
使用拉格朗日乘子法,上式等价于:
c(w)=wTSbwλ(wTSww1) c(w) = w^TS_bw - \lambda(w^TS_ww - 1)
dcdw=2Sbw2λSww=0 \frac {dc} {dw} = 2S_bw-2\lambda S_ww = 0
Sbw=λSww S_bw = \lambda S_ww
Sw1Sbw=λw S_w^{-1}S_bw = \lambda w

可以看到上式就有转化为一个求解特征值和特征向量的问题了。w就是我们要求解的特征向量,这就验证了我们之前所说的式子y=wTxy=wTx中的w就是特征向量构成的矩阵。
但是到这里我们仍然有个问题需要解决,那就是SwSw是否可逆。遗憾的是在实际的应用中,它通常是不可逆的,我们通常有连个办法解决该问题。

拓展

解决方法一:
Sw=Sw+λIS_w = S_w + \lambda I, 其中{\lambda}是一个特别小的数,这样SwS_w一定可逆。
解决方法二:
先使用PCA对数据进行降维,使得在降维后的数据上SwS_w可逆,在使用LDA。

相关文章: