PCA主成分分析 | 机器学习

news2025/9/17 7:58:39

1、概述(Principal componet analysis,PCA)

是一种无监督学习方法,是为了降低特征的维度。将原始高维数据转化为低维度的数据,高维数据指的是数据的特征维度较多,找到一个坐标系,使得这些数据特征映射到一个二维或三维的坐标系中,尽可能地保留原始数据的主要信息(方差信息),信息损失是最小的。
举个例子: 在实际工作中,可能会遇到特征维数过多,且部分特征具有一定相关性。如:在一个学生成绩数据集中,一个特征是学习时长,另一个特征是成绩,一般来讲,学习时间越长,越容易取得好成绩,即时长与成绩呈正相关。因此没必要用两个维度(时长和成绩)表达这一特征。我们可以找出另一个维度,表现这两个特征,且不会带来过多信息损失。
信息保留最多(从图像上看就是越分散,方差越大。如果点都比较重合,失去了意义)
在这里插入图片描述
在这里插入图片描述
怎么样最好:
找到数据分布最分散的方向(方差最大),作为主成分(坐标轴)
利用正交变换线性相关变量表示的观测数据转换为几个由线性无关变量表示的数据,线性无关的变量成为主成分。主成分的个数通常小于原始变量的个数,属于降维方法。
根据分解协方差矩阵的策略,分为两种PCA方法,第一种是基于特征值分解协方差矩阵实现PCA算法,第二种是**基于奇异值分解法(SVD)**分解协方差矩阵实现PCA算法。
PC:找到的每个新特征向量,降低特征个数,降维找出数据中最主要的,用最主要的代替原始数据。非监督的降维方法
信息衡量指标: 样本方差,方差越大,特征所带信息量越多。

2、算法流程

输入:n维样本集D=(x(1),x(2),…,x(m)),要降维到的维数n’.
输出:降维后的样本集D′
1 .数据标准化
对所有样本进行中心化(把坐标原点(0,0)放在数据中心,数据中心通过计算均值,样本-均值);第二是找坐标系(找到方差最大的方向);
在这里插入图片描述

2 计算样本协方差矩阵XXT
将标准化后的数据组成一个n×d的矩阵X,其中n表示样本数量,d表示特征数量。计算协方差矩阵C=XTX/n-1。因为样本协方差矩阵XXT包含了数据的方差和协方差信息。
在这里插入图片描述
3.计算特征值和特征向量:
对协方差矩阵进行特征值分解,得到特征值λ1,λ2,…,λd和对应的特征向量v1,v2,…,vd。特征向量是单位向量,满足Cvi=λivi。对协方差矩阵进行特征值分解,将特征值从大到小排列。
那么为什么计算呢,要通过计算协方差矩阵的特征值和特征向量,我们可以找到原始数据中最具有代表性的主成分(也就是方差最大的方向),从而实现降维。因为在PCA中,特征值是协方差矩阵的特殊值,代表着数据在某个方向上的方差大小。具体来说,对于一个d维数据集,其协方差矩阵C的每个特征值λi表示数据在第i个主成分方向上的方差大小。λi越大,说明数据在第i个主成分方向上的方差越大,也就是说,这个方向上的信息量越多,越能够代表原始数据的特征。因此,在PCA中,我们通常选择前k个最大的特征值对应的特征向量作为新的坐标系,并将原始数据投影到这个新的坐标系上,从而实现降维。
在PCA中,特征值是协方差矩阵的特殊值,代表着数据在某个方向上的方差大小。具体来说,对于一个d维数据集,其协方差矩阵C的每个特征值λi表示数据在第i个主成分方向上的方差大小。λi越大,说明数据在第i个主成分方向上的方差越大,也就是说,这个方向上的信息量越多,越能够代表原始数据的特征。因此,在PCA中,我们通常选择前k个最大的特征值对应的特征向量作为新的坐标系,并将原始数据投影到这个新的坐标系上,从而实现降维。
接下来用数据例子说明下
假设我们有一个2维数据集,包含5个样本点:

X = [[2, 3], [3, 4], [4, 5], [5, 6], [6, 7]]

我们希望对这个数据集进行降维,将其从2维降到1维。首先,我们需要计算协方差矩阵C:

C = np.cov(X.T)

计算得到的协方差矩阵C为:

array([[ 0.7,  0.7],
       [ 0.7,  0.7]])

接下来,我们需要计算C的特征值和特征向量:

eig_vals, eig_vecs = np.linalg.eig(C)

计算得到的特征值和特征向量为:

eig_vals = [1.4, 0]
eig_vecs = [[ 0.70710678, -0.70710678],
            [ 0.70710678,  0.70710678]]

由于我们希望将数据从2维降到1维,因此我们只需要选择最大的特征值对应的特征向量作为新的坐标系。在这个例子中,最大的特征值为1.4,对应的特征向量为[0.70710678, -0.70710678]。因此,我们可以将原始数据投影到这个新的坐标系上,得到降维后的数据:

new_X = np.dot(X, eig_vecs[:, 0])

计算得到的降维后的数据为:

array([ 0.        ,  0.70710678,  1.41421356,  2.12132034,  2.82842712])

可以看出,原始的2维数据集被成功地降到了1维,并且保留了原始数据的大部分信息。
4.选择主成分:
将特征值从大到小排序,选择前k个特征值对应的特征向量作为主成分,其中k是降维后的维度。
5.映射数据:
将原始数据X映射到主成分上,得到新的降维后的数据Y=XV,其中V=[v1,v2,…,vk]是由前k个特征向量组成的矩阵。

矩阵分解:
找出n个新特征向量,让data被压缩到少数特征上并且总信息量不损失太多的技术。

3、降维目的

只保留一个轴的时候,(二维降低到1维度,相当于两个线性相关的变量,一个是可以用另一个表征的,用一个坐标轴来表示,另一个坐标轴就是0,将二维信息降低到1维存储),信息保留最多。
在这里插入图片描述

将高纬度数据保留下一些重要特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的
去噪:使主要的特征避免被干扰,使其与其他维度相关性尽可能减弱,进而恢复应有的能量。
去冗余 所有样方差接近于0,不重要

由图可知,可以用数据点在 Z 轴上的投影表达时长与成绩两个维度的数据。一个平面上的数据就被映射到了一条线当中,即二维特征向一维特征的转换。

4、为什么要用协方差矩阵来做呢

协方差矩阵能同时表现不同维度间的相关性及各个维度上的方差,矩阵主对角线上原色是各个特征的方差,其他元素是两两特征见的协方差(即相关性)去噪-让协方差据阵容非对角线元素基本为0,矩阵对角化。去冗余-对角化后的协方差矩阵,对角线上较小的新方差就是那些该去掉的维度,所以只取那些含有较大能量(特征值),其余舍掉。

[[ 1.11111111, 0.87904968, 1.06804138, 0.4138031 ],
[ 0.87904968, 1.11111111, 1.28488947, 0.47746479],
[ 1.06804138, 1.28488947, 1.55555556, 0.49690399],
[ 0.4138031 , 0.47746479, 0.49690399, 1.11111111]],
那么在协方差矩阵中相邻两个元素代表什么含义呢
在协方差矩阵中,第i行第j列的元素表示第i个特征和第j个特征之间的协方差。因此,这个矩阵中相邻两个元素代表了两个不同特征之间的协方差。例如,第1行第2列和第2行第1列的元素都是0.87904968,表示第1个特征和第2个特征之间的协方差为0.87904968。由于协方差矩阵是对称矩阵,因此这两个元素的值是相等的。同理,第1行第3列和第3行第1列的元素、第2行第3列和第3行第2列的元素、以及第2行第4列和第4行第2列的元素、第3行第4列和第4行第3列的元素,也都分别代表了两个不同特征之间的协方差。

PCA优缺点
优点
1 仅以方差衡量信息量,不受数据集以外的因素影响
2各个主成分之间正交,可消除原始数据成分间相互影响的因素
3 计算简单
缺点
1 解释性差
2 方差小非主成分也可能含有对样本差异的重要信息,降维可能对后续数据有影响

PCA适用场景
非监督式,适用于不带有标签的数据集,对于有标签的可用LDA。
数据量多和维度多,处理

5、代码

原始数据矩阵的行数代表样本数量,列数代表每个样本的特征数量。在这个例子中,原始数据矩阵的维度为5x3,即有5个样本,每个样本有3个特征。
以一个具体的例子来解释,假设我们要对一组人群进行身高、体重和年龄的测量,我们可以将每个人看作一个样本,将他们的身高、体重和年龄看作样本的3个特征。如果我们测量了100个人,那么我们就可以得到一个100x3的数据矩阵,其中有100个样本,每个样本有3个特征。同样地,如果我们测量了1000个人,那么我们就可以得到一个1000x3的数据矩阵,其中有1000个样本,每个样本有3个特征。
在这里插入图片描述
在这里插入图片描述

参考链接:

https://blog.csdn.net/babywong/article/details/50085239
https://betterbench.blog.csdn.net/article/details/127065371
https://zhuanlan.zhihu.com/p/76057643
https://www.xiaohongshu.com/discovery/item/62937d4b0000000021035695

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

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

相关文章

Python爬虫教程:如何爬取教育漏洞报告平台中的漏洞报告?

部分数据来源:ChatGPT 引用 在本教程中,我们将使用 Python 语言和 requests、lxml 库来分析和爬取教育漏洞报告平台的数据。 1. 爬取网站数据 首先,我们需要从教育漏洞报告平台上获取需要的数据。我们可以通过 requests 库向特定网址发送请求,获取响应内容。 import req…

路径规划算法:基于布谷鸟优化的路径规划算法- 附代码

路径规划算法:基于布谷鸟优化的路径规划算法- 附代码 文章目录 路径规划算法:基于布谷鸟优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法…

数字信号的基本运算——线性卷积(相关)和圆周卷积(相关)

简介 在介绍卷积和相关运算之前,需要先认识一些更加基本的运算 翻折 设某一序列x(n),则x(-n)是以n0的纵轴为对称轴,将x(n)加以翻折得到的 移位 设某一序列x(n),m为正整数,x(n-m)表示x(n)逐项依次延时&#xff08…

《数据库应用系统实践》------ 超市销售管理系统

系列文章 《数据库应用系统实践》------ 超市销售管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构(需包含功能结构框图和模块说明)3.系统功能简介 二、概念模型设计1.基本要素(符号介绍说明&…

数据大航海时代,奇安信如何构筑数据安全的“天盾”?

你知道你的数据正在“被动”泄露吗? 随着ChatGPT技术的快速落地,数据安全面临的挑战越来越多。数据安全供应商Cyberhaven近期发布的一份研究显示,在2023年初的一周内,每十万名员工中机密业务数据被输入ChatGPT199次。用户可能没有…

C Primer Plus第十章编程练习答案

学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出! 1.修改程序清单10.7的rain.c程序&…

如何在华为OD机试中获得满分?Java实现【记票统计】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

VTK读入DICOM数据

date: 2019-04-02 16:26:00 VTK读入DICOM数据 DICOM示例: 图像来自www.dicomlibrary和medDream 准备图像 公开数据库 DICOM Library:链接,少量CT(Computed Tomography,计算机断层扫描),MR&…

网络知识点之-HTTP协议

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内…

基于Open3D的点云处理4-数据结构Kdtree和Octree

Kdtree Kdtree是一种划分k维数据空间的数据结构,本质也是一颗二叉树,只不过每个节点的数据都是k维,当k1时,就是普通二叉树。 建立Kdtree实际上是一个不断划分的过程,首先选择最sparse的维度(一般通过计算…

【LeetCode热题100】打开第6天:正则表达式匹配

文章目录 正则表达式匹配⛅前言🔒题目🔑题解 正则表达式匹配 ⛅前言 大家好,我是知识汲取者,欢迎来到我的LeetCode热题100刷题专栏! 精选 100 道力扣(LeetCode)上最热门的题目,适合…

Spring Authorization Server 系列(三)code换取token

code换取token 概述客户端认证方式换取结果 概述 在获取到code后,就可以使用code换取token了,但在换取token这一步还会对客户端进行一些校验,而这也支持不同的方式,一起来看看。 客户端认证方式 JwtClientAssertionAuthenticati…

2023 英国剑桥大学博士后含金量

作为英国顶尖的大学之一,剑桥大学自然也是博士后研究的理想选择。然而,对于那些希望在这所学府找到博士后职位的人来说,他们可能会问:剑桥大学的博士后含金量如何?首先,我们需要了解什么是博士后研究。简单…

阿里版ChatGPT已接入钉钉,张勇:未来所有业务都有大模型加持

ChatGPT狂飙160天,世界已经不是之前的样子。 我新建了人工智能中文站https://ai.weoknow.com 每天给大家更新可用的国内可用chatGPT资源 阿里:大模型也是基础设施。 4 月 7 日下午,阿里云没有一点预告的突然宣布,自研类 ChatGPT …

《数据库应用系统实践》------ 小区停车管理系统

系列文章 《数据库应用系统实践》------ 小区停车管理系统 文章目录 系列文章一、需求分析1、系统背景2、 系统功能结构(需包含功能结构框图和模块说明)3.系统功能简介 二、概念模型设计1.基本要素(符号介绍说明&…

MySQL_7 常见约束及演示

目录 一、约束概述 二、 PRIMARY KEY(主键) 1.作用 : 2.格式 : 3.自增长 : 4.演示 : 演示Ⅰ—— 主键约束的特点 演示Ⅱ—— 复合主键 演示Ⅲ—— 自增长 三、UNIQUE(唯一) 1.作用 : 2.格式 : 3.演示 : …

人多岗位少,都快把我卷死了,这是今年软件测试就业的真实写照,也是所有岗位的真实写照。

前两天跟一个HR朋友聊天,她表示刚在boss上发布了一个普通测试岗位,不到一小时竟然收到了几百份简历。而且简历质量极高,这是往年不敢想象的。岗位少,竞争激烈,这是今年软件测试就业的真实写照,也是所有岗位…

网狐大联盟数据库迁移到Linux系统

1.系统要求: ubuntu 20.04 Ubuntu 20.04.6 LTS (Focal Fossa) 安装系统 2.linux上安装mssql server Linux 上的 SQL Server 概述 - SQL Server | Microsoft Learn 安装指令: # 安装mssql-serverwget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo tee…

路径规划算法:基于入侵杂草优化的路径规划算法- 附代码

路径规划算法:基于入侵杂草优化的路径规划算法- 附代码 文章目录 路径规划算法:基于入侵杂草优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…

Java入门教程||Java 数据结构||Java 集合框架

Java 数据结构 Java 数据结构 Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration)位集合(BitSet)向量(Vector)栈(Stack&#xff0…