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

news/2024/12/20 3:14:11/

目录

  • 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_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_new[:, 0], X_new[:, 1], c=y)

3.3 结果展示

运行结果如下:

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


http://www.ppmy.cn/news/91708.html

相关文章

Topic exercises

Writing topic exercises 1. 要求高中生参加社区服务对他们的身体健康有好处2. 经常使用电脑和手机交流会影响 writing skills Because解释原因的时候应该使用一般现在时,而不应该是can do what thing 1. 要求高中生参加社区服务对他们的身体健康有好处 要求高中生…

QT 设计ROS GUI界面订阅和发布话题

QT 设计ROS GUI界面订阅和发布话题 主要参考下面的博客 ROS项目开发实战(三)——使用QT进行ROS的GUI界面设计(详细教程附代码!!!) Qt ROS 相关配置请看上一篇博客 首先建立工作空间和功能包&a…

英文论文(sci)解读复现【NO.12】YOLO-Tea: YOLOv5改进的茶叶病害检测模型

此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

Comparable和Comparetor

java中的一些sort方法,都需要靠Comparable和Comparetor来实现 List的sort方法,必须要ComparetorCollections.sort方法,实现了重载,可以Comparable,也可以Comparetorstream().sorted()方法,实现了重载&…

第三十八回:Tooltip Widget

文章目录 概念介绍使用方法示例代码经验总结 我们在上一章回中介绍了BottomSheet Widget相关的内容,本章回中将介绍 Tootip Widget.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里说的Tooltip也是一种弹出窗口,当指针悬停于某个组件上或者长…

一文速学(十四)-数据分析之Pandas处理DataFrame稀疏数据及维度不匹配数据详解

目录 前言 一、索引缺失 二、负值取正 三.提取数值 四、提取唯一值

Java 最新抽象类和接口经典面试题合集(含答案)

Java 最新抽象类和接口面试题合集 1.抽象类中能不能包含方法体?2.抽象类能不能被实例化?为什么?3.抽象方法可以被 private 修饰吗?为什么?4.添加以下哪个选项不会引起编译器报错?5.以下关于抽象类和抽象方法说法正确的是?6.接口和普通类有什么关系?7.接口能不能有方法体…

MySQL高级篇(SQL优化、索引优化、锁机制、主从复制)

目录 0 存储引擎介绍1 SQL性能分析2 常见通用的JOIN查询SQL执行加载顺序七种JOIN写法 3 索引介绍3.1 索引是什么3.2 索引优劣势3.3 索引分类和建索引命令语句3.4 索引结构与检索原理3.5 哪些情况适合建索引3.6 哪些情况不适合建索引 4 性能分析4.1 性能分析前提知识4.2 Explain…