机器学习入门学习笔记:(2.4)线性判别分析理论推导

LDA

  线性判别分析(Linear Discriminant Analysis, 简称LDA),最早由Fisher提出,也叫“Fisher判别分析”。
  线性判别分析的思想:给定样本数据集,设法将样本投影到某一条直线上,使得同类样本的投影点尽可能接近,异类样本的投影点尽可能远;在对新的点进行分类预测时,将其投影到这条直线上,根据投影点的位置来判断样本的类别。
  当x是二维时,我们就要寻找一个方向为 ω 的直线来使得这些样本点的投影分离。
这里写图片描述

二分类情况

  先只考虑二分类情况,给出数据集 {xi,yi}mi=1,yi={0,1}
  设有 N0 个样本的标签 yi=0 ,其类别为 D0 N1 个样本的标签 yi=1 ,其类别为 D1
  则分别对应类别 D0 D1 的均值向量 μ0 μ1 可以求出来:

μ0=1N0(x,y)D0xi
μ1=1N1(x,y)D1xi

  再给出一组新的度量值,称作散度值(scatter):
s0=(x,y)D0(xiμ0)2s1=(x,y)D1(xiμ1)2

  这东西看上去很眼熟吧,不就是方差,少除了样本数量吗?因为这里只需要定量表示样本集合的分散程度,对常数系数不敏感,所以方差中上面的部分就足够了。

  给出一组参数 ω ,假设值为: h(xi)=ωTxi ,后面简写为 hi=ωTxi
  在线性回归中,我们的目标是使得这个假设值等于样本的标签 yi
而线性判别分析中,假设值 hi 实质上是样本 xi w 上的投影的长度;以二维情况考虑,就是样本xi对应的点 (xi1,xi2) 到直线 ω 的投影点到原点的长度。我们的目标是通过区分这个”长度“ hi
再放一次这幅图,看看图不难理解:
这里写图片描述

  接着,根据 ω 可以求出投影后的样本均值 μ0~ μ1~

μ0~=1N0(x,y)D0hi=1N0(x,y)D0ωTxi=ωT1N0(x,y)D0xi=ωTμ0

  同理得:
μ1~=ωTμ1

  还有,投影后的散度矩阵(scatter):

s0~=1N0(x,y)D0(hiμ0~)2=1N0(x,y)D0(ωTxiωTμ0)2=1N0(x,y)D0ωT(xiμ0)2ω=ωT1N0(x,y)D0(xiμ0)2ω=ωTs0ωT

  同理得:
s1~=ωTs1ω

  回到最开始说的思想:希望同类样例的投影点尽可能接近,即散度矩阵尽可能小,也即 s0~ s1~ 都要尽可能小,简单表示为 s0~+s1~ ;异类样例的投影点尽可能远,也即均值差值尽可能大, (μ0~μ1~)2 尽可能大;
  同时考虑上面两个条件,可以给出一个目标函数:

J=(μ0~μ1~)2s0~+s1~

  代入前面求出的 μ0~ μ1~ s0~ s1~ :
J=(ωTμ0ωTμ1)2ωTs0ω+ωTs1ω=ωT(μ0μ1)2ωωTs0ω+ωTs1ω=ωT(μ0μ1)T(μ0μ1)ωωT(s0+s1)ω

  这坨东西看得挺复杂的,定义类内散度矩阵(within-class scatter matrix):

Sω=S0+S1=(x,y)D0(xiμ0)2+(x,y)D1(xiμ1)2=(x,y)D0(xiμ0)T(xiμ0)+(x,y)D1(xiμ1)T(xiμ1)

  还有定义类间散度矩阵(between-class scatter matrix):
Sb=(μ0μ1)2=(μ0μ1)T(μ0μ1)

  则优化的目标函数变为:
J=ωTSbωωTSωω

  这个东西就是LDA希望最大化的目标,实质是 Sb Sω 的“广义瑞利商”(generalized Rayleigh quotient)。

  好的,接下来的任务就是通过 J 来确定最优的ω
  观察式子可以发现, J 的大小不随ω的大小变化,上下都是 ω 的二次项相互抵消,结果而只与其方向有关。
  所以可以令 ωTSωω=1 ,则式子等价于:

minωωTSbωs.t.ωTSωω=1

  使用拉格朗日乘子法:
  设未知数 λ ,写出拉格朗日函数:
L(ω)=ωTSbωλ(ωTSωω1)

  对拉格朗日函数求导,且导数为0:
dL(ω)dω=2Sbω2λSωω=0

  矩阵求导中 ωTSbω 可以简单看作是 Sbω2
  得到结果:
Sbω=λSωω

  这是一个典型的求矩阵特征值的问题。
  从前面的公式:
J=ωTSbωωTSωω

  我们知道 ω 的大小并不影响结果,而是方向才会影响结果。
  另外,由这个式子:
Sbω=(μ0μ1)(μ0μ1)Tω

  观察发现 Sbω 的方向恒为 μ0μ1 ,因为任取其中一个 (μ0μ1)T ω 相乘之后是常数,总会剩下一个 μ0μ1
  所以,设一个新的常量 λω ,使得:
Sbω=(μ0μ1)λω

  回到前面拉格朗日方程求导得到的结果:

Sbω=λSωω

  得到:

(μ0μ1)λω=λSωω

  若 ω 可逆,则有:
ω=λωλS1ω(μ0μ1)

  注意,由于最后结果只与 ω 的方向有关,与其大小无关;而这个结果前面的常量 λωλ 可以舍去:
ω=S1ω(μ0μ1)

  这个就是最终的结果。
  前面已经推导出了 Sω μ0 μ1 ,代入即可。我们只要有散度矩阵和均值即可求出最优的 ω

  这里还有一点,考虑到数值解的稳定性,在实践中通常是对 Sω 进行奇异值分解,即 Sω=UΣVT ,这里 Σ 是一个实对角矩阵,其对角线上的元素是 Sω 的奇异值,然后再由 S1ω=VΣ1UT 得到 Sω 。(摘自西瓜书,没学矩阵论,发现好多不懂的)

多分类情况

  其实结果跟前面呢二分类差不多,不过是扩展到了多维情况下。
  假设存在 N 个类别,且第i类中的样本数表示为 mi
  定义 μ 为所有样本的均值向量,如图中就是二维下的情况。
这里写图片描述
   μi 表示第 i 类的所有样本的均值向量;Sωi表示第 i 类的散度矩阵,表示第i类相对于这一类的中心 μi 的分散程度。
  考虑所有类的情况,定义全局散度矩阵:

Sω=i=1NSωi

  展开类似与二分类的类内散度矩阵:
Sω=xXi(xμi)(xμi)T

  实质是将所有类别的散度矩阵加在一起。

  接下来考虑类间散度矩阵 Sb ,在二分类中,只考虑了两个均值点 μ0 μ1 的情况;现在在多分类情况下,考虑每个均值点 μi 与全局的均值点 μ 之间的距离。
  由于每个类别的样本数量不同会对全局均值点 μ 产生影响:

μ=1Nx=1Ni=0N(n=0mixn)

  注:共有 N 个类别,且第i类中的样本数为 mi
  所以还要引入加权求和,每个类的权值为: miNi=0mi 。由于 J 对倍数不敏感,所以可以把下面的总和去掉,直接使用mi表示权值。
  写出类间散度矩阵 Sb
Sb=i=1Nmi(μiμ)(μiμ)T

  与二分类时的步骤一样,求出投影后的 Sb Sω ,步骤就不作赘述了:
Sb~=ωTSbωSω~=ωTSωω

  好了,现在可以写出目标函数了:
  我们希望:同类样例的投影点尽可能接近,即散度矩阵尽可能小,也即 Sω~ 要尽可能小;异类样例的投影点尽可能远,也即类间距离尽可能大, Sb~ 尽可能大;
  写出与二分类时一样的目标函数:
Sb~Sω~=ωTSbωωTSωω

  由于我们得到的分子分母都是散列矩阵,要将矩阵变成实数,需要取行列式。又因为行列式的值实际上是矩阵特征值的积,一个特征值可以表示在该特征向量上的发散程度。因此我们使用行列式来计算(此处我感觉有点牵强,道理不是那么有说服力)。
J=Sb~Sω~=ωTSbωωTSωω

  现在又回到了求 J 的最大值的问题了,跟前面一样的步骤进行求解。
  使用拉格朗日乘子法,得到特征方程:
Sbω=λSωω

   强调内容接下来就是求矩阵的特征值的问题了,先求出矩阵 S1ωSb 的特征值,之后取前 N1 个特征向量,构成 ω 即可。(好吧,这又是个要填的“坑”)

参考资料:
1、《机器学习》周志华
2、线性判别分析(Linear Discriminant Analysis)(一)

写了快一下午了,满脑子数学公式,还有矩阵分析真的有必要补补了。
(~.~)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值