线性判别分析(LDA)学习笔记

来源:互联网 发布:金山数据恢复充值 编辑:程序博客网 时间:2024/06/09 19:55

线性判别分析

线性判别分析又称为Fisher判别分析,因为其最早是由Fisher提出来处理二分类问题。线性判别分析的思想非常的简单,其就是要确定一条直线,当所有样本点投影到该条直线上的时候,能够保证同类样本的投影点尽可能集中,而不同类的样本的投影点则相聚较远。当有一个新样本来的时候,可以将该样本投影到这条直线上并归类到最近的类别中心所在类。
假设我们现在样本点归属于两个类A和B,这两类样本的均值向量分别为μAμB,方差分别为ΣAΣB,又假设我们现在已经确定了一条直线y=ωTx,那么这两类样本到直线投影点的中心分别为ωTμAωTμB,两类样本的协方差分别为ωTΣAωωTΣBω。直线与样本的关系如下图所示:
这里写图片描述

我们可以看到我们希望所寻找的直线能够使得同类样本在直线上的投影尽可能的近,而不同类样本之间的距离尽可能的远。对于同类样本,我们利用协方差来衡量样本投影点之间的密集程度,而不同类样本,则是利用另个列别中心的距离来衡量。故我们可以得到想要最大化的目标是

J=(ωTμAωTμb)(ωTμAωTμb)TωTΣAω+ωTΣBω=ωT(μAμB)(μAμB)TωωT(ΣA+ΣB)ω

Sb=(μAμB)(μAμB)TSω=ΣA+ΣB,其中Sb称为类间散度矩阵,Sω称为类内散度矩阵。这样我们的优化目标就可以转为
J=ωTSbωωTSωω
又因为参数ω可以放大或缩小任意的倍数,因此一个最优J可能会对应无数个参数值,因此我们在这里对该优化目标做一个归一化,即令分母ωTSωω=1,这样我们的优化目标就又转化为了待条件的极值问题:
mins.t.ωTSbωωTSωω=1

这样我们就得到一个拉格朗日函数
F=ωTSbω+λ(ωTSωω1)
让该函数关于参数ω求导可得
δFδω=(Sbω+STbω)+λ(Sωω+STωω)
又因为Sb=STb,Sω=STω,并令导数为0有:
Sbω=λSωω
Sb展开有:
(μAμB)(μAμB)Tω=λSωω(μAμB)λω=λSωωω=S1ω(μAμB)

这里说明两点:

  1. (μAμB)Tω为一个常数;
  2. 因为ω可以任意的放大或缩小,因此我们可以直接将等号两边的λλω约掉,相当于将参数ω放大了λωλ

这样我们就可以得到最优的参数解,如果矩阵Sω的逆,通常会利用奇异值分解(SVD)来求得。
对于多分类问题,我们也可以使用类似的思想来进行训练,类内散度矩阵不变,即我们依然要让各个类投影到直线上的点尽可能的聚集在一起,而类间散度矩阵则需要改变,因为此时是多个类的样本的投影,而原有的类间散度矩阵衡量的是两个类之间的距离。令μ为所有样本的样本均值,而μi则表示第i类样本的样本均值,此时我们可以定义另一种类间散度矩阵

Sb=i=1Nmi(μiμ)(μiμ)T
这种类间散度矩阵衡量的是各个类别中心距离总体样本类别中心的散列情况,mi表示第i类的样本个数,在矩阵前面乘mi表示样本个数越多的类别,其比重越大,也就越重要。因为我们此时得到的都是矩阵而不再像二分类里面的实数,因此此时的优化目标为:
J=|ωTSbω||ωTSωω|
J=tr(ωTSbω)tr(ωTSωω)
这两个优化目标都可以转化为
Sbω=λSωω
对其进行一下变换有:
S1ωSbω=λω
可以看到参数ω的值为矩阵S1ωSb的特征向量组成的矩阵。因为特征向量的个数通常要远远少于原有数据特征的个数,因此线性判别分析也被视为一种经典的监督降维技术。

0 0
原创粉丝点击