LDA算法实现鸢尾花数据集降维

article/2025/9/18 20:26:28

目录

  • 1. 作者介绍
  • 2. LDA降维算法
    • 2.1 基本概念
    • 2.2 算法流程
  • 3. LDA算法实现
    • 3.1 数据集介绍
    • 3.2 代码实现
    • 3.3 结果展示

1. 作者介绍

唐杰,男,西安工程大学电子信息学院,2022级研究生
研究方向:机器视觉与人工智能
电子邮件:3225033259@qq.com

陈梦丹,女,西安工程大学电子信息学院,2022级硕士研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:1169738496@qq.com

2. LDA降维算法

2.1 基本概念

线性判别分析(Linear Discriminant Analysis,LDA)是一种经典的降维方法。和主成分分析PCA不考虑样本类别输出的无监督降维技术不同,LDA是一种监督学习的降维技术,数据集的每个样本有类别输出。

LDA分类思想:多维空间中,数据处理分类问题较为复杂,LDA算法将多维空间中的数据投影到一条直线上,将d维数据转化成1维数据进行处理。对于训练数据,设法将多维数据投影到一条直线上,同类数据的投影点尽可能接近,异类数据点尽可能远离。对数据进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定样本的类别。

如果用一句话概括LDA思想,即“投影后类内方差最小,类间方差最大”。

2.2 算法流程

LDA算法流程如下:
在这里插入图片描述

3. LDA算法实现

3.1 数据集介绍

Iris数据集的中文名是安德森鸢尾花卉数据集,英文全称是Anderson’s Iris data set。Iris包含150个样本,对应数据集的每行数据。每行数据包含每个样本的四个特征和样本的类别信息,所以Iris数据集是一个150行5列的二维表。

通俗地说,Iris数据集是用来给花做分类的数据集,每个样本包含了花萼长度、花萼宽度、花瓣长度、花瓣宽度四个特征(前4列),我们需要建立一个分类器,分类器可以通过样本的四个特征来判断样本属于山鸢尾、变色鸢尾还是维吉尼亚鸢尾(这三个名词都是花的品种)。

Iris的每个样本都包含了品种信息,即目标属性(第5列,也叫target或label)。如下所示:
在这里插入图片描述

3.2 代码实现

import numpy as np
from sklearn.datasets import load_iris
from sklearn.preprocessing import MinMaxScaler
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt2# 定义LDA类
class LDA:def __init__(self, n_components=2, kernel='rbf', gamma=400):self.n_components = n_componentsself.kernel = kernelself.gamma = gammadef fit(self, X, y):# 计算内部和外部类别散度矩阵X_mean = np.mean(X, axis=0)S_W = np.zeros((X.shape[1], X.shape[1]))S_B = np.zeros((X.shape[1], X.shape[1]))for i in range(3):X_class = X[y == i, :]X_class_mean = np.mean(X_class, axis=0)S_W += np.dot((X_class - X_class_mean).T, (X_class - X_class_mean))S_B += len(X_class) * np.dot((X_class_mean - X_mean).reshape(-1, 1), (X_class_mean - X_mean).reshape(1, -1))# 使用LDA算法计算投影矩阵Weig_val, eig_vec = np.linalg.eig(np.dot(np.linalg.inv(S_W), S_B))idx = np.argsort(-eig_val.real)self.W = eig_vec[:, idx[:self.n_components]]# 归一化处理scaler = MinMaxScaler()self.W = scaler.fit_transform(self.W)def transform(self, X):# 投影到特征空间X_new = np.dot(X, self.W)# 归一化处理scaler = MinMaxScaler()X_new = scaler.fit_transform(X_new)return X_new# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target# 模型训练
lda = LDA(n_components=2, kernel='rbf')
lda.fit(X, y)# 数据转换
X_new = lda.transform(X)# 可视化降维前的数据分布
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()# 可视化降维后的数据分布
plt2.scatter(X_new[:, 0], X_new[:, 1], c=y)
plt2.show()

3.3 结果展示

运行结果如下:

图一 鸢尾花数据集前两维分布图
在这里插入图片描述
图二 降维后数据分布图
在这里插入图片描述


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

相关文章

秒懂---LDA算法

线性判别分析LDA原理总结 在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结。这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总结。LDA在模式识别领域&…

基于Sklearn实现LDA算法

文章目录 一、LDA算法二、sklearn实现LDA三、结果如图四、总结五、参考 一、LDA算法 1.线性判别分析(Linear Discriminant Analysis, LDA)方法常被用于数据预处理中的降维(dimensionality reduction)步骤。LDA在保证良好的类别区…

LDA算法推导

LDA算法是什么 简单地说LDA算法就是向低维度投影,让同一类别数据投影点更接近,不同类别数据点距离更远。 LDA原理 定义,已知 我们要把两类数据都投影到w直线上。 让不同类别的数据的类别中心之间的距离尽可能的大, 同一种类别数…

线性判别分析LDA原理总结

转自http://www.cnblogs.com/pinard/p/6244265.html 在主成分分析(PCA)原理总结中,我们对降维算法PCA做了总结。这里我们就对另外一种经典的降维方法线性判别分析(Linear Discriminant Analysis, 以下简称LDA)做一个总…

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

LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discriminant Analysis, LDA),也叫做Fisher线性判别(Fisher Linear Discriminant ,FLD),是模式识别的经典算法,它是在1996年由Belhumeur引入模式识别和人工智能领域的。性鉴别分析的基本思想是将高维的模式样本投影到…

机器学习笔记17-LDA算法

1. LDA算法简介 LDA(线性判别式分析 Linear Discriminant Analysis)属于机器学习中的监督学习算法,常用来做特征提取、数据降维和任务分类。在人脸识别、人脸检测等领域发挥重要作用。LDA算法与PCA算法都是常用的降维技术。二者的区别在于&a…

数据结构层次遍历二叉树

2022.11.19 计算二叉树的深度和节点个数 任务描述相关知识编程要求测试说明C/C代码 任务描述 本关任务:给定一棵二叉树,借助队列实现层次遍历二叉树。 相关知识 为了完成本关任务,你需要掌握:1.队列基本操作,2.二叉…

树的层次遍历

二叉树的前序、中序、后序遍历我想大家应该都很熟悉了,那我们今天就来讲一下二叉树的层次遍历。 二叉树的前序、中序、后序遍历需要用到栈(递归的过程也就是一个栈),层次遍历需要借助队列这个数据结构。 层次遍历的思路 我们给…

层次遍历_树

哈喽大家好,这里是蒟蒻hanyiyang的博文,今天,我来给大家,介绍一个关于图的算法,希望能帮助到大家!!! 层次遍历 大家来看一看上面这个图,为什么要说这是层次遍历呢&…

树的应用 —— 二叉树的遍历【层次遍历、遍历序列还原树】

树的应用 —— 二叉树的遍历【层次遍历、遍历序列还原树】 【层次遍历】 二叉树的遍历一般有先序遍历、中序遍历和后序遍历,除了这三种遍历,还有另一种遍历方式——层次遍历,即按照层次的顺序从左向右进行遍历。 一棵树如下图所示。 层次…

二叉树:层次遍历算法(自上而下,从左到右)

层次遍历(LevelOrder)就是默认为自上而下,从左到右,一层一层进行遍历, 层次遍历需要借助队列来完成, 队列:先进先出(FIFO)。 分析:如图有一棵二叉树&#xff…

MATLAB符号运算——微分

微分 微分在数学中的定义:由函数Bf(A),得到A、B两个数集,在A中当dx靠近自己时,函数在dx处的极限叫作函数在dx处的微分,微分的中心思想是无穷分割。 在MATLAB中计算微分 函数:diff 调用格式: …

matlab中常用符号

在使用MATLAB的过程中,经常需要对输出图形中的变量进行标注,其中经常遇到的难题就是如何标注各种上标、下标、斜体、黑体、箭头、上圆圈、正负号等特殊符号,以及如何标注特殊的数学符号。这里第一机电网给大家总结一下,希望对大家…

MATLAB符号运算(七)

目录 1、实验目的: 2、实验内容: 1、实验目的: 1)掌握定义符号对象和创建符号表达式的方法; 2)掌握符号运算基本命令和规则; 3)掌握符号表达式的运算法则以及符号矩阵运算&#xf…

MATLAB符号运算小技巧

1. 引言 MATLAB具备强大的符号运算功能。符号运算就是所谓的计算机代数,通俗的说就是利用计算机进行数学公式的推导。这篇文章主要总结几个MATLAB进行符号运算时的小技巧,这也是作者在进行技术研究过程中实际碰到的一些难题,希望后来者能少走…

Matlab-运算符

运算符是一个符号,它告诉编译器执行特定的数学或逻辑操作。MATLAB主要用于整个矩阵和阵列的操作。因此,MATLAB中的运算符既可用于标量数据也可用于非标量数据。MATLAB允许以下类型的基本操作 算术运算符 关系运算符 逻辑运算符 按位运算符 集合运算符…

matlab常见符号运算(计算导数,积分、符号求和等))

符号运算的建立 sym 函数用来建立单个符号量,一般调用格式为: 符号变量 sym(A) 参数 A 可以是一个数或数值矩阵,也可以是字符串 syms 命令用来建立多个符号量,一般调用格式为: syms 符号变量1 符号变量2 … 符号变量…

MATLAB符号变量的创建和简单运算

声明:本文章中数据来自清风老师数学建模课程 文章目录 MATLAB符号变量的创建和简单运算1、符号变量1. 1 符号变量的创建1.2 符号方程的创建3 符号矩阵的创建 2、符号运算2.1 简单运算2.2 表达式的整理2.3 因式分解2.4 多项式展开2.5 合并2.6 计算分子与分母2.7 让结…

第十一章:MATLAB:符号运算(符号与数值,符号矩阵)

第十一章:MATLAB符号运算 11.1. 符号与数值11.1.1. 符号与数值间的转换实例-数值与符号转换 11.1.2. 符号表达式与数值表达式的精度设置实例-魔方矩阵的数值解实例-稀疏矩阵的数值解实例-伴随矩阵的数值解实例-托普利兹矩阵的数值解 11.2. 符号矩阵11.2.1. 符号矩阵…

MATLAB的符号运算基础

在数学运算中,运算的结果如果是一个数值,可以称这类运算为数值运算;如果运算结果为表达式,在MATLAB中称为符号运算,符号计算是对未赋值的符号对象(可以是常数、变量、表达式)进行运算和处理。MATLAB具有符号数学工具箱…