当前位置: 首页 > article >正文

pytorch实现主成分分析 (PCA):用于数据降维和特征提取

 人工智能例子汇总:AI常见的算法和例子-CSDN博客 

使用 PyTorch 实现主成分分析(PCA)可以通过以下步骤进行:

  1. 标准化数据:首先,需要对数据进行标准化处理,确保每个特征的均值为 0,方差为 1。

  2. 计算协方差矩阵:计算数据的协方差矩阵,以捕捉特征之间的关系。

  3. 特征值分解:对协方差矩阵进行特征值分解,获得主成分。

  4. 选择主成分:根据特征值的大小选择前几个主成分,通常选择方差最大的主成分。

  5. 转换数据:将数据投影到选定的主成分上,完成降维。

例子代码:

import torchdef pca(X, num_components):# 标准化数据mean = torch.mean(X, dim=0)X_centered = X - mean# 计算协方差矩阵cov_matrix = torch.mm(X_centered.t(), X_centered) / (X.shape[0] - 1)# 特征值分解eigenvalues, eigenvectors = torch.linalg.eigh(cov_matrix)# 按特征值降序排列特征向量sorted_indices = torch.argsort(eigenvalues, descending=True)eigenvectors = eigenvectors[:, sorted_indices]# 选择前num_components个主成分principal_components = eigenvectors[:, :num_components]# 转换数据X_reduced = torch.mm(X_centered, principal_components)return X_reduced, principal_components# 示例数据 (假设每行是一个样本,每列是一个特征)
X = torch.tensor([[2.5, 2.4, 3.3],[0.5, 0.7, 1.9],[2.2, 2.9, 3.1],[1.9, 2.2, 2.6]])# 选择降维后的特征数量
num_components = 2# 运行PCA
X_reduced, components = pca(X, num_components)print("降维后的数据:\n", X_reduced)
print("主成分:\n", components)

代码解释:

  • X:输入数据,大小为 (n_samples, n_features),每行表示一个样本,每列表示一个特征。
  • mean:数据的均值,用于数据标准化。
  • cov_matrix:协方差矩阵,捕捉特征之间的关系。
  • eigenvalues, eigenvectors:协方差矩阵的特征值和特征向量。
  • principal_components:降序排列后的特征向量,选择前 num_components 个作为主成分。
  • X_reduced:降维后的数据,投影到选择的主成分上。

主成分分析(PCA,Principal Component Analysis)的主要作用包括以下几个方面:

1. 数据降维

  • 在高维数据集中,PCA 通过找到主要的变化方向,减少数据的维度,同时尽可能保留原始数据的信息。
  • 降维可以减少计算复杂度,提高存储和计算效率,特别是在机器学习和深度学习任务中。
  • 例如,将 100 维的数据降到 2 维或 3 维,使其可以可视化。

2. 去除数据冗余

  • 高维数据通常存在共线性(不同特征之间的相关性较高),PCA 通过去除相关性高的变量,提取最具代表性的特征,减少数据冗余。

3. 特征提取和数据压缩

  • 在某些应用中,PCA 可用于从数据中提取最重要的信息,例如图像处理中用 PCA 进行特征提取和降噪。
  • 通过只保留主要特征向量,数据可以被压缩,同时仍然保持大部分信息。

4. 提高机器学习模型的性能

  • 在高维数据集上,PCA 可减少维度,提高模型的泛化能力,减少过拟合。
  • 特别是在数据特征多但样本数量有限的情况下(如基因数据分析),PCA 能有效减少维度,提高分类或回归模型的准确性。

5. 数据可视化

  • 许多数据集的特征数目较多(例如 100 维或 1000 维),不便于可视化。
  • PCA 可以将数据降到 2D 或 3D,使其能够在散点图或其他图表中直观展示数据结构。

6. 降噪(Denoising)

  • 在信号处理或图像处理中,PCA 可以去除噪声数据,只保留主要成分,从而增强数据质量。例如,在人脸识别中,PCA 可以用来去除光照变化、背景噪声等无关信息。

7. 异常检测(Outlier Detection)

  • PCA 可以用于异常检测,特别是当数据点在降维后的投影空间中与大部分数据点相距较远时,可以被识别为异常点。

应用领域

  • 图像处理(如人脸识别、特征降维)
  • 自然语言处理(如词向量降维)
  • 金融数据分析(如股票市场数据降维、风险分析)
  • 基因数据分析(如基因表达数据降维)
  • 推荐系统(如减少用户-商品交互矩阵的维度,提高推荐系统的计算效率)

相关文章:

pytorch实现主成分分析 (PCA):用于数据降维和特征提取

人工智能例子汇总:AI常见的算法和例子-CSDN博客 使用 PyTorch 实现主成分分析(PCA)可以通过以下步骤进行: 标准化数据:首先,需要对数据进行标准化处理,确保每个特征的均值为 0,方差…...

跨越通信障碍:深入了解ZeroMQ的魅力

在复杂的分布式系统开发中,进程间通信就像一座桥梁,连接着各个独立运行的进程,让它们能够协同工作。然而,传统的通信方式往往伴随着复杂的设置、高昂的性能开销以及有限的灵活性,成为了开发者们前进道路上的 “绊脚石”…...

pytorch实现文本摘要

人工智能例子汇总:AI常见的算法和例子-CSDN博客 import numpy as npfrom modelscope.hub.snapshot_download import snapshot_download from transformers import BertTokenizer, BertModel import torch# 下载模型到本地目录 model_dir snapshot_download(tians…...

小智 AI 聊天机器人

小智 AI 聊天机器人 (XiaoZhi AI Chatbot) 👉参考源项目复现 👉 ESP32SenseVoiceQwen72B打造你的AI聊天伴侣!【bilibili】 👉 手工打造你的 AI 女友,新手入门教程【bilibili】 项目目的 本…...

MySql运维篇---008:日志:错误日志、二进制日志、查询日志、慢查询日志,主从复制:概述 虚拟机更改ip注意事项

#先登录mysql mysql -uroot -p1234#通过此系统变量,查看当前mysql的版本中默认的日志格式是哪个 show variables like %binlog\_format%;1.2.3 查看 由于日志是以二进制方式存储的,不能直接读取,需要通过二进制日志查询工具 mysqlbinlog 来查…...

理解DeepSeek源代码之如何安装triton包

DeepSeek选择了开源路线,在github上可以下载到所有的源代码还有参数(数据集应该没有开源),大语言模型的源代码规模其实非常小,DeepSeek V3的模型函数不过804行,阅读源代码有助于更好理解大语言模型。 1. D…...

C++ Primer 标准库类型string

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...

网站快速收录:如何优化网站视频内容?

本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/57.html 为了优化网站视频内容以实现快速收录,以下是一些关键的策略和步骤: 一、高质量内容创作 原创性: 确保视频内容是原创的,避免抄袭或…...

医学图像分割任务的测试代码

测试集进行测试 import os import torch import numpy as np from torch.utils.data import DataLoader from sklearn.metrics import (precision_score,recall_score,f1_score,roc_curve,auc,confusion_matrix, ) import matplotlib.pyplot as plt from utils import NiiData…...

放假前的最后一天

放假前的最后一天了,公司里基本没啥人了。上午整理了整理周报和节后上班要干的事儿。说是下午不用上班了,但是一直没有正式通知。中午出来,准备吃个饭,想吃公司附近的那个驻京办的饭,之前都是一直要排队,因…...

FFmpeg源码:av_base64_decode函数分析

一、引言 Base64(基底64)是一种基于64个可打印字符来表示二进制数据的表示方法。由于log2 646,所以每6个比特为一个单元,对应某个可打印字符。3个字节相当于24个比特,对应于4个Base64单元,即3个字节可由4个…...

为AI聊天工具添加一个知识系统 之83 详细设计之24 度量空间之1 因果关系和过程:认知金字塔

本文要点 度量空间 在本项目(为AI聊天工具添加一个知识系统 )中 是出于对“用”的考量 来考虑的。这包括: 相对-位置 力用(“相”)。正如 法力,相关-速度 体用 (“体”)。例如 重…...

如何配置Java JDK

步骤1:点击资源,点击Java下载 https://www.oracle.com/ 步骤2:点击java下载、JDK23下载,下载第一行第一个 步骤3:解压到一个空文件夹下,复制lib地址 步骤4:在设置里面搜索“高级系统设置”;点击…...

蓝桥杯例题六

奋斗是一种态度,也是一种生活方式。无论我们面对什么样的困难和挑战,只要心怀梦想,坚持不懈地努力,就一定能够迈向成功的道路。每一次失败都是一次宝贵的经验,每一次挫折都是一次锻炼的机会。在困难面前,我…...

MVS pythonSamples 运行环境配置

1.首先计算机:操作系统Win10_X64 22H2; 2.MVS V4.4.0 3.python3.8.8_64; 安装时勾选添加path; 最后安装依赖包:(所有必须安装) 图像处理: mvtec-halcon23050(可选) p…...

深度学习查漏补缺:2. 三个指标和注意力机制

一、bachsize, num_epochs, dataset 在训练卷积神经网络(CNN)或任何其他深度学习模型时,有几个关键参数和概念需要了解:batch size、num epochs 和 dataset。下面是对它们的详细解释: Batch Size(批量大小&…...

CodeGPT使用本地部署DeepSeek Coder

目前NV和github都托管了DeepSeek,生成Key后可以很方便的用CodeGPT接入。CodeGPT有三种方式使用AI,分别时Agents,Local LLMs(本地部署AI大模型),LLMs Cloud Model(云端大模型,从你自己…...

Python3 + Qt5:实现AJAX异步更新UI

使用 Python 和 Qt5 开发时异步加载数据的方法 在开发使用 Python 和 Qt5 的应用程序时,为了避免在加载数据时界面卡顿,可以采用异步加载的方式。以下是几种实现异步加载的方法: 1. 使用多线程(QThread) 通过将数据…...

JAVA安全—反射机制攻击链类对象成员变量方法构造方法

前言 还是JAVA安全,哎,真的讲不完,太多啦。 今天主要是讲一下JAVA中的反射机制,因为反序列化的利用基本都是要用到这个反射机制,还有一些攻击链条的构造,也会用到,所以就讲一下。 什么是反射…...

【深度学习】softmax回归的简洁实现

softmax回归的简洁实现 我们发现(通过深度学习框架的高级API能够使实现)(softmax)线性(回归变得更加容易)。 同样,通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节继续使用Fashion-MNIST数据集,并保持批量大小为256。 import torch …...

基础篇03-图像的基本运算

本节将简要介绍Halcon中有关图像的两类基本运算,分别是代数运算和逻辑运算。除此之外,还介绍几种特殊的代数运算。 目录 1.引言 2. 基本运算 2.1 加法运算 2.2 减法运算 2.3 乘法运算 2.4 除法运算 2.5 综合实例 3. 逻辑运算 3.1 逻辑与运算 …...

工具的应用——安装copilot

一、介绍Copilot copilot是一个AI辅助编程的助手,作为需要拥抱AI的程序员可以从此尝试进入,至于好与不好,应当是小马过河,各有各的心得。这里不做评述。重点在安装copilot的过程中遇到了一些问题,然后把它总结下&…...

面试问题知识

文章目录 1. Linux 和 CentOS基础指令:VMware 和 CentOS:扩充问题: 2. 前端开发(JS、CSS)JavaScript:CSS:扩充问题: 3. 数据库(MySQL)基础语法:事…...

Alibaba开发规范_编程规约之命名风格

文章目录 命名风格的基本原则1. 命名不能以下划线或美元符号开始或结束2. 严禁使用拼音与英文混合或直接使用中文3. 类名使用 UpperCamelCase 风格,但以下情形例外:DO / BO / DTO / VO / AO / PO / UID 等4. 方法名、参数名、成员变量、局部变量使用 low…...

MATLAB中的IIR滤波器设计

在数字信号处理中,滤波器是消除噪声、提取特征或调整信号频率的核心工具。其中,无限脉冲响应(IIR)滤波器因其低阶数实现陡峭滚降的特性,被广泛应用于音频处理、通信系统和生物医学工程等领域。借助MATLAB强大的工具箱&…...

vector容器(详解)

本文最后是模拟实现全部讲解,文章穿插有彩色字体,是我总结的技巧和关键 1.vector的介绍及使用 1.1 vector的介绍 https://cplusplus.com/reference/vector/vector/(vector的介绍) 了解 1. vector是表示可变大小数组的序列容器。…...

nginx目录结构和配置文件

nginx目录结构 [rootlocalhost ~]# tree /usr/local/nginx /usr/local/nginx ├── client_body_temp # POST 大文件暂存目录 ├── conf # Nginx所有配置文件的目录 │ ├── fastcgi.conf # fastcgi相关参…...

deepseek本地部署会遇到哪些坑

在本地部署DeepSeek(或其他类似AI模型)时,可能会遇到以下常见问题及解决方案: 1. 硬件资源不足 问题表现: GPU不兼容(如型号过旧)、显存不足(OOM错误)或CPU模式性能极低。解决方案: 确认GPU支持CUDA,检查显存需求(如至少16GB显存)。使用nvidia-smi监控显存,通过降…...

使用 PyTorch 实现逻辑回归并评估模型性能

1. 逻辑回归简介 逻辑回归是一种用于解决二分类问题的算法。它通过一个逻辑函数(Sigmoid 函数)将线性回归的输出映射到 [0, 1] 区间内,从而将问题转化为概率预测问题。如果预测概率大于 0.5,则将样本分类为正类;否则分…...

python学opencv|读取图像(五十二)使用cv.matchTemplate()函数实现最佳图像匹配

【1】引言 前序学习了图像的常规读取和基本按位操作技巧,相关文章包括且不限于: python学opencv|读取图像-CSDN博客 python学opencv|读取图像(四十九)原理探究:使用cv2.bitwise()系列函数实现图像按位运算-CSDN博客…...