降维算法:主成分分析

 主成分分析

一种常用的数据分析技术,主要用于数据降维,在众多领域如统计学、机器学习、信号处理等都有广泛应用。

主成分分析是一种通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量(即主成分)的方法。这些主成分按照方差从大到小排列,方差越大,包含的原始数据信息越多。通常会选取前几个方差较大的主成分,以达到在尽量保留原始数据信息的前提下降低数据维度的目的。

它通过将多个指标转换为少数几个主成分,来实现少数几个变量可以反映出原始的大部分数据的能力(这里的多个指标一般都具有不低的相关性

这里的主成分是原本的变量的线性组合

比如一个衣服的尺码的设计的时候会有衣长,袖长腰围等等一系列的变量,但是我们经过主成分分析,就可以将其转化为身高,体重两个变量就可以在很大程度上去帮助我们去反应衣服的大部分信息

大概的步骤和对应代码:

1,得到样本的R矩阵

R = corrcoef(x);

2,计算R矩阵的相关系数矩阵的特征值和特征向量

[V,D] = eig(R); % V 特征向量矩阵 D 特征值构成的对角矩阵(从小到大)

3,根据特征值计算器的贡献率,然后计算累计贡献率,当累计贡献率达到一定的值的时候我们就得到了一个能够记录一定比列的一些主成分

这里要先把特征值取出来并且倒置:
lambda = diag(D); % diag函数用于得到一个矩阵的主对角线元素值(返回的是列向量)

lambda = lambda(end:-1:1); % 因为lambda向量是从小大到排序的,我们将其调个头

然后开始计算贡献度

contribution_rate = lambda / sum(lambda); % 计算贡献率

cum_contribution_rate = cumsum(lambda)/ sum(lambda); % 计算累计贡献率 cumsum是求累加值的函数

V=rot90(V)';% rot90函数可以使一个矩阵逆时针旋转90度,然后再转置,就可以实现将矩阵的列颠倒的效果

根据主成分的个数求出主成分的线性表达式

%% 计算我们所需要的主成分的值

m =input('请输入需要保存的主成分的个数: ');

F = zeros(n,m); %初始化保存主成分的矩阵(每一列是一个主成分)

for i = 1:m

ai = V(:,i)'; % 将第i个特征向量取出,并转置为行向量

Ai = repmat(ai,n,1); % 将这个行向量重复n次,构成一个n*p的矩阵

F(:, i) = sum(Ai .* X, 2); % 注意,对标准化的数据求了权重后要计算每一行的和

end

4,要根据主成分的一些线性组合做出一个合适的解释

优缺点:

优点

数据降维效果显著:能有效将高维数据转换为低维表示,同时保留大部分关键信息。在处理高维数据集(如具有大量特征的基因数据、高分辨率图像数据)时,可大幅减少数据维度,降低后续分析和计算的复杂度。例如,基因数据可能包含成千上万个基因表达量作为特征,PCA 可将其压缩到少数几个主成分,在不损失太多信息的前提下,使数据更易于处理和分析。

消除特征相关性:原始数据的特征之间往往存在相关性,这可能对某些分析和模型造成干扰。PCA 通过将数据转换到新的正交坐标系,使主成分之间相互独立,从而消除特征间的冗余信息。例如在分析经济指标时,一些经济变量之间可能存在较强的相关性,PCA 可将这些相关变量转化为相互独立的主成分,有助于更清晰地理解数据结构和进行后续建模。

易于计算和实现:PCA 的计算过程相对明确,基于矩阵运算,主要步骤包括计算协方差矩阵、特征值分解等,在许多编程语言(如 Python 的 NumPy、SciPy 库)中都有现成的函数实现,便于研究者和工程师应用。

数据可视化助力:对于高维数据,直接可视化非常困难。PCA 将高维数据降维到二维或三维后,可在平面或三维空间中直观展示数据点分布,帮助发现数据中的潜在模式、聚类结构或异常点。例如在客户细分研究中,将多个客户属性通过 PCA 降维后在二维图上展示,能直观地看到不同客户群体的分布情况。

缺点

主成分缺乏可解释性:虽然主成分能够有效保留数据的大部分方差,但它们通常是原始特征的复杂线性组合,难以直接赋予实际的物理或业务含义。比如在分析用户行为数据时,得到的主成分可能无法直接对应到具体的用户行为指标,不利于领域专家基于业务知识进行解读和应用。

可能丢失重要信息:尽管 PCA 旨在保留最大方差信息,但在降维过程中不可避免地会舍弃部分信息。当舍弃的信息对于特定的分析任务(如某些对细节敏感的分类问题)至关重要时,可能会影响分析结果的准确性。例如在医学图像诊断中,如果舍弃的信息恰好与某些疾病的细微特征相关,可能导致诊断失误。

对数据分布有要求:PCA 假设数据具有高斯分布,在这种分布下能较好地发挥作用。然而,实际数据往往并不完全符合高斯分布,对于非高斯分布的数据,PCA 可能无法充分捕捉数据的内在结构,降维效果可能不理想。

依赖数据整体特征:PCA 基于数据的整体协方差结构来确定主成分,对于数据中的局部结构或离群点较为敏感。离群点可能会对协方差矩阵的计算产生较大影响,进而改变主成分的方向和解释,导致降维结果不能准确反映数据的真实特征。

应用场景

数据可视化:高维数据难以直接可视化,通过 PCA 将数据降到二维或三维,可在平面或三维空间中绘制数据点,帮助观察数据的分布模式和潜在结构。例如在基因表达数据分析中,基因数量可能成千上万,利用 PCA 降维后,可在二维图上展示不同样本间的关系。

机器学习预处理:在训练机器学习模型时,高维数据可能导致计算量增大、过拟合等问题。PCA 用于降低数据维度,去除噪声和冗余信息,同时保留数据的主要特征,提高模型训练效率和泛化能力。如在图像识别中,将高分辨率图像的像素特征通过 PCA 降维后输入分类模型。

信号处理:在处理如音频、视频信号时,信号可能包含大量冗余信息。PCA 可去除冗余,提取主要成分,实现信号的压缩和去噪。例如在语音识别中,对语音信号进行 PCA 处理,可减少数据量,提高识别效率。

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

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

相关文章

深入解析 C++17 中的 u8 字符字面量:提升 Unicode 处理能力

在现代软件开发中,处理多语言文本是一个常见需求,特别是在全球化的应用场景下。C17 标准引入的 u8 字符字面量为开发者提供了一个强大的工具,以更有效地处理和表示 UTF-8 编码的字符串。本文将详细探讨 u8 字符字面量的技术细节、实际应用&am…

ElasticSearch索引别名的应用

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview Elasticsearch 索引别名是一种极为灵活且强大的功能,它允许用户为一个或多个索引创建逻辑上…

Java高频面试之SE-15

hello啊,各位观众姥爷们!!!本牛马baby今天又来了!哈哈哈哈哈嗝🐶 String 怎么转成 Integer 的?它的原理是? 在 Java 中,要将 String 转换为 Integer 类型,可…

2024又是一年的CSDN之旅-总结过去展望未来

一、前言 一年就这样在忙忙碌碌的工作和生活中一晃而过,总结今年在CSDN上发表的博客,也有上百篇之多,首先感谢CSDN这个平台,能让我有一个地方记录工作中的点点滴滴,也在上面学到了不少知识,解决了工作中遇到…

c86机器安装nvaid显卡驱动报错:ERROR:Unable to load the kernel module ‘nvidia.ko‘.

背景: 最近小伙伴要去北京甲方现场搭建我们的AI编码服务,需要使用GPU机器跑大模型,根据现场提供的信息是2台C86的机器,显卡够够的,但是现场是内网环境,因此,需要先准备好需要的安装包&#xff…

LeetCode 热题 100_实现 Trie (前缀树)(54_208_中等_C++)(图;前缀树;字典树)

[TOC](LeetCode 热题 100_实现 Trie (前缀树)(54_208)) 题目描述: Trie(发音类似 “try”)或者说 前缀树 是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景&…

【Maui】视图界面与数据模型绑定

文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和桌面应用。 使用 .NET MAUI&…

从 Spark 到 StarRocks:实现58同城湖仓一体架构的高效转型

作者:王世发,吴艳兴等,58同城数据架构部 导读: 本文介绍了58同城在其数据探查平台中引入StarRocks的实践,旨在提升实时查询性能。在面对传统Spark和Hive架构的性能瓶颈时,58同城选择StarRocks作为加速引擎&…

探秘 Linux 进程状态:解锁系统运行的密码

🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 🚩用通俗易懂且不失专业性的文字,讲解计算机领域那些看似枯燥的知识点🚩 在 Linux 系统…

深度学习-89-大语言模型LLM之AI应用开发的基本概念

文章目录 1 什么是智能体(Agent)2 什么是大语言模型(LLM)2.1 LLM的训练及使用2.2 Transformer架构2.3 基于LLM的Agent框架3 什么是检索增强生成(RAG)3.1 RAG是什么3.2 生成式AI应用开发3.3 RAG的整体流程3.4 RAG技术3.4.1 简单RAG(Simple RAG)3.4.2 校正RAG(Corrective RAG)3.4…

鸿蒙产业学院正式揭牌!软通动力与深信息签署校企合作框架协议

12月27日,深圳信息职业技术学院(简称“深信息”)与软通动力信息技术(集团)股份有限公司(简称“软通动力”)正式签署校企合作框架协议,并共同揭牌成立鸿蒙产业学院。深信息校长王晖&a…

python轻量级框架-flask

简述 Flask 是 Python 生态圈中一个基于 Python 的Web 框架。其轻量、模块化和易于扩展的特点导致其被广泛使用,适合快速开发 Web 应用以及构建小型到中型项目。它提供了开发 Web 应用最基础的工具和组件。之所以称为微框架,是因为它与一些大型 Web 框架…

2024年河北省职业院校技能大赛 “信息技术应用创新赛项”(高职组)样题解法

​有问题请留言或主页私信咨询 2024年河北省职业院校技能大赛 “信息技术应用创新赛项”(高职组)样题 一、初始化环境 1.账号及默认密码如表1所示。 表1 账号及密码规划表 账 号密 码root(服务端)kylin2024!desk&#xff08…

gozero获取数据库内容报错解决方案与实践

这个错误通常出现在 Go 语言的数据库查询中,表示你尝试将一个不支持的数据类型([]uint8,即字节切片)存储到一个 Go 类型(*time.Time)中。具体来说,create_time 列的类型可能是 DATETIME 或 TIME…

【学习笔记15】如何在非root服务器中,安装属于自己的redis

一、下载安装包 官网下载黑马程序员给的安装包(redis-6.2.6) 二、将安装包上传至服务器 我将安装包上传在我的文件夹/home/XXX,指定路径中/src/local/redis/,绝对路径为/home/XXX/src/local/redis/解压安装包 XXXomega:~$ cd …

PotPlayer 配置安装

文章目录 一、下载1、官网链接2、微软商店 Microsoft Store 二、安装1、双击安装包2、选择字体3、安装向导下一步4、接收许可协议5、选择组件及关联6、选择安装位置7、硬解选项 三、设置1、关闭自动更新2、左键单双击设置3、视频下自动隐藏3.1、效果对比 4、播放信息显示设置4.…

【PCIe 总线及设备入门学习专栏 2 -- PCIe 的 LTSSM 和 Enumeration】

文章目录 OverviewLTSSM StatesDetect StatesDETECT_QUIETDETECT_ACTDETECT_WAITPolling StatesPOLL_ACTIVEPOLL_CONFIGPOLL_COMPLIANCEConfiguration StatesCONFIG_LINKWD_STARTCONFIG_LINKWD_ACCEPTCONFIG_LANENUM_WAITCONFIG_LANENUM_ACCEPTCONFIG_COMPLETECONFIG_IDLERecov…

STM32 FreeROTS Tickless低功耗模式

低功耗模式简介 FreeRTOS 的 Tickless 模式是一种特殊的运行模式,用于最小化系统的时钟中断频率,以降低功耗。在 Tickless 模式下,系统只在有需要时才会启动时钟中断,而在无任务要运行时则完全进入休眠状态,从而降低功…

【机器学习实战中阶】书籍推荐系统

图书推荐系统机器学习项目 通过这个机器学习项目,我们将构建一个图书推荐系统。对于这个项目,我们将使用 K 最近邻(K-Nearest Neighbor, KNN)算法。 让我们开始构建这个系统。 数据集说明 关于数据集 背景 在过去的几十年中…

嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础

嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础 目录 1.NAND FLASH 和NOR FLASH异同 ? 2.CPU,MPU,MCU,SOC,SOPC联系与差别? 3.什么是交叉编译? 4.为什么要交叉编译? 5.描述一下嵌入式基于ROM的运行方式和基于RAM的运行方式有什么区别? 1…