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 可以用于异常检测,特别是当数据点在降维后的投影空间中与大部分数据点相距较远时,可以被识别为异常点。

应用领域

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

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

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

相关文章

「全网最细 + 实战源码案例」设计模式——桥接模式

核心思想 桥接模式(Bridge Pattern)是一种结构型设计模式,将抽象部分与其实现部分分离,使它们可以独立变化。降低代码耦合度,避免类爆炸,提高代码的可扩展性。 结构 1. Implementation(实现类…

动态规划DP 背包问题 完全背包问题(题目分析+C++完整代码)

概览检索 动态规划DP 概览(点击链接跳转) 动态规划DP 背包问题 概览(点击链接跳转) 完全背包问题 原题链接 AcWiing 3. 完全背包问题 题目描述 有 N种物品和一个容量是 V的背包,每种物品都有无限件可用。 第 i种物…

开源智慧园区管理系统对比五款主流产品探索智能运营新模式

内容概要 在这个数字化迅速发展的时代,园区管理也迎来了全新的机遇和挑战。众所周知,开源智慧园区管理系统作为一种创新解决方案,正逐步打破传统管理的局限性。它的开放性不仅使得系统可以根据具体需求进行灵活调整,也为用户提供…

Unity实现按键设置功能代码

一、前言 最近在学习unity2D,想做一个横版过关游戏,需要按键设置功能,让用户可以自定义方向键与攻击键等。 自己写了一个,总结如下。 二、界面效果图 这个是一个csv文件,准备第一列是中文按键说明,第二列…

稀疏混合专家架构语言模型(MoE)

注:本文为 “稀疏混合专家架构语言模型(MoE)” 相关文章合辑。 手把手教你,从零开始实现一个稀疏混合专家架构语言模型(MoE) 机器之心 2024年02月11日 12:21 河南 选自huggingface 机器之心编译 机器之心…

C++哈希(链地址法)(二)详解

文章目录 1.开放地址法1.1key不能取模的问题1.1.1将字符串转为整型1.1.2将日期类转为整型 2.哈希函数2.1乘法散列法(了解)2.2全域散列法(了解) 3.处理哈希冲突3.1线性探测(挨着找)3.2二次探测(跳…

29.Word:公司本财年的年度报告【13】

目录 NO1.2.3.4 NO5.6.7​ NO8.9.10​ NO1.2.3.4 另存为F12:考生文件夹:Word.docx选中绿色标记的标题文本→样式对话框→单击右键→点击样式对话框→单击右键→修改→所有脚本→颜色/字体/名称→边框:0.5磅、黑色、单线条:点…

深入理解Java引用传递

先看一段代码: public static void add(String a) {a "new";System.out.println("add: " a); // 输出内容:add: new}public static void main(String[] args) {String a null;add(a);System.out.println("main: " a);…

Python从零构建macOS状态栏应用(仿ollama)并集成AI同款流式聊天 API 服务(含打包为独立应用)

在本教程中,我们将一步步构建一个 macOS 状态栏应用程序,并集成一个 Flask 服务器,提供流式响应的 API 服务。 如果你手中正好持有一台 MacBook Pro,又怀揣着搭建 AI 聊天服务的想法,却不知从何处迈出第一步,那么这篇文章绝对是你的及时雨。 最终,我们将实现以下功能: …

Qt之数据库操作三

主要介绍qt框架中对数据库的增加&#xff0c;删除和修改功能。 软件界面如下 程序结构 tdialogdata.h中代码 #ifndef TDIALOGDATA_H #define TDIALOGDATA_H#include <QDialog> #include<QSqlRecord> namespace Ui { class TDialogData; }class TDialogData : pub…

neo4j入门

文章目录 neo4j版本说明部署安装Mac部署docker部署 neo4j web工具使用数据结构图数据库VS关系数据库 neo4j neo4j官网Neo4j是用ava实现的开源NoSQL图数据库。Neo4作为图数据库中的代表产品&#xff0c;已经在众多的行业项目中进行了应用&#xff0c;如&#xff1a;网络管理&am…

JVM-运行时数据区

JVM的组成 运行时数据区-总览 Java虚拟机在运行Java程序过程中管理的内存区域&#xff0c;称之为运行时数据区。 《Java虚拟机规范》中规定了每一部分的作用 运行时数据区-应用场景 Java的内存分成哪几部分&#xff1f; Java内存中哪些部分会内存溢出&#xff1f; JDK7 和J…

Java篇之继承

目录 一. 继承 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 访问父类成员 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. super和this关键字 7. 子类构造方法 8. 代码块的执行顺序 9. protected访问修饰限定符 10. 继承方式…

leetcode——验证二叉搜索树(java)

给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含小于当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1&#xff1a; 输入…

家居EDI:Hom Furniture EDI需求分析

HOM Furniture 是一家成立于1977年的美国家具零售商&#xff0c;总部位于明尼苏达州。公司致力于提供高品质、时尚的家具和家居用品&#xff0c;满足各种家庭和办公需求。HOM Furniture 以广泛的产品线和优质的客户服务在市场上赢得了良好的口碑。公司经营的产品包括卧室、客厅…

Spring Boot + Facade Pattern : 通过统一接口简化多模块业务

文章目录 Pre概述在编程中&#xff0c;外观模式是如何工作的&#xff1f;外观设计模式 UML 类图外观类和子系统的关系优点案例外观模式在复杂业务中的应用实战运用1. 项目搭建与基础配置2. 构建子系统组件航班服务酒店服务旅游套餐服务 3. 创建外观类4. 在 Controller 中使用外…

八、Spring Boot 日志详解

目录 一、日志的用途 二、日志使用 2.1 打印日志 2.1.1 在程序中获取日志对象 2.1.2 使用日志对象打印日志 2.2、日志框架介绍 2.2.1 门面模式(外观模式) 2.2.2 门面模式的实现 2.2.3 SLF4J 框架介绍 2.3 日志格式的说明 2.4 日志级别 2.4.1 日志级别的分类 2.4.2…

创建前端项目的方法

目录 一、创建前端项目的方法 1.前提&#xff1a;安装Vue CLI 2.方式一&#xff1a;vue create项目名称 3.方式二&#xff1a;vue ui 二、Vue项目结构 三、修改Vue项目端口号的方法 一、创建前端项目的方法 1.前提&#xff1a;安装Vue CLI npm i vue/cli -g 2.方式一&…

(leetcode 213 打家劫舍ii)

代码随想录&#xff1a; 将一个线性数组换成两个线性数组&#xff08;去掉头&#xff0c;去掉尾&#xff09; 分别求两个线性数组的最大值 最后求这两个数组的最大值 代码随想录视频 #include<iostream> #include<vector> #include<algorithm> //nums:2,…

【Python】第七弹---Python基础进阶:深入字典操作与文件处理技巧

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、字典 1.1、字典是什么 1.2、创建字典 1.3、查找 key 1.4、新增/修改元素 1.5、删除元素 1.6、遍历…