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

本文整理自

  • 长路漫漫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的缺点:离群点影响大。就加一个离群点,整个方向动的幅度就很大。
    在这里插入图片描述

SVD奇异值分解补充


接下来是堆公式环节😢


📚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样本主成分矩阵

在这里插入图片描述

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

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

相关文章

Python中模块的使用方法4

1 模块、包和库的区别 Python中&#xff0c;模块的英文是“module”&#xff0c;是一个以py为后缀名的文件&#xff1b;包的英文是“package”&#xff0c;是一个包含了多个模块的目录&#xff1b;库的英文是“library”&#xff0c;包含了具有相关功能的包和模块。 2 模块的…

web练习第二周

前言&#xff1a;&#xff08;博主个人学习笔记&#xff0c;不用看&#xff09;web练习第二周&#xff0c;仅做出前3题。相比于第一周&#xff0c;难度大幅增加&#xff0c;写题时就算看了wp还是像个无头苍蝇一样到处乱创&#xff0c;大多都是陌生知识点&#xff0c;工具的使用…

LeetCode刷题(ACM模式)-02链表

参考引用&#xff1a;代码随想录 注&#xff1a;每道 LeetCode 题目都使用 ACM 代码模式&#xff0c;可直接在本地运行&#xff0c;蓝色字体为题目超链接 0. 链表理论基础 0.1 链表定义 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff1a…

矿井水除总氮工艺详解

一、项目概述 项目背景: 1、水资源浪费长期以来&#xff0c;采煤对地下水造成了严重破坏。绝大部分矿井水&#xff0c;被以直排方式&#xff0c;流入河道、田野&#xff0c;这不仅造成水资源的白白浪费&#xff0c;也污染了环境。社会对此反响强烈的同时&#xff0c;煤矿企业也…

Live800:客服系统知识库建设中需要注意的三个要点

互联网的快速发展&#xff0c;让客服行业也随之发生着巨大的变化。传统的客服方式越来越难以满足人们的需求&#xff0c;客户对客服的要求也变得越来越高。在这种情况下&#xff0c;客服系统成为了一种必不可少的工具。 客服系统作为企业与客户沟通的重要渠道&#xff0c;其之所…

电脑msvcp120.dll缺失怎么办?由于找不到msvcp120.dll的解决方案

MSVCP120.dll文件是Windows操作系统中的一种动态链接库文件。它是由Microsoft C软件包提供的重要组件。当系统提示“MSVCP120.dll文件缺失”时&#xff0c;可能会导致某些应用程序无法正常运行。 以下是修复MSVCP120.dll缺失问题的几种方法&#xff1a; 方法一&#xff1a;修复…

ChatGPT发展报告:原理、技术架构详解和产业未来(附下载)

今年12月1日&#xff0c;OpenAI推出人工智能聊天原型ChatGPT&#xff0c;再次赚足眼球&#xff0c;为AI界引发了类似AIGC让艺术家失业的大讨论。 据报道&#xff0c;ChatGPT在开放试用的短短几天&#xff0c;就吸引了超过 100 万互联网注册用户。并且社交网络流传出各种询问或…

机试打卡 -12 滑动窗口最大值(优先队列堆)

我的思路1&#xff1a;队列&#xff0c;每次 出队入队&#xff0c;记录1个队列中的最大值索引&#xff0c;超时。。。 class Solution:def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:nums_lenlen(nums)ans_list[]# 队列长度为kqueuenums[:k]# 队列最大…

花朵识别系统Python实现,深度学习卷积神经网络算法

一、背景 花朵识别系统&#xff0c;基于Python实现&#xff0c;深度学习卷积神经网络&#xff0c;通过TensorFlow搭建卷积神经网络算法模型&#xff0c;并对数据集进行训练最后得到训练好的模型文件&#xff0c;并基于Django搭建可视化操作平台。 在当今信息化社会&#xff0c…

我3年前写的博客,又被别人抄去发论文了,该论文整个正文部分几乎直接照抄我的博客

我想说每一篇原创博客都是作者的心血&#xff0c;有时候写一篇博客也许会花一天&#xff0c;甚至好几天的时间&#xff0c;尊重原创&#xff0c;营造好的环境&#xff0c;才有可能出现更多优质的博文&#xff0c;而不是到处都是抄来抄去的低质量水文。 前几天接到来自粉丝的私信…

如何通过CRM系统做好客户的分级分类

随着市场竞争的不断加剧&#xff0c;尤其是以客户为中心时代的到来&#xff0c;企业越来越注重客户的管理和服务。而CRM系统&#xff0c;作为企业客户管理的重要工具&#xff0c;其核心任务是对客户进行分级分类&#xff0c;以便更好地为客户提供定制化的服务。 客户之间的价值…

【C++】——模板(泛型编程+函数模板+类模板)

文章目录 1. 前言2. 泛型编程3. 函数模板3.1 函数模板的原理3.2 函数模板的实例化3.3 模板参数的匹配原则 4. 类模板4.1 类模板的实例化 5. 结尾 1. 前言 之前我们学习了函数重载&#xff0c;让我们在写相似函数的时候非常方便&#xff0c;但函数重载还有很多不足的地方&#…

【源码解析】Nacos配置热更新的实现原理

使用入门 使用RefreshScopeValue&#xff0c;实现动态刷新 RestController RefreshScope public class TestController {Value("${cls.name}")private String clsName;}使用ConfigurationProperties&#xff0c;通过Autowired注入使用 Data ConfigurationProperti…

如何从Ubuntu Linux中删除Firefox Snap?

Ubuntu Linux是一款广受欢迎的开源操作系统&#xff0c;拥有强大的功能和广泛的应用程序选择。默认情况下&#xff0c;Ubuntu提供了一种称为Snap的软件打包格式&#xff0c;用于安装和管理应用程序。Firefox是一款流行的开源网络浏览器&#xff0c;而Firefox Snap是Firefox的Sn…

f-stack的源码编译安装

DPDK虽然能提供高性能的报文转发&#xff08;安装使用方法见DPDK的源码编译安装&#xff09;&#xff0c;但是它并没有提供对应的IP/TCP协议栈&#xff0c;所以在网络产品的某些功能场景下&#xff08;特别是涉及到需要使用TCP协议栈的情况&#xff09;&#xff0c;比如BGP邻居…

9. Linux下实现简单的UDP请求

本文简单介绍了UDP传输层协议&#xff0c;并在Linux下实现简单的socket通讯 一、UDP UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09;是一种无连接的传输层协议&#xff0c;它不保证数据包的可靠性和顺序。UDP在IP协议的基础上增加了简单的差错…

Spring Authorization Server 系列(二)获取授权码

Spring Authorization Server 系列&#xff08;二&#xff09;获取授权码 概述获取授权码获取授权码的url逻辑解析匹配url参数解析 概述 Spring Authorization Server 是基于 OAuth2.1 和 OIDC 1.0 的。 只有 授权码&#xff0c;刷新token&#xff0c;客户端模式。 获取授权码…

Revit建模|Revit风管怎么绘制?

​绘制风管是机电工程重要的一环&#xff0c;对于不少刚接触Revit的小伙伴来说似乎还无从下手&#xff0c;今天就让小编来告诉大家在Revit中绘制风管的方法。 一、在Revit绘制风管 第一步&#xff1a;首先我们先在revit的界面中项目文件找到风管。 第二步&#xff1a;打开后我…

Mysql 学习(十 三)InnoDB的BufferPool

为什么要有缓存&#xff1f; 我们知道每次获取数据我们都需要从磁盘获取&#xff0c;磁盘的运行速度又慢的不行&#xff0c;对于这一个问题我们要怎么解决呢&#xff1f;我们把查询结果存储起来不就行了&#xff0c;因为当需要访问某个页的数据时&#xff0c;就会把完整的页的…

dvwa靶场通关(一)

第一关&#xff1a;Brute force low 账号是admin&#xff0c;密码随便输入 用burp suite抓包 爆破得出密码为password 登录成功 Medium 中级跟low级别基本一致&#xff0c;分析源代码我们发现medium采用了符号转义&#xff0c;一定程度上防止了sql注入&#xff0c;采用暴力破…