Day20 常见降维算法分析

一、常见的降维算法

  1. LDA线性判别
  2. PCA主成分分析
  3. t-sne降维

二、降维算法原理

2.1 LDA 线性判别
  • 原理 :LDA(Linear Discriminant Analysis)线性判别分析是一种有监督的降维方法。它的目标是找到一个投影方向,使得不同类别的数据在投影后尽可能分开,同一类别的数据尽可能聚集。通过最大化类间散度与类内散度的比值,来确定最优的投影方向。
  • 数学公式 :设 S b S_b Sb 为类间散度矩阵, S w S_w Sw 为类内散度矩阵,LDA 就是求解广义特征值问题 S b w = λ S w w S_bw = \lambda S_ww Sbw=λSww,其中 w w w 为投影方向, λ \lambda λ 为特征值。
2.2 PCA 主成分分析
  • 原理 :PCA(Principal Component Analysis)主成分分析是一种无监督的降维方法。它通过对数据进行线性变换,将原始数据投影到一组新的正交坐标轴上,这些坐标轴称为主成分。主成分按照方差大小排序,方差越大表示该主成分包含的信息越多。PCA 选择前 k k k 个方差最大的主成分作为新的特征,从而实现降维。
  • 数学公式 :首先计算数据的协方差矩阵 Σ \Sigma Σ,然后对 Σ \Sigma Σ 进行特征值分解 Σ = U Λ U T \Sigma = U\Lambda U^T Σ=UΛUT,其中 U U U 是特征向量矩阵, Λ \Lambda Λ 是特征值对角矩阵。选择前 k k k 个特征向量组成投影矩阵 W W W,将原始数据 X X X 投影到新的空间 Y = X W Y = XW Y=XW
2.3 t - SNE 降维
  • 原理 :t - SNE(t - Distributed Stochastic Neighbor Embedding)是一种非线性降维方法,主要用于高维数据的可视化。它通过构建高维数据点和低维数据点之间的概率分布,使得高维空间中相似的数据点在低维空间中也尽可能相似。t - SNE 使用 t 分布来计算低维空间中的相似度,从而解决了传统降维方法在处理局部结构时的不足。
  • 数学公式 :t - SNE 定义了高维空间中数据点之间的相似度 p i j p_{ij} pij 和低维空间中数据点之间的相似度 q i j q_{ij} qij,通过最小化这两个分布之间的 KL 散度 C = K L ( P ∣ ∣ Q ) = ∑ i ∑ j p i j log ⁡ p i j q i j C = KL(P||Q) = \sum_{i}\sum_{j}p_{ij}\log\frac{p_{ij}}{q_{ij}} C=KL(P∣∣Q)=ijpijlogqijpij 来找到最优的低维表示。

三、实验过程

3.1 数据预处理
  • 读取 heart.csv 数据集,将特征数据和目标变量分离。
  • 对特征数据进行标准化处理,使得每个特征的均值为 0,方差为 1,以避免特征尺度对降维结果的影响。
import pandas as pd
from sklearn.preprocessing import StandardScaler# 读取数据
data = pd.read_csv('./csv/heart.csv')
X = data.drop('target', axis=1)  # 特征数据
y = data['target']  # 目标变量# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
3.2 降维实验
  • LDA 线性判别 :使用 sklearn 库中的 LinearDiscriminantAnalysis 类进行降维,将数据降维到 1 维(因为目标变量是二分类,LDA 最多可将数据降维到 C − 1 C - 1 C1 维, C C C 为类别数)。
from sklearn.discriminant_analysis import LinearDiscriminantAnalysislda = LinearDiscriminantAnalysis(n_components=1)
X_lda = lda.fit_transform(X_scaled, y)
  • PCA 主成分分析 :使用 sklearn 库中的 PCA 类进行降维,将数据降维到 2 维,以便可视化。
from sklearn.decomposition import PCApca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
  • t - SNE 降维 :使用 sklearn 库中的 TSNE 类进行降维,将数据降维到 2 维,以便可视化。
from sklearn.manifold import TSNEtsne = TSNE(n_components=2)
X_tsne = tsne.fit_transform(X_scaled)
3.3 结果可视化
  • 分别绘制 LDA、PCA 和 t - SNE 降维后的数据散点图,不同类别的数据用不同颜色表示,以便直观观察降维效果。
import matplotlib.pyplot as plt# LDA 可视化
plt.figure(figsize=(15, 5))
plt.subplot(131)
plt.scatter(X_lda, [0] * len(X_lda), c=y, cmap='viridis')
plt.title('LDA')# PCA 可视化
plt.subplot(132)
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.title('PCA')# t - SNE 可视化
plt.subplot(133)
plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y, cmap='viridis')
plt.title('t - SNE')plt.show()

在这里插入图片描述

四、实验结果分析

4.1 可视化结果分析
  • 观察 LDA 降维后的散点图,分析不同类别数据在 1 维空间中的分离情况,判断 LDA 是否能够有效区分不同类别的数据。
  • 观察 PCA 降维后的散点图,分析数据在 2 维空间中的分布情况,判断 PCA 是否能够保留数据的主要信息。
  • 观察 t - SNE 降维后的散点图,分析数据在 2 维空间中的局部结构和聚类情况,判断 t - SNE 是否能够揭示数据的潜在分布。
4.2 降维效果评估
  • 可以使用一些评估指标来量化降维效果,如保留的方差比例(PCA)、分类准确率(使用降维后的数据进行分类任务)等。
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 使用 PCA 降维后的数据进行分类
X_train_pca, X_test_pca, y_train, y_test = train_test_split(X_pca, y, test_size=0.2, random_state=42)
model_pca = LogisticRegression()
model_pca.fit(X_train_pca, y_train)
y_pred_pca = model_pca.predict(X_test_pca)
accuracy_pca = accuracy_score(y_test, y_pred_pca)# 同理可对 LDA 和 t - SNE 降维后的数据进行分类评估print(f"PCA 降维后分类准确率: {accuracy_pca}")

五、结论

总结三种降维算法在 heart.csv 数据集上的优缺点和适用场景。例如,LDA 作为有监督的降维方法,在分类任务中可能更能突出类别间的差异;PCA 是无监督的线性降维方法,计算效率高,适合处理大规模数据;t - SNE 作为非线性降维方法,在可视化方面表现较好,但计算复杂度较高。根据实验结果,为不同的数据分析需求推荐合适的降维算法。

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

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

相关文章

Python----机器学习(模型评估:准确率、损失函数值、精确度、召回率、F1分数、混淆矩阵、ROC曲线和AUC值、Top-k精度)

一、模型评估 1. 准确率(Accuracy):这是最基本的评估指标之一,表示模型在测试集上正确 分类样本的比例。对于分类任务而言,准确率是衡量模型性能的直观标准。 2. 损失函数值(Loss)&#xff1…

cdn 是什么?

内容分发网络,Content Delivery Network 介绍 CDN(Content Delivery Network)是一种将内容分发到靠近用户的边缘服务器,以加速访问速度、减少延迟、降低源站压力的网络系统。 CDN 把网站的静态资源(如 HTML、JS、CSS、…

BUCK基本原理学习总结-20250509

一、电感伏秒平衡特性 处于稳定状态的电感,开关导通时间(电流上升段)的伏秒数须与开关关断(电流下降段)时的伏秒数在数值上相等,尽管两者符号相反。这也表示,绘出电感电压对时间的曲线,导通时段曲线的面积必须等于关断时段曲线的面积。 二、BUCK的基本概念和原理 基…

【K8S系列】Kubernetes常用 命令

以下为的 Kubernetes 超全常用命令文档,涵盖集群管理、资源操作、调试排错等核心场景,结合示例与解析, 高效运维 Kubernetes 环境。 一、集群与节点管理 1. 集群信息查看 查看集群基本信息kubectl cluster-info # 显示API Server、DNS等核…

【Django】REST 常用类

ModelSerializer serializers.ModelSerializer 是 Django REST framework(DRF)里的一个强大工具,它能极大简化序列化和反序列化 Django 模型实例的流程。下面从多个方面详细介绍它: 1. 基本概念 序列化是把 Django 模型实例转化…

GuassDB如何创建兼容MySQL语法的数据库

GaussDB简介 GaussDB是由华为推出的一款全面支持OLTP和OLAP的分布式关系型数据库管理系统。它采用了分布式架构和高可靠性设计,可以满足大规模数据存储和处理的需求。GaussDB具有高性能、高可靠性和可扩展性等特点,适用于各种复杂的业务场景&#xff0c…

【无标题】I/O复用(epoll)三者区别▲

一、SOCKET-IO复用技术 定义:SOCKET - IO复用技术是一种高效处理多个套接字(socket)的手段,能让单个线程同时监听多个文件描述符(如套接字)上的I/O事件(像可读、可写、异常)&#x…

spring中的@Qualifier注解详解

1. 核心作用 Qualifier是Spring框架中用于解决依赖注入歧义性的关键注解。当容器中存在多个相同类型的Bean时,Autowired默认按类型自动装配会抛出NoUniqueBeanDefinitionException异常,此时通过Qualifier指定Bean的唯一标识符(名称或自定义限…

Python爬虫实战:获取文学网站四大名著并保存到本地

一、引言 1.1 研究背景 中国古典四大名著承载着深厚的文化底蕴,是中华民族的宝贵精神财富。在互联网时代,网络文学资源虽丰富多样,但存在分散、质量参差不齐等问题 。部分文学网站存在访问限制、资源缺失等情况,用户难以便捷获取完整、高质量的经典著作内容。开发专业的爬…

【一】浏览器的copy as fetch和copy as bash的区别

浏览器的copy as fetch和copy as bash的区别 位置:devTools->network->请求列表右键 copy as fetch fetch("https://www.kuaishou.com/graphql", {"headers": {"accept": "*/*","accept-language": &qu…

渠道销售简历模板范文

模板信息 简历范文名称:渠道销售简历模板范文,所属行业:其他 | 职位,模板编号:KRZ3J3 专业的个人简历模板,逻辑清晰,排版简洁美观,让你的个人简历显得更专业,找到好工作…

Java大数据可视化在城市空气质量监测与污染溯源中的应用:GIS与实时数据流的技术融合

随着城市化进程加速,空气质量监测与污染溯源成为智慧城市建设的核心议题。传统监测手段受限于数据离散性、分析滞后性及可视化能力不足,难以支撑实时决策。2025年4月27日发布的《Java大数据可视化在城市空气质量监测与污染溯源中的应用》一文&#xff0c…

《面向对象程序设计-C++》实验五 虚函数的使用及抽象类

程序片段编程题 1.【问题描述】 基类shape类是一个表示形状的抽象类&#xff0c;area( )为求图形面积的函数。请从shape类派生三角形类(triangle)、圆类&#xff08;circles&#xff09;、并给出具体的求面积函数。注&#xff1a;圆周率取3.14 #include<iostream> #in…

用c语言实现——一个交互式的中序线索二叉树系统,支持用户动态构建、线索化、遍历和查询功能

知识补充&#xff1a;什么是中序线索化 中序遍历是什么 一、代码解释 1.结构体定义 Node 结构体&#xff1a; 成员说明&#xff1a; int data&#xff1a;存储节点的数据值。 struct Node* lchild&#xff1a;该节点的左孩子 struct Node* rchild&#xff1a;该节点的右孩子…

高拟人化客服机器人显著提升用户接受度

高拟人化客服机器人显著提升用户接受度 目录 高拟人化客服机器人显著提升用户接受度思维导图详细总结一、研究背景与目的二、理论基础与变量设计三、研究方法与实验设计四、核心结论与策略建议五、研究局限与未来方向关键问题与答案高拟人化客服机器人显著提升用户接受度,且与…

202534 | KafKa简介+应用场景+集群搭建+快速入门

Apache Kafka 简介 一、什么是 Kafka&#xff1f; Apache Kafka 是一个高吞吐量、分布式、可扩展的流处理平台&#xff0c;用于构建实时数据管道和流应用程序。它最初由 LinkedIn 开发&#xff0c;并于 2011 年开源&#xff0c;目前由 Apache 软件基金会进行维护。 Kafka 具备…

Blender 初学者指南 以及模型格式怎么下载

glbxz.com glbxz.com 可以直接下载Blender格式模型 第 1 步&#xff1a;打开 这就是 blender 打开时的样子。 您面对的是左侧和右侧的工具栏&#xff0c;顶部是文件作&#xff0c;底部是时间轴&#xff0c;中间是 3D 视图。 Blender 的默认起始网格是一个立方体&#xff0c…

RV1126 ROS2环境交叉编译及部署(基于官方Docker)

RV1126 ROS2环境交叉编译及部署(基于官方Docker) 0 前言1 SDK源码更新1.1 启动Docker容器1.2 更新SDK源码1.3 SDK更新问题2 ROS2编译配置3 Buildroot rootfs编译ROS2的依赖包3.1 编译问题解决4 使用Docker交叉编译ROS24.1 准备Linux(Ubuntu) PC机的依赖环境4.1.1 Ubuntu PC机…

Go 面向对象,封装、继承、多态

Go 面向对象&#xff0c;封装、继承、多态 经典OO&#xff08;Object-oriented 面向对象&#xff09;的三大特性是封装、继承与多态&#xff0c;这里我们看看Go中是如何对应的。 1. 封装 封装就是把数据以及操作数据的方法“打包”到一个抽象数据类型中&#xff0c;这个类型…

无线网络设备中AP和AC是什么?有什么区别?

无线网络设备中AP和AC是什么&#xff1f;有什么区别&#xff1f; 一. 什么是AP&#xff1f;二. 什么是AC&#xff1f;三. AP与AC的关系 前言 肝文不易&#xff0c;点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有惊喜。 作者&#xff1a;神的孩子都…