机器学习知识总结 —— 21. 什么是主成分分析

news/2024/4/27 3:57:16/文章来源:https://blog.csdn.net/poisonchry/article/details/128686214

文章目录

  • 什么是PCA(Principal Component Analysis)
  • 协方差矩阵
    • 什么是协方差
    • 协方差矩阵
  • 特征值与特征向量
  • PCA降维

什么是PCA(Principal Component Analysis)

在机器学习中,PCA(Principal Component Analysis,主成分分析)是一种常用的降维方法。它可以将高维数据降至低维,同时保留数据的最重要的特征,从而方便后续的分析和处理。

PCA的基本思想是通过线性变换将原始数据投影到一个新的坐标系中,使得投影后的数据具有最大的方差。这样可以减少特征之间的冗余信息,从而达到降维的目的。

比方说有这样一组高维数据,它输出的图像1是这样的

在这里插入图片描述

对于我们来说,对高纬度数据进行分析,需要考虑的变量信息太多,所以我们就会考虑舍弃掉其中不太重要的信息,而保留能够反映数据特征信息,因此对于上面这个例子,我们可以选择一个合适的平面对原始数据进行投影,于是可以得到:

在这里插入图片描述
数据基本信息没有发生改变,但影响我们分析数据特征的高纬信息消失了,这样的一个过程就是PCA的实现过程。那么,具体来说,它的主要步骤包括:

  1. 对原始数据进行去均值化(即将数据中心化);
  2. 计算协方差矩阵(或者是相关系数矩阵);
  3. 对协方差矩阵进行特征值分解,得到特征向量和特征值;
  4. 将特征向量按照对应的特征值大小排序,选择前k个特征向量作为新的坐标轴;
  5. 将原始数据投影到新的坐标轴上,得到降维后的数据。

在PCA中,特征向量表示数据在新的坐标系中的方向,特征值表示数据在特征向量方向上的重要程度。因此,选择前k个特征向量可以保留数据最重要的特征,并且可以通过特征值来确定保留多少特征。

协方差矩阵

什么是协方差

协方差(Covariance)是描述两个变量之间关系的统计量,它反映了两个变量的联合变化程度。具体来说,协方差是指两个随机变量的离差积的期望值,其计算公式为:

Cov(X,Y)=E[(X−E(X))(Y−E(Y))]Cov(X,Y) = E[(X-E(X))(Y-E(Y))] Cov(X,Y)=E[(XE(X))(YE(Y))]

其中,X和Y分别为两个随机变量,E(X)和E(Y)分别为它们的期望值。X和Y的协方差越大,说明它们的联合变化程度越大,也就意味着它们之间存在一定的相关性。

协方差的符号表示两个变量的关系:

  • 当协方差为正值时,说明两个变量正相关,即其中一个变量增大时,另一个变量也会增大;
  • 当协方差为负值时,说明两个变量负相关,即其中一个变量增大时,另一个变量会减小;
  • 当协方差为零时,说明两个变量不相关,即它们之间不存在线性相关关系。

因为在我以前的文章里已经有提到过协方差的概念,如果想更近一步了解协方差的同学,可以点击这里。

协方差矩阵

从协方差这个概念出发,我们可以通过计算不同特征的关联来获得一个名叫协方差矩阵。协方差矩阵是PCA(Principal Component Analysis)方法的重要组成部分,它描述了数据中不同特征之间的关系,可以用于进行特征提取和降维。

统计学的,对于一个包含m个样本和n个特征的数据集X,其协方差矩阵S的计算公式为:

S=1m−1∑i=1m(xi−x‾)T(xi−x‾)S = \frac{1}{m-1} \sum_{i=1}^{m} (x_i - \overline{x})^T (x_i - \overline{x})S=m11i=1m(xix)T(xix)

其中,xix_ixi是第i个样本的特征向量,x‾\overline{x}x是所有样本的平均值。协方差矩阵的对角线上的元素是每个特征的方差,非对角线上的元素则表示不同特征之间的协方差。

例如,以鸢尾花的样本为例,该数据集有三种样本,每一种样本都有花瓣长宽、花萼长宽。

在这里插入图片描述
如果把数据绘制出来,并分别以其中两个属性组成一组散点图,那么就是上面这个样子。阅读的时候,只要看下三角行列就足够了。可以看出,有一部分特征之间存在高度重合,而另外一些特征存在比较清晰的边界。

因此,只要对上述散点图进行适当转换和计算,就能得到协方差矩阵(记住,中间斜线部分不是协方差,而是样本各特征的方差)。

在这里插入图片描述
然后我们可以从协方差矩阵进一步得到特征值和特征向量。

特征值与特征向量

特征值的计算需要使用到线性代数的知识。给定一个矩阵A,如果存在一个非零向量v和一个标量λ,满足以下关系:

A=λ⋅v\mathbf A = \lambda \cdot \mathbf v A=λv

则称向量 v\mathbf vv 是矩阵A的特征向量(eigenvector),对应的标量 λ\lambdaλ 则是矩阵 A\mathbf AA 的特征值(eigenvalue)。特征向量代表了矩阵A的某种“拉伸”或“压缩”效果,特征值则代表了这种“拉伸”或“压缩”效果的大小。

在PCA中,我们通常会使用协方差矩阵的特征值和特征向量来选择新的特征空间。具体来说,协方差矩阵的特征向量代表了数据在原有特征空间中的主要方向,而特征值则代表了数据在这些方向上的“重要程度”。

通常,特征值和特征向量可以通过调用NumPy库中的eigvals函数或者SciPy库中的eig函数来计算。对于我们的鸢尾花,可以得到

特征值: [4.22824171,0.24267075, 0.0782095, 0.02383509]
特征向量1:[ 0.36138659,-0.65658877, -0.58202985, 0.31548719]
特征向量2:[-0.08452251, -0.73016143, 0.59791083, -0.3197231 ]
特征向量3: [ 0.85667061, 0.17337266, 0.07623608, -0.47983899]
特征向量4: [ 0.3582892, 0.07548102, 0.54583143, 0.75365743]]

PCA降维

对于上述结果,在进行PCA降维时,我们通常会根据协方差矩阵的特征值从大到小排序,然后选择前几个特征值所对应的特征向量作为新的特征空间。这里的“前几个”通常是根据总方差贡献率来决定的,例如我们可以选择保留总方差的90%、95%或99%等。

根据输出结果,协方差矩阵的特征值从大到小依次是:

4.22824171, 0.24267075, 0.0782095, 0.02383509

我们可以看到,第一个特征值(4.22824171)远大于其他三个特征值,因此我们可以选择只保留第一个特征向量所代表的方向作为新的特征空间,即进行一维降维。当然,我们也可以选择保留前两个特征向量作为新的二维特征空间,这样也可以很好地保留数据的主要信息。具体来说,如果我们选择保留前两个特征向量,那么我们应该选取第一个和第二个特征向量,即:

特征值:4.22824171, 0.24267075
特征向量:[0.36138659, -0.08452251], [-0.65658877, -0.73016143], [-0.58202985, 0.59791083], [0.31548719, -0.3197231]

我们可以看到,第一个特征向量的分量(0.36138659, -0.65658877, -0.58202985, 0.31548719)代表了数据在第一维上的主要方向,第二个特征向量的分量(-0.08452251, -0.73016143, 0.59791083, -0.3197231)代表了数据在第二维上的主要方向。因此,如果我们只保留这两个特征向量所代表的方向,就可以得到一个新的二维特征空间。

在PCA中,我们通常会将原始数据投影到新的特征空间上,以得到降维后的数据。具体来说,对于一个d维的数据样本,我们可以将它投影到前k个特征向量所代表的新特征空间上,得到一个k维的数据样本。

假设我们选择保留前两个特征向量,即将数据降到二维。那么我们可以将原始数据样本矩阵X乘以前两个特征向量的转置矩阵,得到一个新的二维数据样本矩阵X_pca:

# 鸢尾花的数据
iris = load_iris()
X = iris.data
y = iris.target...# 计算协方差矩阵
cov_matrix = np.cov(X.T)...# 计算协方差矩阵的特征值和特征向量
eigvals, eigvecs = np.linalg.eig(cov_matrix)...# 投影到新的二维空间中 
X_pca = X.dot(eigvecs[:, :2])

这里的eigvecs[:, :2]表示选取协方差矩阵的前两个特征向量,即投影到二维特征空间上。dot函数表示矩阵乘法。最终得到的X_pca矩阵中,每一行代表一个新的二维数据样本。

于是我们得到了PCA降维后的图片

在这里插入图片描述


  1. 图片来源:https://towardsdatascience.com/principal-component-analysis-pca-explained-visually-with-zero-math-1cbf392b9e7d ↩︎

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

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

相关文章

实践数据湖iceberg 第四十一课 iceberg的实时性-业界的checkpoint配置

系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql方式从kafka读数据到iceberg 实践数据湖iceberg 第四课 在sqlclient中,以sql方式从kafka读数据到…

【python学习笔记】:中文编码

Python 中文编码 我们已经学会了如何用 Python 输出 "Hello, World!",英文没有问题,但是如果你输出中文字符 "你好,世界" 就有可能会碰到中文编码问题。 Python 文件中如果未指定编码,在执行过程会出现报错…

9、STM32 SDIO FATFS(SD卡)

本篇文章使用STM32对SD卡通过SDIO配置,读写文件 在使用FATFS时值得注意得是若通信SDIO不启动DMA方式读写,容易导致其他任务中断打断读写时序,导致FATFS的执行出现异常,常见返回为FR_DISK_ERR, / (1) A hard error occurred in the…

Apache Airflow Provider Sqoop 模块远程代码执行漏洞

漏洞描述 Apache Airflow 是一个以编程方式管理 workflow 的平台,Sqoop 模块用于在 Hadoop 和结构化数据存储(例如关系数据库)之间高效传输大量数据。 apache-airflow-providers-apache-sqoop 3.1.1 之前版本中,由于 SqoopHook …

【LeetCode】剑指 Offer(12)

目录 题目:剑指 Offer 30. 包含min函数的栈 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 30. 包含m…

京东物流实时风控实践

摘要:本文整理自京东风控数据产品组架构师周文跃,在 FFA 2022 实时风控专场的分享。本篇内容主要分为六个部分:1. 京东物流业务介绍2. 物流风控场景概括3. 物流风控平台建设4. Flink 赋能5. 技术挑战6. 未来规划Tips:点击「阅读原…

Vulnhub靶场之SHENRON: 3(wordpress)

1.信息收集 输入arp-scan 192.168.239.0/24,探索存活主机,发现主机192.168.239.174存活 对存活主机进行端口扫描,发现只存在80(Web)端口。 访问http://192.168.239.174,查看源码,发现域名http://shenron。 在/etc…

使用Selenium IDE进行自动化测试

1. 综述 Selenium IDE是火狐浏览器的一个插件,它会记录你在网页中进行的操作,如登陆、点击等。更为强大的是它还能将记录导出,例如导出成junit测试用例,非常强大,接下里将会看见。 在火狐的插件管理里,搜…

使用 docker 部署 MySQL 会导致数据丢失吗

2023年2月28日,今天下午电话面试 java 岗位,经过一些提问后,面试官问了一个问题,“那么你最近在关注什么方面的技术点呢?”,可能是我之前的回答不太理想,且说辞都是“不好意思,可能最…

0224多态

目录 一、多态的引入 二、方法的多态 一、重载 二、重写 三、对象的多态(核心) 四、应用实例 五、向上转型 六、向下转型 七、属性没有重写 八、练习题 第一题 第二题 一、多态的引入 通过主人给宠物喂食这个例子,说明多态的必要性&…

K_A13_002 基于STM32等单片机驱动干簧管传感器 串口与OLED0.96双显示

K_A13_002 基于STM32等单片机驱动干簧管传感器 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明模块工作原理:对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC干簧管传感器模块1.2、STM32F103C8T6干簧管传感器模块五、基础知识学习与相关资料…

Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别

PythonYolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01;前言这篇博客针对<<PythonYolov5跌倒摔倒人体特征识别>>编写代码&#xff0c;代码整洁&…

数据结构前提知识

数据结构数据结构 个体的存储个体关系的存储算法对存储数据的操作程序数据结构算法衡量算法的标准时间复杂度&#xff1a;注意不是程序执行的时间&#xff0c;因为一个程序执行的时间取决于软硬件环境&#xff0c;不同的机器&#xff0c;执行的速度不一样&#xff0c;配置好的…

CVPR 2023 接收结果出炉!再创历史新高!录用2360篇!(附10篇最新论文)

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达点击进入—>【计算机视觉】微信技术交流群2023 年 2 月 28 日凌晨&#xff0c;CVPR 2023 顶会论文接收结果出炉&#xff01;这次没有先放出论文 ID List&#xff0c;而是直接 email 通知作…

最好的 QML 教程,让你的代码飞起来!

想必大家都知道&#xff0c;亮哥一直深耕于 CSDN&#xff0c;坚持了好很多年&#xff0c;目前为止&#xff0c;原创已经 500 多篇了&#xff0c;一路走来相当不易。当然了&#xff0c;中间有段时间比较忙&#xff0c;没怎么更新。就拿 QML 来说&#xff0c;最早的一篇文章还是 …

Linux内核崩溃 dump调试

内核-crash(崩溃)&#xff0c;oops消息&#xff0c;dump oops &#xff08;也称 panic&#xff09;&#xff0c;称程序运行崩溃&#xff0c;程序崩溃后会产生oops消息。 应用程序或内核线程的崩溃都会产生oops消息&#xff0c;通常发生oops时&#xff0c;系统不会发生死机&a…

中文预训练大模型—文心Ernie技术原理

文心Ernie技术原理 一、背景技术 Ernie是基于Bert模型进行改进&#xff0c;基本模型是Transformer&#xff0c;Bert完成的预训练任务是&#xff1a;完形填空&#xff08;通过基本语言单元掩码&#xff09;&#xff1b;上下句预测。 Bert模型的缺陷是&#xff1a;只能捕获局部…

【Spark分布式内存计算框架——Spark Streaming】9. 获取偏移量 应用案例:百度搜索风云榜(上)

4.4 获取偏移量 当SparkStreaming集成Kafka时&#xff0c;无论是Old Consumer API中Direct方式还是New Consumer API方式获取的数据&#xff0c;每批次的数据封装在KafkaRDD中&#xff0c;其中包含每条数据的元数据信息。 文档&#xff1a;http://spark.apache.org/docs/2.4.…

Linux系统介绍及熟悉Linux基础操作

一、什么是Liunx Linux&#xff0c;全称GNU/Linux&#xff0c;是一种免费使用和自由传播的类UNIX操作系统&#xff0c;其内核由林纳斯本纳第克特托瓦兹&#xff08;Linus Benedict Torvalds&#xff09;于1991年10月5日首次发布&#xff0c;它主要受到Minix和Unix思想的启发&am…

【图像处理】数字图像处理基础(分辨率,像素,显示...)

Table of Contents1.数字图像处理基础1.1 图像表示1.1.1 图像成像模型1.1.2 数字图像的表示a.图像采样b.图像灰度的量化c.算比特数1.2 分辨率1.2.1 空间分辨率1.2.2 灰度分辨率1.3 像素间的关系1.3.1 像素邻域a.4邻域b.4对角邻域c.8邻域1.3.2 像素邻接1.3.3 像素连通1.3.4 像素…