Linear discriminant analysis (LDA) 线性判别分析也是机器学习中常用的一种降维算法,与 PCA 相比,

LDA 是属于supervised 的一种降维算法。PCA考虑的是整个数据集在高维空间的分散性,PCA降维之后依然要让数据在低维空间尽可能地分散。而LDA考虑的是类与类之间的差别(用距离来衡量)。

我们考虑两类情况下的LDA,

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

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

u1=1n1∑x∈c1xu2=1n2∑x∈c2x

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

v1=1n1∑y∈c1y=1n1∑x∈c1wTx=wTu1
v2=1n2∑y∈c2y=1n2∑x∈c2wTx=wTu2

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

J=|v1−v2|=|wTu1−wTu2|

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

s21=∑y∈c1(y−v1)2

s22=∑y∈c2(y−v2)2

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

J=|v1−v2|2s21+s22

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

Si=∑x∈ci(x−ui)(x−ui)T

SW=S1+S2

我们可以看到:

s2i=∑y∈ci(y−vi)2=∑x∈ci(wTx−wTui)2=wTSiw
s21+s22=wTSWw

同样的,我们有:

(v1−v2)2=(wTu1−wTu2)2=wT(u1−u2)(u1−u2)Tw=wTSBw
SB=(u1−u2)(u1−u2)T

所以最终的目标函数是:

J(w)=wTSBwwTSWw

最终得到的投影w⋆:

w⋆=argmax[wTSBwwTSWw]=S−1W(u1−u2)

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

我们可以先定义

Sw=∑i=1cSiSi=∑x∈ci(x−ui)(x−ui)T
SB=∑i=1cNi(ui−u)(ui−u)Tu=1N∑x

那么目标函数可以写成:

J(W)=|WTSBW||WTSWW|

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

SBwi=λiSWwi→S−1WSBwi=λiwi

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

机器学习: Linear Discriminant Analysis 线性判别分析的更多相关文章

  1. LDA(Linear discriminate analysis)线性判别分析

    LDA 线性判别分析与Fisher算法完全不同 LDA是基于最小错误贝叶斯决策规则的. 在EMG肌电信号分析中,... 未完待续:.....

  2. 线性判别分析(Linear Discriminant Analysis, LDA)算法分析

    原文来自:http://blog.csdn.net/xiazhaoqiang/article/details/6585537 LDA算法入门 一. LDA算法概述:       线性判别式分析(Lin ...

  3. 线性判别分析(Linear Discriminant Analysis,LDA)

    一.LDA的基本思想 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD) ...

  4. 线性判别分析(Linear Discriminant Analysis, LDA)算法初识

    LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discrimin ...

  5. 机器学习中的数学-线性判别分析(LDA), 主成分分析(PCA)

    转:http://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html 版权声明: 本文由L ...

  6. Linear Discriminant Analysis Algorithm

    线性判别分析算法. 逻辑回归是一种分类算法,传统上仅限于两类分类问题. 如果有两个以上的类,那么线性判别分析算法是首选的线性分类技术.LDA的表示非常直接.它包括数据的统计属性,为每个类计算.对于单个 ...

  7. Max-Mahalanobis Linear Discriminant Analysis Networks

    目录 概 主要内容 Pang T, Du C, Zhu J, et al. Max-Mahalanobis Linear Discriminant Analysis Networks[C]. inte ...

  8. 线性判别分析(Linear Discriminant Analysis)转载

    1. 问题 之前我们讨论的PCA.ICA也好,对样本数据来言,可以是没有类别标签y的.回想我们做回归时,如果特征太多,那么会产生不相关特征引入.过度拟合等问题.我们可以使用PCA来降维,但PCA没有将 ...

  9. 线性判别分析(Linear Discriminant Analysis)

    1. 问题 之前我们讨论的PCA.ICA也好,对样本数据来言,可以是没有类别标签y的.回想我们做回归时,如果特征太多,那么会产生不相关特征引入.过度拟合等问题.我们可以使用PCA来降维,但PCA没有将 ...

随机推荐

  1. Engine中如何截取线上指定两点间的线段?

    //调用  IPolyline newLine = GetSubCurve(polyline, p1, p2);  ESRI.ArcGIS.Display.IScreenDisplay screenD ...

  2. MySQL的1067错误

    1.打开my.ini文件,找到default-storage-engine=InnoDB这一行,把它改成default-storage-engine=MyISAM.*** my.ini必须为ansi格 ...

  3. Lazarus安装使用

    Lazarus安装使用 最后还是安装了Lazarus: 安装之后,新建了项目,还引入了Unit,就可以跑了: 学习:http://tieba.baidu.com/p/3164001113 progra ...

  4. 转: svn服务器路径名修改(不需要全部重新拉取文件)

    svn路径名修改之后, 一大波的研发代码都可能面临变更.还有有一个svn relote神器 大家可以借助各自的SVN工具中哦relote命令完成路径的切换,而不需要全部重新download所有的新路径 ...

  5. C#如何生成release版本的程序,生成debug版本的程序

    除了右击项目在生成中配置改成Release还要在顶部切换成Release                                  

  6. libpcre.so.0 被删除怎么办?

    删除  #rpm -e --nodeps pcre-6.6-1.1 1> wget   http://mirror.centos.org/centos/6/os/i386/Packages/pc ...

  7. Allegro PCB中封装焊盘替换操作详解

    Allegro PCB中有些功能在某种情况下使用会产生神奇的效果,但有部分人不会或不熟悉在特定情况下使用某些功能来解决问题.如焊盘替换,有些特殊器件(如下图)封装按照datasheet给出的参考制作, ...

  8. HTML5开发移动web应用—JQuery Mobile(1)

    JQuery Mobile是一个简单易用的web移动app开发框架.使用它就像使用jQuery一样,引入必要的文件就可以. 最基础的jQuery Mobile文件的结构代码例如以下: <body ...

  9. Memory-mapped I/O vs port-mapped I/O

    关于MMIO和PIO,我看到的解释最清楚的文章,原文在这里:Memory-mapped I/O vs port-mapped I/O - 2015 Microprocessors normally u ...

  10. mnesia练习及基本操作

    Mnesia基本用法 查看表结构 查看mnesia表的结构: mnesia:info(). 查看此表的基本信息: mnesia:table_info(<tableName>, all). ...