线性判别分析(Linear Discriminant Analysis, LDA),也叫 做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别的经典算法,1936年由Ronald Fisher首次提出,并在1996年由Belhumeur引入模式识别和人工智能领域。

一、基本思想

线性判别分析的基本思想是将高维的模式样本投影到最佳低维鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果。 投影后保证模式样本在新的子空间有最大的类间距离和最小的类内距离,即模式在该空间中有最佳的可分离性。因此,它是一种有效的特征抽取方法。使用这种方法能够使投 影后模式样本的类间散布矩阵最大,并且同时类内散布矩阵最小。
**
降维-线性判别分析(LDA) - 图1

可以看到两个类别,一个绿色类别,一个红色类别。左图是两个类别的原始数据,现在要求将数据从二维降维到一维。直接投影到x1x1轴或者x2x2轴,不同类别之间会有重复,导致分类效果下降。右图映射到的直线就是用LDA方法计算得到的,可以看到,红色类别和绿色类别在映射之后之间的距离是最大的,而且每个类别内部点的离散程度是最小的(或者说聚集程度是最大的)。

二、LDA vs PCA

LDA与PCA(主成分分析)都是常用的降维技术。PCA主要是从特征的协方差角度,去找到比较好的投影方式。LDA更多的是考虑了标注,即希望投影后不同类别之间数据点的距离更大,同一类别的数据点更紧凑。
降维-线性判别分析(LDA) - 图2

三、LDA算法具体推导

要说明白LDA,首先得弄明白线性分类器(Linear Classifier):因为LDA是一种线性分类器。对于K-分类的一个分类问题,会有K个线性函数:
降维-线性判别分析(LDA) - 图3

当满足条件:对于所有的 jj,都有降维-线性判别分析(LDA) - 图4的时候,我们就说降维-线性判别分析(LDA) - 图5属于类别降维-线性判别分析(LDA) - 图6。对于每一个分类,都有一个公式去算一个分值,在所有的公式得到的分值中,找一个最大的,就是所属的分类。

仔细研究一下上式,就会发现上式实际上就是一种投影,是将一个高维的点投影到一条高维的直线上。LDA最求的目标是,给出一个标注了类别的数据集,投影到了一条直线之后,能够使得点尽量的按类别区分开,当降维-线性判别分析(LDA) - 图7即二分类问题的时候,如下图所示:
降维-线性判别分析(LDA) - 图8
黄色的五角形点为0类的原始点、蓝色的圆形点为1类的原始点,经过原点的那条红线就是投影的直线。从图上可以清楚的看到,经过LDA降维处理,黄色的点和蓝色的点被原点明显的分开了。

下面我来推导一下二分类LDA问题的公式。为简化起见,假设用来区分二分类的直线(投影函数)为:
降维-线性判别分析(LDA) - 图9

LDA分类的一个目标是使得不同类别之间的距离越远越好, 同一类别之中的距离越近越好,所以我们需要定义几个关键的值:

  • 类别ii的原始中心点(均值)为(降维-线性判别分析(LDA) - 图10表示属于类别ii的点集合,降维-线性判别分析(LDA) - 图11:

降维-线性判别分析(LDA) - 图12

  • 类别ii投影后的中心点为:降维-线性判别分析(LDA) - 图13
  • 衡量类别ii投影后,类别点之间的分散程度(方差)为:

降维-线性判别分析(LDA) - 图14

  • 最终我们可以得到一个下面的公式,表示LDA投影到ww后的目标优化函数:
  1. ![](https://cdn.nlark.com/yuque/__latex/2f112cd7f60b11817a37c276ebe93b0d.svg#card=math&code=J%28w%29%3D%7Cm%C2%AF1%E2%88%92m%C2%AF2%7C2s%C2%AF1%2Bs%C2%AF2.J%28w%29%3D%7Cm%C2%AF1%E2%88%92m%C2%AF2%7C2s%C2%AF1%2Bs%C2%AF2.&height=20&width=469)
  2. 分母表示每一个类别内的方差之和,方差越大表示一个类别内的点越分散,分子为两个类别各自的中心点的距离的平方,我们最大化![](https://cdn.nlark.com/yuque/__latex/31ae056cd71f393901faa9a7d6b38765.svg#card=math&code=J%28w%29&height=20&width=36)就可以求出最优的![](https://cdn.nlark.com/yuque/__latex/f1290186a5d0b1ceab27f4e77c0c5d68.svg#card=math&code=w&height=12&width=12)。

四、LDA优化问题求解

定义一个投影前的各类别分散程度的矩阵降维-线性判别分析(LDA) - 图15,这个矩阵看起来有一点麻烦,其实意思是:如果某一个分类的输入点集降维-线性判别分析(LDA) - 图16里面的点距离这个分类的中心点降维-线性判别分析(LDA) - 图17越近,则降维-线性判别分析(LDA) - 图18里面元素的值就越小,如果分类的点都紧紧地围绕着降维-线性判别分析(LDA) - 图19,则降维-线性判别分析(LDA) - 图20里面的元素值越更接近0:
降维-线性判别分析(LDA) - 图21

带入降维-线性判别分析(LDA) - 图22,将降维-线性判别分析(LDA) - 图23分母化为:
降维-线性判别分析(LDA) - 图24

降维-线性判别分析(LDA) - 图25

同样的将降维-线性判别分析(LDA) - 图26分子化为:

降维-线性判别分析(LDA) - 图27

这样目标优化函数可以化成下面的形式:
降维-线性判别分析(LDA) - 图28

注意分子分母都是关于降维-线性判别分析(LDA) - 图29的二次项,因此降维-线性判别分析(LDA) - 图30的解与降维-线性判别分析(LDA) - 图31的长度无关,只与其方向有关(如将降维-线性判别分析(LDA) - 图32扩大降维-线性判别分析(LDA) - 图33倍,分子分母同时扩大降维-线性判别分析(LDA) - 图34倍,可直接约掉)。不是一般性,令降维-线性判别分析(LDA) - 图35,则无约束优化问题降维-线性判别分析(LDA) - 图36变成如下有约束优化问题:
降维-线性判别分析(LDA) - 图37
由拉格朗日乘子法,上式等价于
降维-线性判别分析(LDA) - 图38

注意到降维-线性判别分析(LDA) - 图39的方向恒为降维-线性判别分析(LDA) - 图40,不妨令
降维-线性判别分析(LDA) - 图41

则可得
降维-线性判别分析(LDA) - 图42

因此求得ww为
降维-线性判别分析(LDA) - 图43
对于降维-线性判别分析(LDA) - 图44分类的问题,假定样本数目为NN,每个类别的样本数降维-线性判别分析(LDA) - 图45,就可以直接写出以下的结论:
降维-线性判别分析(LDA) - 图46

若将问题向量化,求解问题变成:降维-线性判别分析(LDA) - 图47。这同样是一个求特征值的问题,求出的第ii大的特征向量,即为对应的降维-线性判别分析(LDA) - 图48

五、LDA算法实战(R语言)

  1. data(iris)
  2. attach(iris)
  3. summary(iris)
  4. library(MASS)
  5. irislad<-lda(iris[,c(1:4)],Species)
  6. predict(irislad)
  7. predict(irislad)$x #lists the linear discriminent scores for each sample
  8. predict(irislad)$posterior #lists the probabilities that a sample belongs to a specific classification grouo
  9. predict(irislad)$class #shows the classification group
  10. table(iris$Species,predict(irislad)$class)
  11. chisq.test(iris$Species,predict(irislad)$class)
  12. ##plot the Untrained Data(n=150) by LDA coordinates
  13. plot(predict(irislad)$x,type="n",xlab="LD I",ylab="LD II",main=" Untrained Iris LDA(n=150)")
  14. text(predict(irislad)$x,levels(predict(irislad)$class)[predict(irislad)$class],col=unclass(iris$Species),cex=1.5)
  15. abline(h=0);abline(v=0)

降维-线性判别分析(LDA) - 图49