机器学习 | 降维:PCA主成分分析

news2024/11/24 11:26:26

本文整理自

  • 长路漫漫2021的原创博客:sklearn基础篇(九)-- 主成分分析(PCA)
  • 李春春_的原创博客:主成分分析(PCA)原理详解
  • bilibili视频:用最直观的方式告诉你:什么是主成分分析PCA

文章目录

  • 📚降维
  • 📚 PCA的思想
  • 📚用最直观的方式告诉你:什么是主成分分析PCA😄
    • 🐇PCA是什么?
    • 🐇怎么找坐标系,特别是怎么找方差最大的方向?
    • 🐇怎么求R?协方差矩阵的特征向量就是R!
      • 🥕协方差
      • 🥕协方差矩阵
      • 🥕协方差矩阵的特征向量
    • 🐇总结一下PCA怎么求解?
    • 🐇PCA和奇异值分解
  • 📚PCA的推导:基于最小投影距离
  • 📚PCA的推导:基于最大投影方差
  • 📚PCA算法流程⭐️
    • 🐇特征值分解算法
      • 🥕观测数据规范化处理,得到规范化数据矩阵X
      • 🥕计算相关矩阵R
      • 🥕求R的特征值和特征向量
      • 🥕求k个样本主成分
      • 🥕计算k个主成分yi​与原变量xi的相关系数ρ(xi,yi)以及k个主成分对原变量xi的贡献率vi
      • 🥕计算n个样本的k个主成分值
    • 🐇PCA实例
    • 🐇奇异值分解算法
      • 🥕构造新的n×m矩阵
      • 🥕对矩阵X′进行截断奇异值分解
      • 🥕求k×n样本主成分矩阵

📚降维

  • 降维是对数据高维度特征的一种预处理方法。降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。在实际的生产和应用中,降维在一定的信息损失范围内,可以为我们节省大量的时间和成本。降维也成为了应用非常广泛的数据预处理方法。
  • 降维具有如下一些优点:
    • 1)使得数据集更易使用;
    • 2)降低算法的计算开销;
    • 3)去除噪声;
    • 4)使得结果容易理解。
  • PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量
  • PCA 的数学推导可以从最大可分型最近重构型两方面进行,前者的优化条件为划分后方差最大,后者的优化条件为点到划分平面距离最小,这里我将从最大可分性的角度进行证明。
  • 初学者建议先阅读这份教程,英文好的可以直接阅读原文文献,其他小伙伴可以参考:A tutorial on Principal Components Analysis | 主成分分析(PCA)教程
  • 奇异值分解,可以参考这份教程,英文好的可以直接阅读原文文献,其他的小伙伴可以参考:A Tutorial on Principal Component Analysis(译)

  • PCA是将数据投影到方差最大的几个相互正交的方向上,以期待保留最多的样本信息。
  • 样本的方差越大表示样本的多样性越好,在训练模型的时候,我们当然希望数据的差别越大越好。否则即使样本很多但是他们彼此相似或者相同,提供的样本信息将相同,相当于只有很少的样本提供信息是有用的。
  • 样本信息不足将导致模型性能不够理想。这就是PCA降维的目的:将数据投影到方差最大的几个相互正交的方向上。这种约束有时候很有用,比如在下面这个例子:
  • 对于这个样本集我们可以将数据投影到 x 轴或者 y 轴,但这都不是最佳的投影方向,因为这两个方向都不能最好的反映数据的分布。很明显还存在最佳的方向可以描述数据的分布趋势,那就是图中红色直线所在的方向。也是数据样本作投影,方差最大的方向。向这个方向做投影,投影后数据的方差最大,数据保留的信息最多。

📚 PCA的思想

  • PCA顾名思义,就是找出数据里最主要的方面,用数据里最主要的方面来代替原始数据。基本想法是将所有数据投影到一个子空间中,从而达到降维的目标,为了寻找这个子空间,我们基本想法是:
    • 所有数据在子空间中更为分散
    • 损失的信息最小,即:在补空间的分量少
  • PCA问题的优化目标:将一组n维向量降为k维(0<k≤n)其目标是选择k个单位正交基,使得原始数据变换到该组基上后,各特征两两之间的协方差为0,而特征的方差则尽可能大,当在正交的约束下取最大的k个方差。
    在这里插入图片描述
  • 特征选择的问题,其实就是要剔除的特征主要是和类标签无关的特征。而这里的特征很多是和类标签有关的,但里面存在噪声或者冗余。在这种情况下,需要一种特征降维的方法来减少特征数,减少噪音和冗余,减少过度拟合的可能性。
  • PCA的思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征。这k维特征称为主成分,是重新构造出来的k维特征,而不是简单地从n维特征中去除其余n-k维特征。

📚用最直观的方式告诉你:什么是主成分分析PCA😄

哔哩哔哩视频网址,呜呜呜强推!(这个视频用的是特征值分解算法)

🐇PCA是什么?

  • PCA的目的就是找到一个坐标系,使得这个数据在只保留一个维度的时候,信息损失是最小的(数据分布式最分散的,即保留的信息是最多的)。
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

🐇怎么找坐标系,特别是怎么找方差最大的方向?

在这里插入图片描述
补充数据的线性变换
在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 左右拉伸的时候,拉伸的方向决定了方差最大的方向是横或者纵。
  • 旋转决定了方差最大方向的角度。
  • 所以实际上我们要求的就是R,看要转几度。
    在这里插入图片描述
  • 上述过程是可逆的
    在这里插入图片描述

🐇怎么求R?协方差矩阵的特征向量就是R!

🥕协方差

在这里插入图片描述

🥕协方差矩阵

  • 左边第一个图的协方差是个单位矩阵;第二个对角线是正数,所以是正相关;第三个对角线是负数,所以是负相关。

在这里插入图片描述

  • 将协方差公式和方差公式代入协方差矩阵,可得以下推导。

在这里插入图片描述

  • 上边是白数据的协方差矩阵,然后代入求我们手上数据的协方差矩阵。
    在这里插入图片描述

🥕协方差矩阵的特征向量

  • 协方差矩阵乘以特征向量等于特征值乘以特征向量
    在这里插入图片描述
  • 转换后,可以视作如下构成:
    在这里插入图片描述
  • 特征向量1和特征向量2看作R矩阵,把特征值1和特征值2看作L矩阵,再把左边的R移到右边

在这里插入图片描述

  • 由此得
    • 特征值 1就是x方向拉伸倍数的平方,特征值2就是y方向拉伸倍数的平方。
    • L就是在R这组基下(新坐标系)的协方差矩阵。
      在这里插入图片描述

🐇总结一下PCA怎么求解?

在这里插入图片描述

🐇PCA和奇异值分解

  • PCA的缺点:离群点影响大。就加一个离群点,整个方向动的幅度就很大。
    在这里插入图片描述

奇异值分解后续补充


接下来是堆公式环节😢


📚PCA的推导:基于最小投影距离

以下公式推导主要参考:刘建平Pinard——主成分分析(PCA)原理总结,详细原理可以阅读:降维——PCA(非常详细)。

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

📚PCA的推导:基于最大投影方差

在这里插入图片描述在这里插入图片描述

📚PCA算法流程⭐️

🐇特征值分解算法

🥕观测数据规范化处理,得到规范化数据矩阵X

🥕计算相关矩阵R

在这里插入图片描述

🥕求R的特征值和特征向量

在这里插入图片描述

🥕求k个样本主成分

在这里插入图片描述

🥕计算k个主成分yi​与原变量xi的相关系数ρ(xi,yi)以及k个主成分对原变量xi的贡献率vi

在这里插入图片描述

🥕计算n个样本的k个主成分值

在这里插入图片描述

以上部分参考了sklearn基础篇(九)-- 主成分分析(PCA),不过结合那个哔哩哔哩视频,个人感觉PCA这一算法的流程其实就是:

  • 数据预处理:将原始数据进行标准化或归一化处理,完成去中心化。
  • 计算协方差矩阵:将处理后的数据进行协方差矩阵的计算,得到协方差矩阵。
  • 特征值分解:对协方差矩阵进行特征值分解,得到特征值和特征向量。
  • 特征值排序:将所有特征值从大到小排序,选择前k个特征值对应的特征向量作为新的基向量。
  • 生成新的特征空间:将原始数据投影到新的特征空间中,得到降维后的数据。包括拉伸(特征值)和旋转(特征向量)。

🐇PCA实例

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述


🐇奇异值分解算法

输入:m×n样本矩阵X,每一行元素均值为0。这里每一行是一个特征。
输出:k×n样本主成分矩阵Y
参数:主成分个数k

🥕构造新的n×m矩阵

在这里插入图片描述

🥕对矩阵X′进行截断奇异值分解

在这里插入图片描述

🥕求k×n样本主成分矩阵

在这里插入图片描述

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

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

相关文章

结构体入门调试技巧

目录 前言&#xff1a; 一.结构体 1.1结构体的初始化和访问 二.结构体传参 三.调试技巧 3.1VS里的版本 3.2调试功能介绍 四.好代码 4.1const修饰指针的两种位置 五.错误分类 ❤博主CSDN:啊苏要学习 ▶专栏分类&#xff1a;C语言◀ C语言的学习&#xff0c;是为我们今…

蓝桥杯2019年省赛——扫地机器人

题目描述 小明公司的办公区有一条长长的走廊&#xff0c;由 NN 个方格区域组成&#xff0c;如下图所示。 走廊内部署了 K 台扫地机器人&#xff0c;其中第 i 台在第Ai​ 个方格区域中。已知扫地机器人每分钟可以移动到左右相邻的方格中&#xff0c;并将该区域清扫干净。 请你…

Java企业级开发学习笔记(4.1)Spring Boot入门程序

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/Qh554】 文章目录 一、使用Maven方式构建Spring Boot项目1.1 创建Maven项目1.2 添加依赖1.3 创建入口类1.4 创建控制器1.5 运行入口类1.6 访问Web页面1.7 修改访问映射路径1.8 定制启动标语1.8.1 …

UE5.1.1C++从0开始(10.作业三)

这次作业量和之前的相比可能会有点大&#xff0c;我先整理一下这次的作业清单&#xff1a; 魔法子弹的飞行声音以及爆炸声音给玩家增加受击的闪亮的效果&#xff0c;和立方体相同的那种增加一个health max的变量&#xff0c;把widget里头的health节点更换为health max节点&…

PythonOCR识别扫描版纯图PDF提取汉字的10大方法,力推RapidOCRPDF 可识别纯图PDF 加密签名的PDF 重点是开源免费,某些方面准确度比百度OCR高

下面实例都以下面的测试样例PDF为实验对象 非纯图可复制pdf 纯图PDF TOP1&#xff1a;RapidOCRPDF 可识别纯图PDF也能识别加密签名的PDF 重点是开源免费 https://github.com/RapidAI/RapidOCRPDF # 基于rapidocr_onnxruntime pip install rapidocr_pdf[onnxruntime]# 基于ra…

多体动力学:哈密尔顿原理的使用

参考资料&#xff1a; HAMILTON’S PRINCIPLE AND HAMILTON’S FORMULATION 原理已经讲得很详细了。如果看不到可以见我的资源&#xff0c;不用积分就可以下载。 步骤&#xff1a; 1.写出拉格朗日表达式 L T − V LT-V LT−V, T T T是系统的动能&#xff0c; V V V是系统的…

二进制安装1.26版本k8s(docker)

文章目录 前言准备工作准备4台虚拟机说明下载对应的二进制包初始化操作CentOS7配置yum源配置免密、修改hostname、关闭防火墙、selinux、关闭swap分区(方便后面进行其它操作)下载软件包并批量安装配置时间同步配置打开文件描述符添加ipvs模块和内核模块 Ubuntu配置apt源配置免密…

【数据结构】---堆排序+TOP-K问题(了解游戏排行底层原理)

文章目录 前言&#x1f31f;一、建堆的两种方式&#xff1a;&#x1f30f;1.1 向上调整建堆(堆排序)&#xff1a;&#x1f4ab;1.1.1 完整代码&#xff1a;&#x1f4ab;1.1.2 流程图(以小堆为例)&#xff1a;升序&#xff1a;建大堆&#x1f4ab;1.1.3 流程图(以小堆为例)&…

python调用海康视频汇聚平台API,获得所有摄像头设备编号、实时播放rtsp地址、回放rtsp地址

目录 1. 需求2. 思路3. 实现3.1. 确保服务器上安装视频汇聚平台&#xff08;iSecure Center&#xff09;3.2. 查看API网关是否安装成功3.3. 分配身份认证信息AK/SK3.4. 利用认证信息&#xff0c;python demo开发 1. 需求 海康视频汇聚平台(综合安防管理平台&#xff08;iSecur…

机器学习之集成学习

一、介绍 集成学习&#xff08;Ensemble Learning&#xff09;是一种机器学习技术&#xff0c;通过结合多个学习器&#xff08;例如决策树、神经网络、支持向量机等&#xff09;的预测结果&#xff0c;来达到更好的分类或回归预测性能。集成学习可以通过降低模型的方差&#x…

探究 Android 14 新功能之 TextView 搜索高亮和焦点移动~

前言 之前写的文章《Android 14 新功能之 HighLights》里&#xff0c;讲到 Android 14 里推出的 HighLights 新功能可以快速实现 TextView 文字的高亮效果&#xff0c;并支持动态更新。 本文将继续介绍 TextView 的另 2 处新功能&#xff1a; 使用 searchResultHighlight 等…

(转载)从0开始学matlab(第14天)—while循环结构

循环(loop) 是一种 matlab 结构&#xff0c;它允许我们多次执行一系列的语句。循环结构有两种基本形式 :while 循环和 for 循环。两者之间的最大不同在于代码的重复是如何控制的。在while 循环中&#xff0c;代码的重复的次数是不能确定的&#xff0c;只要满足用户定义的条件…

Metabase可视化BI系统部署安装及简单使用

metabase 是国外开源的一个可视化系统&#xff0c;语言使用了Clojure TypeScript。 Clojure&#xff08;/ˈkloʊʒər/&#xff09;是Lisp程式語言在Java平台上的現代、動態及函數式方言。来自维基百科。 我也是第一次看到这个语言&#xff0c;知道它是可以运行在Java环境上的…

脱离文档流和半脱离文档流(详解)

脱离文档流和半脱离文档流&#xff08;详解&#xff09;_脱离文档流是什么意思_大前端工程师的博客-CSDN博客 脱离文档流 脱离文档流是指&#xff0c;该元素脱离了文档中。不再占据默认分配的空间&#xff0c;它下面的元素会上去补位。 可以理解为脱离文档流的元素离开了它的座…

1720_Linux学习中的问题处理

全部学习汇总&#xff1a;GreyZhang/little_bits_of_linux: My notes on the trip of learning linux. (github.com) 这个有点学习的方法论的意思&#xff0c;画个滋味导图顺便整理一下。 遇到问题的时候&#xff0c;解决的方法大致有3中&#xff0c;而针对学习的建议有一部分是…

STL-queue和priority_queue的模拟实现

回顾 对于STL&#xff0c;我们已经知道了vector和list&#xff0c;而它们是STL中被称为六大组件之一的容器&#xff0c;我们还学习了模拟实现stack&#xff0c;而stack在STL中被称为六大组件之一的适配器&#xff0c;今天&#xff0c;我们来学习queue的模拟实现和priority_que…

分布式运用之ELK企业级日志分析系统

1.ELK的相关知识 1.1 ELK的概念与组件 ELK平台是一套完整的日志集中处理解决方案&#xff0c;将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用&#xff0c; 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch&#xff1a; 是基于Lucene&#xff0…

Tomcat服务器、Servlet生命周期、上传下载文件、使用XHR请求数据、注解使用

文章目录 Servlet认识Tomcat服务器使用Maven创建Web项目创建Servlet探究Servlet的生命周期解读和使用HttpServletWebServlet注解详解使用POST请求完成登陆上传和下载文件下载文件上传文件 使用XHR请求数据重定向与请求转发重定向请求转发 ServletContext对象初始化参数 Servlet…

基于自营配送模式的车辆路径规划设计与实现_kaic

摘要 近年来&#xff0c;随着我国消费水平逐渐提升&#xff0c;消费者在网上购物的频率也越来越高&#xff0c;电商发展速度迅猛&#xff0c;加大了物流配送的压力&#xff0c;促使物流企业以更大的运力&#xff0c;更短的时间将货物送达。在货品的运输过程中&#xff0c;成本居…

TCP 连接未必都是用TCP协议沟通

确实&#xff0c;一般来说 TCP 连接是标准的 TCP 三次握手完成的&#xff1a; 1.客户端发送 SYN&#xff1b; 2.服务端收到 SYN 后&#xff0c;回复 SYNACK&#xff1b; 3.客户端收到 SYNACK 后&#xff0c;回复 ACK。 SYN 会在两端各发送一次&#xff0c;表示“我准备好了&…