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

写在前面:本文主要内容是LDA在机器学习领域的公式推导,仅当作笔记使用。

1. 简介

  • LDA(Linear Discriminant Analysis)是一种经典的线性学习方法,该算法属于监督算法。

  • 给定训练集,设法将训练集投影到低维空间上,从而达到了降维的效果。
  • 投影的结果要使同类样例的投影点尽可能接近、异类的投影点尽可能远离(同类相近、异类远离原则)。
  • 下图给出了二维训练集投影到一维直线的效果图(图片来自《机器学习》周志华)LDA

2. 算法内容(二分类)

  • 给定数据集D=\left \{( x_{i},y_{i} )\right \}_{i=1}^{m},其中y_{i}\epsilon\left \{ 0,1 \right \}。并定义:
    • 第i类(1或0)示例的集合为X_{i}
    • 第i类示例集合的均值向量为\mu _{i}
    • 第i类示例集合的协方差矩阵\Sigma _{i}
    • 投影目标直线为\omega
    • 综上可以得到
      • 两类样本中心在\omega上的投影分别为\omega ^{T}\mu _{0}\omega^{T}\mu_{0}
      • 两类样本协方差分别为\omega ^{T}\Sigma _{0}\omega\omega^{T}\Sigma _{1}\omega
      • 直线为一维空间,则上述4项皆为实数
  • 考虑同类相近、异类远离的原则,则只尽量同时需要满足1.同类样本协方差尽可能小;2.异类样本中心点尽可能远离。
    • 协方差尽可能小即
      • min\ \omega^{T}\Sigma_{0}\omega + \omega^{T}\Sigma_{1}\omega
    • 中心店尽可能远离即
      • max \ \begin{Vmatrix} \omega^{T}\mu_{0}+\omega^{T}\mu_{1} \end{Vmatrix}_{2}^{2}
    • 二者结合起来考虑,令
      • J=\frac{\left \| \omega^{T}\mu_{0}-\omega^{T}\mu_1 \right \|^{2}_{2}}{\omega^{T}\Sigma_{0}\omega+\omega^{T}\Sigma_{1}\omega}=\frac{\omega^{T}(\mu_{0}-\mu_{1})(\mu_{0}-\mu_{1})^{T}\omega}{\omega^{T}(\Sigma_{0}+\Sigma_{1})\omega} (此处分子为欧几里德范式)
    • 定义两个矩阵:
      • 类内散度矩阵  
        • S_{w}=\Sigma_{0}+\Sigma_{1}=\sum _{x\epsilon X_{0}}(x-\mu_{0})(x-\mu_{0})^{T}+\sum _{x\epsilon X_{1}}(x-\mu_{1})(x-\mu_{1})^{T}
      • 类间散度矩阵
        • ​​​​​​​S_{b}=(\mu_{0}-\mu_{1})(\mu_{0}-\mu_{1})^{T}
      • 则J可以重写为
        • ​​​​​​​J=\frac{\omega^{T}S_{w}\omega}{\omega^{T}S_{b}\omega}
      • 此时J为LDA最大化的目标,亦被称为“广义瑞利熵”。
  • 接下来针对J需要确定\omega
    • 观察J的分子分母能够发现,最终的解与\omega长度无关,只和其方向有关系,即仅与\omega有关。令\omega^{T}S_{w}\omega=c,可将J式可以转换为:                          
      •  \begin{matrix} min\ -\omega^{T}S_{b}\omega\\ s.t.\ \omega^{T}S_{w}\omega=c \end{matrix}  其中c为常数
    • 利用拉格朗日乘子法,则上式可以进行推导:
      • L(w,\lambda)=w^{T}S_{b}w-\lambda (w^{T}S_{w}w-c) 其中\lambda为拉格朗日乘子。
      • \frac{\partial L(w,\lambda)}{\partial w}=S_{b}w-\lambda S_{w}w 对w^{T}求偏导,并令该式为0可得
      • S_{b}\omega^{*}=\lambda S_{w}\omega^{*}  其中w^{*}就是J的极值解。由于S_{w}非奇异,可将该式两边同乘S_{w}^{-1}得到
      •  S_{w}^{-1}S_{b}w^{*}=\lambda w^{*}, 此时问题转化为求矩阵S_{w}^{-1}S_{b}的特征值问题。利用S_{b}的定义,可以化为
      • S_{b}w^{*}=(\mu_{0}-\mu_{1})(\mu_{0}-\mu_{1})^{T}w^{*}=(\mu_{0}-\mu_{1})R,其中R=(\mu_{0}-\mu_{1})^{T}w^{*}为一标量,因此S_{b}w^{*}总是在向量(\mu_{0}-\mu_{1})方向。因此上式可以写做
      • \lambda w^{*}=S_{w}^{-1}(S_{b}w^{*})=S_{w}^{-1}(\mu_{0}-\mu_{1})R,从而可得
      • w^{*}=\frac{R}{\lambda}S_{w}^{-1}(\mu_{0}-\mu_{1}),在寻找最佳投影方向的同时可以忽略w^{*}的比例因子\frac{R}{\lambda} 。可得
      • w^{*}=S_{w}^{-1}(\mu_{0}-\mu_{1})

3. 多类情况

  • 多分类情况与二分类情况类似,其中\mu_{i}, S_{w}与上节中的意义相同,重新定义了所有样本的均值\mu=\frac{1}{N}\sum_{x\epsilon w_{i}}N_{i}\mu_{i}由于存在多个类别,类间散度矩阵和类内散度矩阵的计算存在一定差异。假设有t类,t为实数。
  • 类内散度矩阵(投影前):
    • S_{w}=\sum_{i=1}^{t}S_{w_{i}},其中的S_{w_{i}}表示第i类里的样本点相对于该类中心点\mu_{i}的散列程度。并有S_{w_{i}}=\sum_{x\epsilon w_{i}}(x-\mu_{i})(x-\mu_{i})^{T}
  • 类间散度矩阵(投影后:
    • S_{b}=\sum_{i=1}^{t}N_{i}(\mu_{i}-\mu)(\mu_{i}-\mu)^{T},其中N_{i}本身是值为N_{i}/N的权重,但由于J式本身对倍数不敏感,因此取N_{i}
  • 考虑到二类情况时投影目标是一条直线,而上升到多类情况后投影目标是多维的(可以认为是若干条直线)。J式的推导结论与上节中一样,此处求得的特征值越大,代表其对分类的判别能力越强,因此可以取特征值最大的前若干个特征向量构成矩阵W

 

多分类python代码实现:https://github.com/olddaddy/Linear-Discriminant-Analysis.git

 

如有错误望指正,谢谢。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值