LDA(线性判别分析(普通法))详解 —— matlab

目录

前言

正题

1.LDA的思想

2. 瑞利商(Rayleigh quotient)与广义瑞利商(genralized Rayleigh quotient)

3. 二类LDA原理

4.多类LDA原理

5.LDA分类

6.LDA算法流程

二类LDA matlab举例:

1.读取数据集

2.分离数据集

3.求解w

4.输出降维后的数据集

5.分类

前言

在主成分和因子分析中,我们对降维算法做了总结。这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结。LDA在模式识别领域(比如人脸识别,舰艇识别等图形图像识别领域)中有非常广泛的应用,因此我们有必要了解下它的算法原理。

在学习LDA之前,有必要将其自然语言处理领域的LDA区别开来,在自然语言处理领域, LDA是隐含狄利克雷分布(Latent Dirichlet Allocation,简称LDA),他是一种处理文档的主题模型。我们本文只讨论线性判别分析,因此后面所有的LDA均指线性判别分析。

在做具体解释之前,请允许我放上我之前的一些链接:

主成分分析 —— matlab :传送门

主成分分析 —— python传送门

因子分析 —— matlab :传送门

因子分析 —— python :传送门

正题

1.LDA的思想

线性判别分析((L ine ar Discriminant A nalysis ,简称LDA)是一种经典的线性学习方法,在二分类问题上因为最早由 [Fi sher,1936] 提出,亦称 “Fi sher 判别分析”。并且LDA也是一种监督学习的降维技术,也就是说它的数据集的每个样本都有类别输出。这点与主成分和因子分析不同,因为它们是不考虑样本类别的无监督降维技术。

LDA 的思想非常朴素:给定训练样例集,设法将样例投影到一条直线上,使得同样样例的投影尽可能接近、异样样例的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。其实可以用一句话概括:就是”投影后类内方差最小,类间方差最大”。

LDA(线性判别分析(普通法))详解 —— matlab

图为 LDA的二维示意图。”+”,”-“分别代表正侧和反侧,椭圆表示数据簇的外轮廓,虚线表示投影,红色实心圆和实心三角形分别表示两类样本投影后的中心点。

2. 瑞利商(Rayleigh quotient)与广义瑞利商(genralized Rayleigh quotient)

我们先来看一下瑞丽商的定义。

瑞丽商是指这样的函数R(A,x):

LDA(线性判别分析(普通法))详解 —— matlab

其中x为非零向量,而A为 n*n 的Hermitan矩阵。所谓的Hermitan矩阵就是满足共轭转置矩阵和自己相等的矩阵,即

LDA(线性判别分析(普通法))详解 —— matlab . 如果我们的矩阵A是实矩阵,则满足LDA(线性判别分析(普通法))详解 —— matlab的矩阵即为Hermitan矩阵。

瑞利商R(A,x)有一个非常重要的性质,即它的最大值等于矩阵A最大的特征值,而最小值等于矩阵A的最小的特征值,也就是满足

LDA(线性判别分析(普通法))详解 —— matlab

至于证明过程就不在这里介绍了。当向量x是标准正交基时,即满足

LDA(线性判别分析(普通法))详解 —— matlab时,瑞利商退化为:LDA(线性判别分析(普通法))详解 —— matlab,这个形式在谱聚类和PCA中都有出现。

以上就是瑞丽商的内容。

下面我们再来介绍一下广义的瑞丽商,

广义的瑞丽商是指这样的函数 R(A,B,x) :

LDA(线性判别分析(普通法))详解 —— matlab

其中x为非零向量,而A,B为n×n的Hermitan矩阵。B为正定矩阵。它的最大值和最小值是什么呢?其实我们只要通过将其通过标准化就可以转化为瑞利商的格式。我们令

LDA(线性判别分析(普通法))详解 —— matlab,则分母转化为:

LDA(线性判别分析(普通法))详解 —— matlab

而分子转化为:

LDA(线性判别分析(普通法))详解 —— matlab

此时我们的R(A,B,x)转化为R(A,B,x′):

LDA(线性判别分析(普通法))详解 —— matlab

利用前面的瑞利商的性质,我们可以很快的知道,R(A,B,x′)的最大值为矩阵

LDA(线性判别分析(普通法))详解 —— matlab的最大特征值,或者说矩阵LDA(线性判别分析(普通法))详解 —— matlab的最大特征值,而最小值为矩阵LDA(线性判别分析(普通法))详解 —— matlab的最小特征值。

3. 二类LDA原理

我们先介绍一下稍微简单,容易理解的二分类LDA入手,详细了解一下LDA的原理

首先给定数据集 D={(x1,y1),(x2,y2),…,((xm,ym))} ,其中任意样本xi为n维向量,yi∈{0,1}。另外我们定义Nj(j=0,1)为第j类样本的个数,Xj(j=0,1)为第j类样本的集合,而μj(j=0,1)为第j类样本的均值向量,定义Σj(j=0,1)为第j类样本的协方差矩阵(严格说是缺少分母部分的协方差矩阵)。

其中:

μj的表达式为:

LDA(线性判别分析(普通法))详解 —— matlab

Σj的表达式为:

LDA(线性判别分析(普通法))详解 —— matlab

我们将数据投影到一条直线上即可。我们假设我们的投影直线是向量w,则对任意一个样本本xi,它在直线w的投影为

LDA(线性判别分析(普通法))详解 —— matlab,对于我们的两个类别的中心点μ0,μ1在在直线ww的投影为LDA(线性判别分析(普通法))详解 —— matlabLDA(线性判别分析(普通法))详解 —— matlab

由于LDA需要让不同类别的数据的类别中心之间的距离尽可能的大,也就是我们要最大化

LDA(线性判别分析(普通法))详解 —— matlab ,同时我们希望同一种类别数据的投影点尽可能的接近,也就是要同类样本投影点的协方差LDA(线性判别分析(普通法))详解 —— matlabLDA(线性判别分析(普通法))详解 —— matlab 尽可能的小,即最小化LDA(线性判别分析(普通法))详解 —— matlab 。综上所述,我们的优化目标为:

LDA(线性判别分析(普通法))详解 —— matlab

在这里,大家是否有很多问好???

就是 w ,

LDA(线性判别分析(普通法))详解 —— matlab 在哪,怎么算,下面就是我们求解的过程, 在本小节最后就是哦!!!

我们一般定义 类内散度矩阵Sw为:

LDA(线性判别分析(普通法))详解 —— matlab

同时定义 类间散度矩阵Sb为:

LDA(线性判别分析(普通法))详解 —— matlab

全局散度矩阵

LDA(线性判别分析(普通法))详解 —— matlab

这样我们的优化目标重写为:

LDA(线性判别分析(普通法))详解 —— matlab

仔细一看上式,这不就是我们的广义瑞利商嘛!这就简单了,利用我们第二节讲到的广义瑞利商的性质,我们知道我们的J(w’)最大值为矩阵

LDA(线性判别分析(普通法))详解 —— matlab的最大特征值,而对应w’为LDA(线性判别分析(普通法))详解 —— matlab 的最大特征值对应的特征向量! 而LDA(线性判别分析(普通法))详解 —— matlab的特征值和LDA(线性判别分析(普通法))详解 —— matlab的特征值相同,的特征向量LDA(线性判别分析(普通法))详解 —— matlab的特征向量w和LDA(线性判别分析(普通法))详解 —— matlab的特征向量w′满足LDA(线性判别分析(普通法))详解 —— matlab的关系!

在这里我们就求到了 w 了哦 !!!

注意到对于二类的时候,

LDA(线性判别分析(普通法))详解 —— matlab的方向恒平行于μ0−μ1,不妨令LDA(线性判别分析(普通法))详解 —— matlab,将其带入:LDA(线性判别分析(普通法))详解 —— matlab,可以得到LDA(线性判别分析(普通法))详解 —— matlab, 也就是说我们只要求出原始二类样本的均值和方差就可以确定最佳的投影方向w了。

4.多类LDA原理

前面我们介绍了二分类的LDA,接下来我们再来看看多类别的LDA。

假设我们的数据集,

LDA(线性判别分析(普通法))详解 —— matlab,其中任意样本LDA(线性判别分析(普通法))详解 —— matlab 为n维向量,LDA(线性判别分析(普通法))详解 —— matlab 。我们定义LDA(线性判别分析(普通法))详解 —— matlab为j类样本的个数,LDA(线性判别分析(普通法))详解 —— matlab为j类样本的集合,而LDA(线性判别分析(普通法))详解 —— matlab 为第j类样本的均值向量,定义LDA(线性判别分析(普通法))详解 —— matlab 为第j类样本的协方差矩阵。从在二类LDA里面定义的公式可以很容易的类推到多类LDA。

由于我们是多类向低维投影,则此时投影到的低维空间就不是一条直线,而是一个超平面了。假设我们投影到的低维空间的维度为d,对应的基向量为

LDA(线性判别分析(普通法))详解 —— matlab,基向量组成的矩阵为W,它是一个n*d的矩阵。

此时我们的优化目标应该可以变成为:

LDA(线性判别分析(普通法))详解 —— matlab

其中,

LDA(线性判别分析(普通法))详解 —— matlabLDA(线性判别分析(普通法))详解 —— matlab为所有样本的均值向量。LDA(线性判别分析(普通法))详解 —— matlab

但是在这里会有 一个问题

就是

LDA(线性判别分析(普通法))详解 —— matlabLDA(线性判别分析(普通法))详解 —— matlab都是矩阵,不是标量,无法作为一个标量函数来优化!也就是说,我们无法直接用二类LDA的优化方法,怎么办呢?

一般来说,我们可以用其他的一些替代优化目标来实现。

比如,常见的一个LDA多类优化目标函数定义为:

LDA(线性判别分析(普通法))详解 —— matlab

其中,

LDA(线性判别分析(普通法))详解 —— matlab 为 A的主对角线元素的乘积,W为n×d的矩阵。

J(W)的优化过程可以转化为:

LDA(线性判别分析(普通法))详解 —— matlab

此时,我再来观察一下上式,会发现最右边的式子,就是我们上面所讲的广义瑞丽商!!!最大值是矩阵

LDA(线性判别分析(普通法))详解 —— matlab的最大特征值,最大的d个值的乘积就是矩阵LDA(线性判别分析(普通法))详解 —— matlab 的最大的d个特征值的乘积,此时对应的矩阵W为这最大的d个特征值对应的特征向量张成的矩阵。

由于W是一个利用了样本的类别得到的投影矩阵,因此它的降维到的维度d最大值为k-1。为什么最大维度不是类别数k呢?

因为Sb中每个μj−μ的秩为1,因此协方差矩阵相加后最大的秩为k(矩阵的秩小于等于各个相加矩阵的秩的和),但是由于如果我们知道前k-1个μj后,最后一个μk可以由前k-1个μj线性表示,因此Sb的秩最大为k-1,即特征向量最多有k-1个。

5.LDA分类

那么在最佳的分类空间如何对样本进行分类?

1)对二分类问题。由于只有两个类别,在经过上面的求解后,最后所有样本将会映射到一维空间中,设两个不同样本映射后的中心点分别为

LDA(线性判别分析(普通法))详解 —— matlab,LDA(线性判别分析(普通法))详解 —— matlab;我们将两个类别的中心点之间中心点作为分类点。

LDA(线性判别分析(普通法))详解 —— matlab

最后,我们将

LDA(线性判别分析(普通法))详解 —— matlab

的x分为一类,其他的分为另一类。

2)对多分类问题。通过LDA方法最终将原始数据映射到c-1个维度上,现在我们需要在这c-1个维度上将样本集分成c类。这个怎么分呢?本人暂时也不知道,能想到的只是将问题转化为二分类问题。实际上,对于多类的情况主要考虑用来降维。

对于此类问题,我们主要将它转化为二分类来处理,我们使用一对其余的方法。简单来说就是先将所有c类样本分成1和2~c,然后再将2~c分为2和3~c,以此类推,直到完全分开。

6.LDA算法流程

输入:数据集

LDA(线性判别分析(普通法))详解 —— matlab ,其中任意样本xixi为n维向量,LDA(线性判别分析(普通法))详解 —— matlab,降维到的维度d。

输出:降维后的样本集D′

1) 计算类内散度矩阵Sw

2) 计算类间散度矩阵Sb

3) 计算矩阵

LDA(线性判别分析(普通法))详解 —— matlab

4)计算

LDA(线性判别分析(普通法))详解 —— matlab的最大的d个特征值和对应的d个特征向量(w1,w2,…wd)得到投影矩阵w

5) 对样本集中的每一个样本特征xi,转化为新的样本

LDA(线性判别分析(普通法))详解 —— matlab

6) 得到输出样本集

LDA(线性判别分析(普通法))详解 —— matlab

二类LDA matlab举例:

1.读取数据集

data = xlsread('文件路径')

2.分离数据集

比如取数据集的前20行,2和3列

data1=data(1:20,2:3)

比如把上面数据集的第一列定义为x,第二列定义为y;然后分类x0,x1

x = data1(:,1)
y = data1(:,2)
x0 = x(find(y==0))
x1 = x(find(y==1))

诸如此类等等,请视情况自行决定,因我手头没有相关例题,只能介绍到这里了

3.求解w

%求均值
u0 = mean(x0);
u1 = mean(x1);

%求协方差
E0 = (x0-u0)'*(x0-u0);
E1 = (x1-u1)'*(x1-u1);

Sw = E0+E1;
Sb = (u0-u1)*(u0-u1)';
w = (Sw)^(-1)*(u0-u1)

4.输出降维后的数据集

predict_y = w'* x

5.分类

u = mean(w'* x)
for i = x
    h = w' * i ;
    lei = 1*(h<u) end< code></u)>

好了,这次更改就到这里结束了,后续会增加实例的!

Original: https://blog.csdn.net/qq_25990967/article/details/123465182
Author: 洋洋菜鸟
Title: LDA(线性判别分析(普通法))详解 —— matlab

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/777951/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 阿里资深架构师熬夜纯手写的238页微服务容器化开发实战笔记

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    Python 2023年10月7日
    039
  • Diffusion model理论推导

    直观理解Diffusion model 生成式模型本质上是一组概率分布。如下图所示,左边是一个训练数据集,里面所有的数据p d a t a p_{data}p d a t a ​都…

    Python 2023年9月28日
    055
  • 【python】pandas库入门

    1.Series 1.1 Series 类型的创建 import pandas as pd import numpy as np a=pd.Series(4,index=[&quo…

    Python 2023年8月8日
    067
  • 从零开始搭建python+selenium+pytest+allure

    1、首先安装python安装包:Welcome to Python.org 我这里选择的是windows3.9.6安装包 下载后正常双击安装就好 建议不要安装到C盘或非应为路径下可…

    Python 2023年9月10日
    038
  • pandas | 学习笔记

    1.可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引 s = pd.Series([1,3,5,np.nan,6,8]) 2.通过传递一个nump…

    Python 2023年8月16日
    059
  • Pytest如何重写断言assert语句的报错信息

    首先观察如下测试代码,这里面有两个测试用例,一个是判断1是否等于2,第二个是判断字符串”hello”是否等于整数10. def test_demo01():…

    Python 2023年9月11日
    057
  • 一文说透小程序插件及其作用价值

    最近工作接触小程序插件比较多,就想着不如跟大家系统分享一下小程序插件相关的内容。 首先,我们要先弄清楚小程序插件究竟是什么? 简单来说,小程序 插件就是可被添加到小程序内直接使用的…

    Python 2023年9月28日
    067
  • 【数字图像处理】实验二 图像增强(MATLAB实现)

    目录 一、实验意义及目的 二、实验内容 三、Matlab 相关函数介绍 四、算法原理 五、参考代码及扩展代码流程图 (1)参考代码流程图 (2)扩展代码流程图 六、参考代码 七、实…

    Python 2023年8月1日
    046
  • 机器学习代码笔记-2-简单线性回归

    Out[ ]: [<matplotlib.lines.line2d at 0x7fdfcee72f50>]</matplotlib.lines.line2d&gt…

    Python 2023年10月28日
    030
  • 八个超级好用的Python自动化脚本,简直太好用了

    每天你都可能会执行许多重复的任务,例如阅读新闻、发邮件、查看天气、打开书签、清理文件夹等等,使用自动化脚本,就无需手动一次又一次地完成这些任务,非常方便。而在某种程度上,Pytho…

    Python 2023年11月2日
    060
  • pandas学习

    列删除pop,del 行删除drop 列表嵌套创建data值,嵌套的是一行一行的数据。 字典创建data值,嵌套的是一列一列的数据。#字典的key为columns,values为S…

    Python 2023年8月22日
    045
  • Python ❀ 内置数据类型(二)

    Python学习计划(五) 一、字符串(不可改变对象)1、定义:有序的字符的集合,用单引号或者双引号表示,支持索引,切片 2、相关操作:设sx=’abcd’…

    Python 2023年5月25日
    077
  • 【python】Numpy统计函数总结

    文章目录 * – 函数列表 – 相关系数 – 直方图 函数列表 最值 amin amax nanmin nanmax , 极差 ptp 分位数 …

    Python 2023年8月28日
    035
  • GB/T 28181联网系统通信协议结构和技术实现

    技术回顾 在本文开头,我们先一起回顾下GB/T28181联网系统通信协议结构: 联网系统在进行视音频传输及控制时应建立两个传输通道: 会话通道和 媒体流通道。 会话通道用于在设备之…

    Python 2023年10月23日
    037
  • Python爬虫实战,requests+tqdm模块,爬取漫画之家漫画数据(附源码)

    前言 今天给大家介绍的是Python爬取漫画数据,在这里给需要的小伙伴们代码,并且给出一点小心得。 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是…

    Python 2023年10月30日
    049
  • Pandas groupby分组操作详解

    在数据分析中,经常会遇到这样的情况:根据某一列(或多列)标签把数据划分为不同的组别,然后再对其进行数据分析。比如,某网站对注册用户的性别或者年龄等进行分组,从而研究出网站用户的画像…

    Python 2023年8月6日
    041
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球