• 机器学习: Linear Discriminant Analysis 线性判别分析


    Linear discriminant analysis (LDA) 线性判别分析也是机器学习中常用的一种降维算法,与 PCA 相比,
    LDA 是属于supervised 的一种降维算法。PCA考虑的是整个数据集在高维空间的分散性,PCA降维之后依然要让数据在低维空间尽可能地分散。而LDA考虑的是类与类之间的差别(用距离来衡量)。

    我们考虑两类情况下的LDA,
    给定一个训练集 D={xiRd},i=1,2,...N, 假设其中有 n1 个属于第一类 c1n2 个属于第二类c2N=n1+n2, LDA 希望可以找到一个投影关系,使得原来的特征向量 xi 投影到低维空间之后,类间的距离尽可能地大,而类内距离尽可能地小。

    我们可以计算每一类的均值向量:

    u1=1n1xc1xu2=1n2xc2x

    假设投影为 w,投影后为 y, 那么 y=wTx, 我们也可以求出投影后的均值:

    v1=1n1yc1y=1n1xc1wTx=wTu1

    v2=1n2yc2y=1n2xc2wTx=wTu2

    那么,我们可以设立如下的目标函数:

    J=|v1v2|=|wTu1wTu2|

    上面的目标函数,保证了映射之后类间距离尽可能大,但是无法保证类内距离尽可能小,为了让类内距离尽可能小,我们可以进一步定义:

    s21=yc1(yv1)2
    s22=yc2(yv2)2

    s21,s22 可以用来度量映射后每一类与类中心的分散程度。所以,最终的目标函数是:

    J=|v1v2|2s21+s22

    我们可以定义投影前的向量 x 与类中心的分散程度:

    Si=xci(xui)(xui)T

    SW=S1+S2

    我们可以看到:

    s2i=yci(yvi)2=xci(wTxwTui)2=wTSiw

    s21+s22=wTSWw

    同样的,我们有:

    (v1v2)2=(wTu1wTu2)2=wT(u1u2)(u1u2)Tw=wTSBw

    SB=(u1u2)(u1u2)T

    所以最终的目标函数是:

    J(w)=wTSBwwTSWw

    最终得到的投影w:

    w=argmax[wTSBwwTSWw]=S1W(u1u2)

    对于多类的LDA, 我们不能简单地将原来的向量 x 投影到一个标量y,我们需要投影到一个低维的向量 y 上。一个有C类的训练集 D={xRd} 含有N 个样本, N=ni. 我们需要找到一个投影矩阵W, 使得 y=WTx

    我们可以先定义

    Sw=i=1cSiSi=xci(xui)(xui)T

    SB=i=1cNi(uiu)(uiu)Tu=1Nx

    那么目标函数可以写成:

    J(W)=|WTSBW||WTSWW|

    最后的投影矩阵可以表示为: W=[w1,w2,...wk], 其中 wi 满足如下关系:

    SBwi=λiSWwiS1WSBwi=λiwi

    wi 是矩阵 S1WSB 的特征向量, 所以简单来说,可以先对矩阵 S1WSB 做特征值分解,然后取前 k 个大的特征值所对应的特征向量,组成投影矩阵。但是由于 S_{B} 的秩不会超过 c1,所以 k 最大也就是 c1,取前面k 个特征向量组成投影矩阵。对于两类的情况, c=2, k=1, 所以两类的情况下,LDA投影得到的是一个标量。

  • 相关阅读:
    详细解说python垃圾回收机制
    Vue-- 监听路由参数变化,数据无法更新 解决方案
    解决“只能通过Chrome网上应用商店安装该程序”的方法 ---离线安装谷歌浏览器插件
    axios POST提交数据的三种请求方式写法
    axios POST提交数据的三种请求方式写法
    vue+element后台系统 自己动手撸(一)
    element-ui中 table表格hover 修改背景色
    解决vue的{__ob__: observer}取值问题
    Vue [__ob__: Observer]取不到值问题的解决
    VUE监听路由变化的几种方式
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9412498.html
Copyright © 2020-2023  润新知