Linear Discriminant Analysis(线性判别分类器)是对费舍尔的线性鉴别方法(FLD)的归纳,属于监督学习的方法。

LDA的基本思想是将高维的模式样本投影到最佳鉴别矢量空间,以达到抽取分类信息和压缩特征空间维数的效果,投影后保证模式样本在新的子空间有最大的类间距离和最小的类内距离,即模式在该空间中有最佳的可分离性。因此,它是一种有效的特征抽取方法。使用这种方法能够使投影后模式样本的类间散布矩阵最大,并且同时类内散布矩阵最小。就是说,它能够保证投影后模式样本在新的空间中有最小的类内距离和最大的类间距离,即模式在该空间中有最佳的可分离性。

预备知识

协方差与协方差矩阵

协方差

协方差分为随机变量的协方差和样本的协方差。

随机变量的协方差

跟数学期望、方差一样,是分布的一个总体参数。协方差是对两个随机变量联合分布线性相关程度的一种度量。两个随机变量越线性相关,协方差越大,完全线性无关,协方差为零。定义如下。

$$cov\left(X,Y\right)=E\left[\left(X-E\left[X\right])(Y-E\left[Y\right]\right)\right]$$

因为变量尺度不同,所以不能用若干协方差的大小作为相关性强弱的比较。因此引入相关系数,本质上是对协方差进行归一化。

$$\eta=\frac{cov\left(X,Y \right )}{\sqrt{var\left(X \right )\cdot var\left(Y \right )}}$$

取值范围[-1,1]。

样本的协方差

对于现有的m个样本,每个样本均具有n维属性,每一维属性我们都可以将其看作是一个随机变量。每一个样本$x_j =\left[x_{1j} ,...,x_{nj} \right ]$。那么我们就可以考察样本集中,两个随机变量(两属性)间的线性关系。计算和随机变量的协方差一致。

$$q_{ab}=\frac{\sum_{j=1}^{m}\left(x_{aj}-\bar{x}_a \right )\left(x_{bj}-\bar{x}_b \right )}{m-1}$$

因为在这里我们只有样本,随机变量的数学期望未知,用样本均值代替,所以自由度减一得到m-1。

协方差矩阵

多维随机变量的协方差矩阵

考虑多维随机变量,那么原先的两变量之间的协方差就可以扩展为多维随机变量中任意两变量之间的协方差,并进一步构造成协方差矩阵。

$$\Sigma_{i,j}=cov\left(X_i,X_j \right )\\ \Sigma=E\left[\left(X-E\left[X \right ] \right )\left(X-E\left[Y \right ] \right )^T \right ]$$

此时对角线上是各维度的方差,其余均为两维度之间的协方差。

一般来说,我们希望各维度之间可以相互比较,换言之需要对样本进行归一化。

那么定义

$$z_{j\cdot}=\frac{x_{i\cdot}-\bar{x}_i}{\sigma_i}$$

$\bar{x}_i$表示样本整体在维度i的均值,$\sigma_i$表示维度i上的方差。

$$\hat{\Sigma}=\frac{1}{m-1}\sum_{j=1}^m{z_{\cdot j}{z_{\cdot j}}^T}$$

这样矩阵内的元素就具有可比性!

散度矩阵

散度矩阵表示为

$$S_i=\sum_{j=1}^m{z_{\cdot j}{z_{\cdot j}}^T}$$

也就是不除以自由度的协方差矩阵。

类内散度矩阵$S_W=S_i+S_j$

类间散度矩阵$S_B=\left(\vec{\mu_i}-\vec{\mu_j} \right )\left(\vec{\mu_i}-\vec{\mu_j} \right )^T$

算法解释

LDA本质上是要$\max\limits_w {\frac{w^TS_Bw}{w^TS_Ww}}$,将类内散度矩阵和类间散度投影到直线上,并得出到原点的距离。选择合适的向量使得比值最大。

求解

$$J\left(w \right )=\frac{w^TS_Bw}{w^TS_Ww}$$

因为分子分母都为w的二次项,那么与的w模长无关。

不妨设

$$w^TS_Ww$$

可以得出

$$\min \limits_{w}{-w^TS_Bw}\\s.t.\quad w^TS_Ww=1$$

可以运用拉格朗日乘子法

$$l\left(w,\lambda \right )=-w^TS_Bw+\lambda\left(w^TS_Ww-1 \right )\\\frac{\partial l\left(w,\lambda \right )}{\partial w}=-\left(S_B+{S_B}^T\right)w+\lambda\left(S_W+{S_W}^T \right )w=0\\S_Bw=\lambda S_Ww$$

注意到$S_B=\left(\vec{\mu_i}-\vec{\mu_j}\right)\left(\vec{\mu_i}-\vec{\mu_j}\right)^T$

$$\left(\vec{\mu_i}-\vec{\mu_j}\right)\left(\vec{\mu_i}-\vec{\mu_j}\right)^Tw=\lambda S_Ww$$

$\left(\vec{\mu_i}-\vec{\mu_j}\right)^Tw$得到的是一个标量,$\lambda$也是标量,所以

$$w\propto {S_W}^{-1}\left(\vec{\mu_i}-\vec{\mu_j} \right )$$

因为我们只需要知道w的方向,所以具有原始样本的均值和方差就可以得到答案。

LDA(线性判别分类器)学习笔记的更多相关文章

  1. LDA-作为线性判别 分类器 推导

    LDA, 即 Linear Discriminant Analysis, 中文翻译为, 线性判别分析. 比较有趣的一点是:LDA 既可以直接用作分类算法, 也可作为特征降维的方法. 给人感觉, 这是将 ...

  2. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  3. 高斯消元 & 线性基【学习笔记】

    高斯消元 & 线性基 本来说不写了,但还是写点吧 [update 2017-02-18]现在发现真的有好多需要思考的地方,网上很多代码感觉都是错误的,虽然题目通过了 [update 2017- ...

  4. 「线性基」学习笔记and乱口胡总结

    还以为是什么非常高大上的东西花了1h不到就学好了 线性基 线性基可以在\(O(nlogx)\)的时间内计算出\(n\)个数的最大异或和(不需要相邻). 上述中\(x\)表示的最大的数. 如何实现 定义 ...

  5. 最长子序列(线性DP)学习笔记

    子序列和子串不一样.子串要求必须连续,而子序列不需要连续. 比如说\(\{a_1,a_2\dots a_n\}\),他的子串就是\(\{a_i,a_{i+1},\dots, a_j|1\leq i\l ...

  6. UI设计学习笔记(7-12)

    UI学习笔记(7)--扁平化图标 认识扁平化 Flat Design 抛弃传统的渐变.阴影.高光等拟真视觉效果,打造看上去更平的界面.(颜色.形状) 扁平化图标有什么优缺点 优点: 简约不简单.有新鲜 ...

  7. 机器学习降维方法概括, LASSO参数缩减、主成分分析PCA、小波分析、线性判别LDA、拉普拉斯映射、深度学习SparseAutoEncoder、矩阵奇异值分解SVD、LLE局部线性嵌入、Isomap等距映射

    机器学习降维方法概括   版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014772862/article/details/52335970 最近 ...

  8. LDA主题模型学习笔记5:C源代码理解

    1.说明 本文对LDA原始论文的作者所提供的C代码中LDA的主要逻辑部分做凝视,原代码可在这里下载到:https://github.com/Blei-Lab/lda-c 这份代码实现论文<Lat ...

  9. UFLDL深度学习笔记 (五)自编码线性解码器

    UFLDL深度学习笔记 (五)自编码线性解码器 1. 基本问题 在第一篇 UFLDL深度学习笔记 (一)基本知识与稀疏自编码中讨论了激活函数为\(sigmoid\)函数的系数自编码网络,本文要讨论&q ...

随机推荐

  1. asyncio之Coroutines,Tasks and Future

    asyncio之Coroutines,Tasks and Future Coroutines and Tasks属于High-level APIs,也就是高级层的api. 本节概述用于协程和任务的高级 ...

  2. arm浮点运算

    首先总结一下计算机中的浮点数的存储. 浮点数的标准是IEEE-754,规定了浮点数的存储都是通过科学计算法来存储的,n2-e的表示. 浮点数首先分为,定浮点(fixed-point)和浮点(float ...

  3. 理解linux网络管理命令

    linux 管理命令,iproute 查看帮助文件: man ip 以下为常用帮助文件. SEE ALSO ip-address(), ip-addrlabel(), ip-l2tp(), ip-li ...

  4. python精进之路 -- open函数

    下面是python中builtins文件里对open函数的定义,我将英文按照我的理解翻译成中文,方便以后查看. def open(file, mode='r', buffering=None, enc ...

  5. java结合node.js非对称加密,实现密文登录传参——让前后端分离的项目更安全

    前言   在参考互联网大厂的登录.订单.提现这类对安全性操作要求较高的场景操作时发现,传输的都是密文.而为了目前项目安全,我自己负责的项目也需要这方面的技术.由于,我当前的项目是使用了前后端分离技术, ...

  6. what?iView的DropDown没有element的split-button?提issure?等不及了,自己实现一个

    开始正文之前,有必要先说自己实现这个组件的必要性描述. 话说大家做表格时,增删查改按钮都是放在哪里的?最简单的方式应该是这样: 是不是感觉奇丑无比啊,于是改成了这样: 但是这种操作按钮一多后就没位置放 ...

  7. Hunspell介绍及试用

    1.简介 Hunspell是一个为拥有多态和复杂组合词的语言所设计的拼写检查器,原本为匈牙利语设计. Hunspell是一个自由软件,在GPL.LGPL和MPL三许可证下发行. Hunspell对主要 ...

  8. 按Enter登录,Esc退出

    回车登录,下图处,选择登录按钮的方法 下图是按ESC

  9. js let

    <script> var a; // 变量提升 js中的作用域只有在函数中 {} 才称为作用域 if/for循环都不是 都会产生变量提升 console.log(a); { a = 2; ...

  10. c# 调用RDP和SSH实现远程登陆

    1.ssh的登陆实现: windows平台可以安装OpenSSHforWindows 后,可以通过cmd 执行ssh的指令. 也可以在c#编程中实现ssh的登陆: var p = new System ...