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

news2024/10/5 19:10:53

目录

  • 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
# 定义LDA类
class LDA:
    def __init__(self, n_components=2, kernel='rbf', gamma=400):
      self.n_components = n_components
      self.kernel = kernel
      self.gamma = gamma
    def 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算法计算投影矩阵W
      eig_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_new[:, 0], X_new[:, 1], c=y)

3.3 结果展示

运行结果如下:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/573836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习笔记(八)——语义分割标注转换

核心思想:“将颜色转换成对应的标号” 形式一:Json格式的标注转换成调色板mask 形式二:RGB类型mask(24位三通道)转成调色板mask(8位单通道),调色板的格式为.png 形式三:对于二分类的…

oracle安装

服务端安装(公司中不需要,只安装客户端就行) 1、挂载一个Windows系统 双击vmx文件 启动 2、网络配置 添加一个网络 自己电脑看控制面板是否添加虚拟网卡 查看连接的网络,ip地址不能为1,为1就自己修改,…

深度剖析:C++内存池的设计与实现

深度剖析:C内存池的设计与实现 一、引言(Introduction)1.1 内存管理的重要性1.2 内存池的基本概念1.3 内存池的应用场景 二、C内存管理机制(C Memory Management Mechanism)2.1 C内存分配与释放2.2 C内存管理的问题2.3…

《Kali渗透基础》04. 主动信息收集(一)

kali渗透 1:主动信息收集2:发现3:二层发现3.1:arping3.2:nmap3.3:netdiscover3.4:Scapy 4:三层发现4.1:ping4.2:Scapy4.3:nmap4.4:fpi…

Win2016服务器DNS服务搭建

文章目录 前言一、什么是DNS?1.为什么需要DNS系统2.为DNS(Domain Name System,域名系统)的功能3.域名解决方案的演进 二、域名介绍1.域名空间结构2.常见的顶级域名 三、DNS解析原理1.查询过程及方式2.DNS的查询分类 四、配置DNS服…

【论文精读】ICLR2022 - 语言驱动的语义分割

【论文精读】ICLR2022 - 语言驱动的语义分割 【论文原文】:LANGUAGE-DRIVEN SEMANTIC SEGMENTATION 【作者信息】:Boyi Li Cornell University, Cornell Tech Kilian Q. Weinberger Cornell University Serge Belongie University of Copenhagen Vladl…

2023年试用uniapp、vue2、vue3、typescript、vite、nvue

1. 前言 试用了一下 uniapp、vue2、vue3、typescript、vite、nvue 等技术,写了两个页面,两个页面加起来不到400行代码。 尝试使用了四种组合: 组合1:uniapp vue2 JavaScript nvue文件 非fast模式 组合2:uniapp…

【C++系列Pn】模板搞不懂,脑阔抖三抖(精讲模板,快来复习趴)

前言 大家好吖,欢迎来到 YY 滴 C系列 ,热烈欢迎!本章主要内容面向接触过C的老铁,主要内容含 目录 一.模板 1.函数模板 一.函数模板概念 二.函数模板的格式 三.函数模板的实例化 1.隐式实例化 2.显式实例化 3.模板参数的…

数据库的简介

文章目录 前言一、为什么需要数据库二、数据库基本概念1.什么是数据库2.什么是数据库管理系统3.数据库表4.数据库表 三、常见的数据库管理系统 前言 数据库的简介 一、为什么需要数据库 信息时代数据容量海量增长,结构化存储大量数据,便于高效的检索和…

如何在华为OD机试中获得满分?Java实现【区块链文件转储系统】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

完全详解权限系统设计方案

1 为什么需要权限管理 日常工作中权限的问题时时刻刻伴随着我们,程序员新入职一家公司需要找人开通各种权限,比如网络连接的权限、编码下载提交的权限、监控平台登录的权限、运营平台查数据的权限等等。 在很多时候我们会觉得这么多繁杂的申请给工作带…

【JavaSE】Java基础语法(十五):继承

文章目录 1. 继承的实现2. 继承的好处和弊端3. Java中继承的特点4. 继承中的成员访问特点5. super6. 继承中构造方法的访问特点7. 继承中成员方法的访问特点8. super内存图9. 方法重写10. 权限修饰符 1. 继承的实现 继承的概念 继承是面向对象三大特征之一,可以使得…

G0第23章 :gorm介绍、模型定义、连接数据库

01 GORM介绍 https://gorm.io/zh_CN/docs/ gorm是一个使用Go语言编写的ORM框架。它文档齐全,对开发者友好,支持主流数据库。 特性 全功能 ORM关联 (Has One,Has Many,Belongs To,Many To Many,多态&…

SentinelResource配置

1.SentinelResource配置(上) 1.1.按资源名称限流 后续处理 1.1.1.启动Nacos成功 1.1.2.启动Sentinel成功 1.1.3.添加控制器 import com.alibaba.csp.sentinel.annotation.SentinelResource; import com.alibaba.csp.sentinel.slots.block.BlockExc…

2023-05-26:golang关于垃圾回收和析构函数的选择题,多数人会选错。

2023-05-26:golang关于垃圾回收和析构的选择题,代码如下: package mainimport ("fmt""runtime""time" )type ListNode struct {Val intNext *ListNode }func main0() {a : &ListNode{Val: 1}b : &Li…

使用Jmeter进行http接口性能测试

在进行网页或应用程序后台接口开发时,一般要及时测试开发的接口能否正确接收和返回数据,对于单次测试,Postman插件是个不错的Http请求模拟工具。 但是Postman只能模拟单客户端的单次请求,而对于模拟多用户并发等性能测试&#xf…

Linux入门笔记

Linux 1.概述 2.命令 1.常用命令 新建文件 touch 新建目录 mkdir Linux命令格式⭐️ 选项可以对命令具体控制 2.文件目录操作 1.ls ll命令用的很多 显示出非隐藏文件的详细信息 2.cd ~表示当前用户目录,如root用户目录 \表示根目录 3.查看命令 1.cat查看命令 -n…

【Python爬虫项目实战四】Chatgpt国内接口分享第一期

目录 🍇前言接口一接口二(免费学习测试 wuguokai)接口三(AI文本工具站)🍇前言 前几次分享的py接口,由于不经常维护导致你们下载的时候已经失效了,为了回馈粉丝,昨晚我想实在不行我就弄个接口出来吧,我自己维护,有问题咱们就在评论下方留言,我及时做更新处理就可…

树形结构的表设计与Java接口实现

文章目录 1、开发需求中的树形结构2、表结构设计3、接口实现代码模型类与接口定义Mapper层开发 1、开发需求中的树形结构 树形结构在日常开发中很常见,如: 再比如: 还有: 2、表结构设计 这种树形结构,其 核心字段为p…

【自制C++深度学习推理框架】计算图的设计思路

计算图的设计思路 什么是计算图 在深度学习推理框架中,计算图是一种数据结构,它由算子节点和数据节点组成,在该图中前向传播时数据从输入节点开始流动,经过一层层的计算后输出到输出节点,表示深度学习模型的计算过程…