LDA

article/2025/11/10 14:20:16
  1. 关于降维算法
    机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的本质是学习一个映射函数 f : x->y,其中x是原始数据点的表达,目前最多使用向量表达形式。 y是数据点映射后的低维向量表达,通常y的维度小于x的维度(当然提高维度也是可以的)。f可能是显式的或隐式的、线性的或非线性的。
    目前大部分降维算法处理向量表达的数据,也有一些降维算法处理高阶张量表达的数据。之所以使用降维后的数据表示是因为在原始的高维空间中,包含有冗余信息以及噪音信息,在实际应用例如图像识别中造成了误差,降低了准确率;而通过降维,我们希望减少冗余信息所造成的误差,提高识别(或其他应用)的精度。又或者希望通过降维算法来寻找数据内部的本质结构特征。

LDA与PCA都是常用的降维方法,二者的区别在于:

  1. 出发思想不同。PCA主要是从特征的协方差角度,去找到比较好的投影方式,即选择样本点投影具有最大方差的方向( 在信号处理中认为信号具有较大的方差,噪声有较小的方差,信噪比就是信号与噪声的方差比,越大越好。);而LDA则更多的是考虑了分类标签信息,寻求投影后不同类别之间数据点距离更大化以及同一类别数据点距离最小化,即选择分类性能最好的方向。
  2. 学习模式不同。PCA属于无监督式学习,因此大多场景下只作为数据处理过程的一部分,需要与其他算法结合使用,例如将PCA与聚类、判别分析、回归分析等组合使用;LDA是一种监督式学习方法,本身除了可以降维外,还可以进行预测应用,因此既可以组合其他模型一起使用,也可以独立使用。
  3. 降维后可用维度数量不同。LDA降维后最多可生成C-1维子空间(分类标签数-1),因此LDA与原始维度N数量无关,只有数据标签分类数量有关;而PCA最多有n维度可用,即最大可以选择全部可用维度。
    在这里插入图片描述
    上图左侧是PCA的降维思想,它所作的只是将整组数据整体映射到最方便表示这组数据的坐标轴上,映射时没有利用任何数据内部的分类信息。因此,虽然PCA后的数据在表示上更加方便(降低了维数并能最大限度的保持原有信息),但在分类上也许会变得更加困难;上图右侧是LDA的降维思想,可以看到LDA充分利用了数据的分类信息,将两组数据映射到了另外一个坐标轴上,使得数据更易区分了(在低维上就可以区分,减少了运算量)。

接下来着重介绍LDA
LDA的全称是Linear Discriminant Analysis(线性判别分析),是一种supervised learning。有些资料上也称为是Fisher’s Linear Discriminant,因为它被Ronald Fisher发明自1936年,Discriminant这次词我个人的理解是,一个模型,不需要去通过概率的方法来训练、预测数据,比如说各种贝叶斯方法,就需要获取数据的先验、后验概率等等。LDA是在目前机器学习、数据挖掘领域经典且热门的一个算法,据我所知,百度的商务搜索部里面就用了不少这方面的算法。
LDA的原理是,将带上标签的数据(点),通过投影的方法,投影到维度更低的空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近。要说明白LDA,首先得弄明白线性分类器(Linear Classifier):因为LDA是一种线性分类器。对于K-分类的一个分类问题,会有K个线性函数:
在这里插入图片描述
当满足条件:对于所有的j,都有Yk > Yj,的时候,我们就说x属于类别k。对于每一个分类,都有一个公式去算一个分值,在所有的公式得到的分值中,找一个最大的,就是所属的分类了。
上式实际上就是一种投影,是将一个高维的点投影到一条高维的直线上,LDA最求的目标是,给出一个标注了类别的数据集,投影到了一条直线之后,能够使得点尽量的按类别区分开,当k=2即二分类问题的时候,如下图所示:
在这里插入图片描述
红色的方形的点为0类的原始点、蓝色的方形点为1类的原始点,经过原点的那条线就是投影的直线,从图上可以清楚的看到,红色的点和蓝色的点被原点明显的分开了,这个数据只是随便画的,如果在高维的情况下,看起来会更好一点。下面我来推导一下二分类LDA问题的公式:
假设用来区分二分类的直线(投影函数)为:
在这里插入图片描述
LDA分类的一个目标是使得不同类别之间的距离越远越好,同一类别之中的距离越近越好,所以我们需要定义几个关键的值。
类别i的原始中心点为:(Di表示属于类别i的点)在这里插入图片描述
类别i投影后的中心点为:在这里插入图片描述

衡量类别i投影后,类别点之间的分散程度(方差)为:

在这里插入图片描述
最终我们可以得到一个下面的公式,表示LDA投影到w后的损失函数:
在这里插入图片描述
我们分类的目标是,使得类别内的点距离越近越好(集中),类别间的点越远越好。分母表示每一个类别内的方差之和,方差越大表示一个类别内的点越分散,分子为两个类别各自的中心点的距离的平方,我们最大化J(w)就可以求出最优的w了。想要求出最优的w,可以使用拉格朗日乘子法,但是现在我们得到的J(w)里面,w是不能被单独提出来的,我们就得想办法将w单独提出来。
我们定义一个投影前的各类别分散程度的矩阵,这个矩阵看起来有一点麻烦,其实意思是,如果某一个分类的输入点集Di里面的点距离这个分类的中心店mi越近,则Si里面元素的值就越小,如果分类的点都紧紧地围绕着mi,则Si里面的元素值越更接近0.
在这里插入图片描述
带入Si,将J(w)分母化为:
在这里插入图片描述在这里插入图片描述

同样的将J(w)分子化为:
在这里插入图片描述
这样损失函数可以化成下面的形式:
在这里插入图片描述
这样就可以用拉格朗日乘子法了,但是还有一个问题,如果分子、分母是都可以取任意值的,那就会使得有无穷解,我们将分母限制为长度为1(这是用拉格朗日乘子法一个很重要的技巧,在下面将说的PCA里面也会用到,如果忘记了,请复习一下高数),并作为拉格朗日乘子法的限制条件,带入得到:
在这里插入图片描述
这样的式子就是一个求特征值的问题了。
对于N(N>2)分类的问题,我就直接写出下面的结论了:
在这里插入图片描述
这同样是一个求特征值的问题,我们求出的第i大的特征向量,就是对应的Wi了。
这里顺便谈谈特征值,特征值在纯数学、量子力学、固体力学、计算机等等领域都有广泛的应用,特征值表示的是矩阵的性质,当我们取到矩阵的前N个最大的特征值的时候,我们可以说提取到的矩阵主要的成分(这个和之前的PCA相关,但是不是完全一样的概念)。在机器学习领域,不少的地方都要用到特征值的计算,比如说图像识别、pagerank、LDA、还有之前提到的PCA等等。

为了直观比较LDA与PCA的区别,我们这次实验还是使用iris数据集,数据集的背景知识在PCA的实验中已经提过,这里不再指出。

首先导入库
在这里插入图片描述
载入数据集
在这里插入图片描述
数据预处理
将数据集加载到pandas数据对象后,第一步是将数据集划分为特征和相应的标签,然后将结果数据集划分为训练集和测试集。 以下代码将数据划分为标签和特征集:
在这里插入图片描述
上面的代码将特征集分配给X变量,而将第五列(标签)中的值分配给y变量。
以下代码将数据划分为训练集和测试集:
在这里插入图片描述
接下来为LDA执行特征缩放
在这里插入图片描述
然后就可以使用LDA了
只需要四行代码即可使用Scikit-Learn执行LDA。 sklearn.discriminant_analysis库的LinearDiscriminantAnalysis类用于执行LDA。
在这里插入图片描述
在上面的代码中,LinearDiscriminantAnalysis类作为LDA导入。与PCA一样,我们必须传递LDA的n_components参数的值,该参数指的是我们需要的线性判别的数量。我们将n_components设置为1,因为我们首先要使用单个线性判别式来检查分类器的性能。然后执行fit和transform。

注意,在LDA的情况下,transform方法有两个参数:X_train和y_train。 然而,在PCA的情况下,transform方法仅需要一个参数,即X_train。 这说明LDA在选择线性判别式时考虑输出类标签,而PCA不依赖于输出标签。

由于我们想要将带有一个线性判别式的LDA的性能与具有一个主成分的PCA的性能进行比较,所以我们使用与用于评估PCA的性能相同的随机森林分类器。
在这里插入图片描述
最后一步是在通过混淆矩阵评估算法的性能,并计算预测的准确率
在这里插入图片描述
可以看到,使用一个线性判别式,算法实现了100%的精度,这大于PCA一个主成分所达到的精度,即93.33%。
那么我们以后就一定使用LDA吗?就不需要PCA了吗?
我们应该明白这两个算法的原理是不一样的,pca是选择投影后使得数据方差最大的方向来投影,假设就是方差越大,信息量越多,pca是一种无监督算法,没有类别信息,而lda是选择投影后使得类内方差小而类间方差大的方向来投影,用到了类别信息,所以选择用哪种算法来降维应该是根据具体的目的和场景来的,如果你的目的就是分类,那么显然lda的选择标准更合理,如果没有类别信息(无监督),那就只能选pca,总之,两者选择投影的方向的标准是不一样的,看哪个和我们的需要更契合

参考:
1.《机器学习》(西瓜书)
2. https://www.zhihu.com/question/35666712
3. https://www.cnblogs.com/LeftNotEasy/archive/2011/01/08/lda-and-pca-machine-learning.html
4. https://cloud.tencent.com/developer/article/1106120
5. https://stackabuse.com/


http://chatgpt.dhexx.cn/article/E0SU8XoR.shtml

相关文章

LDA详解

【几个问题待解决:1.LDA的先计算联合概率体现在哪里 2.对于theta 的采样的理解,下文中的theta1 ,theta2等其实是指theta向量中的第一个,第二个等,也就是不同文章的不同单词的主题,固定其他,分别…

LDA的通俗理解

1.PLSA模型 在讲解LDA模型之前,与LDA模型最为接近的便是下面要阐述的这个pLSA模型,给pLSA加上贝叶斯框架,便是LDA。 1.1什么是pLSA模型 我们假定一篇文档只由一个主题生成,可实际中,一篇文章往往有多个主题&#xff…

LDA模型详解

LDA是自然语言处理中非常常用的一个主题模型,全称是隐含狄利克雷分布(Latent Dirichlet Allocation),简称LDA。作用是将文档集中每篇文档的主题以概率分布的形式给出,然后通过分析分到同一主题下的文档抽取其实际的主题…

机器学习——LDA(线性判别分析)与人脸识别

忆如完整项目/代码详见github:https://github.com/yiru1225(转载标明出处 勿白嫖 star for projects thanks) 目录 系列文章目录 一、LDA的概念与原理 1.LDA简介 2.LDA算法模型 3.LDA的不足与优化 二、LDA运用于人脸识别 1.预处理 1…

线性判别分析(LDA)详解

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。 目录 一、LDA简介 二、数学原理(以二分类为例子) 1、设定 2、每一类的均值和方差 3、目标函数 4、目标…

LDA算法——线性判别

目录 一、前言 二、什么是LDA? 三、LDA原理 1.二分类问题 2.多分类问题 3.几点说明 四、算法实现 一、前言 之前我们已经介绍过PCA算法,这是一种无监督的降维方法,可以将高维数据转化为低维数据处理。然而,PCA总是能适用吗&…

主题模型:LDA原理详解与应用

LDA算法简介: LDA是一种基于贝叶斯思想的无监督的聚类算法,广泛用于文本聚类,文本分析,文本关键词等场景。具体的,算法 的输入是一个文档的集合D{d1, d2, d3, ... , dn},同时还需要主题Topic的类别数量m&a…

LDA主题模型简介及Python实现

一、LDA主题模型简介 LDA主题模型主要用于推测文档的主题分布,可以将文档集中每篇文档的主题以概率分布的形式给出根据主题进行主题聚类或文本分类。 LDA主题模型不关心文档中单词的顺序,通常使用词袋特征(bag-of-word feature)来…

制作属于自己的个人博客-超详细教程

SpringBoot个人博客 一.博客效果预览 博客首页预览 博客详情预览 博客评论区预览 博客底部栏预览 关于页面预览 二.博客效果在线预览 http://blog.ShaoxiongDu.top 三.项目技术 后端SpringBoot框架 分为控制层(Controller) 业务层(Service) 数据持久层(Dao) 按照Spring…

如何搭建个人博客

新的安装方式:(强烈推荐,简单方便) 利用dockernginx配置halo博客 先碎碎念一下,最近在学习springboot项目,在b站跟着up主研究如何写一个简易的博客来着,后来发现可以直接简易的搭建一个博客(都不用写代码&a…

使用 nodejs 搭建个人博客

"使用nodejs搭建自己的个人博客" 说明运行后端 node 模块后端框架采用的是 express 框架进行接口构建,具体解释如下:数据库参数配置评论邮箱提示付费文件下载配置(支付宝)评论语句检测 关于跨域问题的解决 说明 使用no…

超详细图解:如何使用 WordPress搭建一个个人博客?

前两天我用WordPress 给自己搭建了一个网站,整个过程非常的顺利,体验非常地好,于是我就整个过程、以及其中的一些搭建心得,记录下来。 如果你也正好有搭建个人网站的想法,那么本文会给你一个参考,也许看了这…

个人博客网站的设计与实现

/ 前话 / 纯手工敲代码,代码结构简单,divcss布局html静态个人博客首页网页设计,dreamwaver和hb都可以编辑,文件结构包含了css、fonts、images、js和html,运用html5技术,包括nav标签、header标签和footer标签…

个人博客系统毕业设计开题报告

本文给出的是本科生个人博客系统的毕业设计开题报告,仅供参考!(具体模板和要求按照自己学校给的要求) 毕业设计开题报告 一、选题意义二、博客系统概述三 、毕业设计研究方案四、功能结构图五、进度安排六、参考文献 一、选题意义…

基于HTML个人博客网站项目的设计与实现——个人博客作品展示6页 HTML+CSS

Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 个人博客网站 | 个人主页介绍 | 个人简介 | 个人博客设计制作 | 等网站的设计与制作 | 大学生个人HTML网页设计作品 | HTML期末大学生网页设计作业 HTML:结构 CSS&…

HTML制作个人网页制作(简单静态HTML个人博客网页作品)

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

个人主页博客网页设计制作HTML5+CSS大作业——清新春暖花开个人博客网站(6页)

HTML5CSS大作业——清新春暖花开个人博客网站(6页) 常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄…

如何使用HTML制作个人网站(如何搭建个人博客)

📂文章目录 一、👨‍🎓网站题目二、✍️网站描述三、📚网站介绍四、🌐网站演示五、⚙️ 网站代码🧱HTML结构代码💒CSS样式代码 六、🥇 如何让学习不再盲目七、🎁更多干货…

10分钟搭建一个免费个人博客网站

一个程序员怎么能不拥有自己的博客,本文让10分钟快速搭建部署好自己的博客 准备工作 有Gitee账号有安装git会 markdown 编写文档Node.js 版本 > 8.6 博客采用VuePress搭建,Gitee部署,接下来,5步搞定。 1.创建项目 创建项目…

用html制作学生个人博客,网页制作论坛(学生个人网页制作代码)

许多开发人员认为擅长设计是一种天生的能力,而创造力是与生俱来的。但是设计是一项可以像其他任何东西一样学习的技能。你不必天生就可以创建一个漂亮的网站的艺术家,这需要实践。在身边的小伙伴的博客,自己的网站来看,很多人都是用了开源后台的网站模板,熟不知局限太大,…