第五章《数据降维:深入理解 PCA 的来龙去脉》笔记

2023-11-10 11:44

本文主要是介绍第五章《数据降维:深入理解 PCA 的来龙去脉》笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主成分分析(Principal Component Analysis,PCA) 就是机器学习中一种常用且有效的数据降维方法。

5.1 PCA是什么

PCA 将相关性高的变量转变为较少的独立新变量,实现用较少的综合指标分别代表存在于 各个变量中的各类信息,既减少高维数据的变量维度,又尽量降低原变量数据包含信息的损失程度,是一种典型的数据降维方法。PCA 保留了高维数据最重要的一部分特征,去除了数据集 中的噪声和不重要特征,这种方法在承受一定范围内的信息损失的情况下节省了大量时间和资源,是一种应用广泛的数据预处理方法。

5.2 用一个例子来理解PCA过程

经过零均值化的数据预处理后,我们就可以正式开启 PCA 过程了,步骤如下。

(1)计算协方差矩阵。

(2)计算特征值与特征向量。

(3)矩阵相乘实现降维。

从上述 PCA 降维的实际过程来看,对某个矩阵 A(m×n)降维实际上就是寻找对应的降维矩阵 P(k×m)。

5.3 如何寻找降维矩阵P

5.4 PCA降维的核心思想

5.4.1 核心思想一:基变换向量投影

要实现原始数据降维就是要将矩阵 A 中每个列向量的维度或 者行数合理地降低。要实现高维向量降维,一个常见的方法就是高维向量向低维空间投影。

向量 a 与向量 b 的内积结果就等于向量 a 在向量 b 方向上的投影长度 |a|cosθ。这就是向量内积的几何定义。

矩阵相乘的几何意义就是,两个矩阵相乘的结果是将右边矩阵中的每一个列向量变换 到以左边矩阵中每一个行向量为基底所表示的空间中。

5.4.2 核心思想二:协方差归零投影

既然数据降维的起因是高维数据的维度之间存在较高的相关性导致数据信息存在冗余,那 么数据降维的一个核心思想自然就是,数据降维后的维度之间尽可能相对独立,也就是降维之 后的数据维度之间的协方差为 0。

(1)什么是方差。

方差和标准差是最常用的度量一组数据分散程度的指标。对于一组含有 n 个样本的集合, 我们容易知道以下公式。

(2)协方差。

协方差度量的是维度和维度之间的关系。假设两组数据分别是 x 和 y,那么这两组数据的协方差为

(3)协方差矩阵。

多维数据就需要多次计算协方差,也就是将多维数据中的维度数据两两计算协方差。协方差矩阵就是度量维度和维度之间关系的矩阵。

所以,我们降维之后希望各个维度之间相互独立,也就是希望降维之后不同维度之间的协方差为 0,同样也就是希望上面的协方差矩阵除了主对角线之外的部分都为 0。

5.4.3 核心思想三:最大方差投影

这种投影数据点的分散实际上就是要求原始数据矩阵降维处理之后的新矩阵的维度的方差 尽可能大,也就是降维之后矩阵的协方差矩阵的对角线元素尽可能大。我们可以将这种降维投 影的要求称为“最大方差投影”。

5.4.4 PCA降维的关键:协方差矩阵对角化

降维之后新矩阵 Y 的协方差矩阵 Cy 的非主对角线元素尽可能为 0, 而主对角线元素尽可能大。满足上述要求的矩阵是一个对角矩阵,所以降维的实质就是要求降 维之后的新矩阵 Y 的协方差矩阵 Cy 是对角矩阵。

5.5 面向零基础读者详解PCA降维

5.5.1 计算矩阵Y的协方差矩阵Cy

1.为什么计算协方差矩阵

这是因为矩阵 Y 的协方差矩阵 Cy 的主对角线元素是降维后新维度的方差,非主对角线元素 是降维后各新维度的协方差。而 PCA 降维的核心思想就是“协方差归零投影”和“最大方差投 影”,也就是希望降维之后得到的新矩阵 Y 的各维度间的协方差尽量为 0,而维度的方差尽可能 大。上述要求翻译成数学语言,就是要求降维后矩阵 Y 的协方差矩阵为对角矩阵,这就是我们 考虑计算矩阵 Y 的协方差矩阵的原因。

2.详解协方差矩阵的表达式

协方差矩阵数学表达式 的推导过程。

5.5.2 矩阵Y的协方差矩阵Cy对角化

1.什么样的矩阵 Q 能够对角化 Cy
根据实对称矩阵正交对角化的定理可以得到。所以,要使矩阵 Y 的协方差矩阵是对角矩阵,只需要 即可。这个结果表明,矩阵 Q 如果是由原矩阵 A 的协方差矩阵 C 的特征向量构成的矩阵,矩阵 A 经过矩阵 Q 线性变换之后的矩阵 Y 的协方差矩阵 Cy 就为对角矩阵。

2.实对称矩阵对角化性质

实对称矩阵有一个非常好的性质,那就是其可以转化为对角矩阵。原矩阵的协方差矩 阵 C 满足实对称矩阵的条件,所以可以通过线性变换将 C 转化为对角矩阵 Λ,具体来说就是

5.5.3 求解降维矩阵P

我们总结出 PCA 降维的步骤如下。

(1)计算原矩阵 A 的协方差矩阵 C。

(2)计算协方差矩阵 C 的单位正交的特征向量与对应的特征值。

(3)根据降维要求,确定 k 值大小。将 C 的特征值从大到小排列,选取前 k 个特征值所对 应的特征向量。

(4)将这些特征向量作为行向量,求解出降维矩阵 P。 (5)将降维矩阵 P 乘以原矩阵 A 即可降维,得到 Y=PA。

5.6 编程实践:手把手教你写代码

这篇关于第五章《数据降维:深入理解 PCA 的来龙去脉》笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382458

相关文章

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

解决pandas无法读取csv文件数据的问题

《解决pandas无法读取csv文件数据的问题》本文讲述作者用Pandas读取CSV文件时因参数设置不当导致数据错位,通过调整delimiter和on_bad_lines参数最终解决问题,并强调正确参... 目录一、前言二、问题复现1. 问题2. 通过 on_bad_lines=‘warn’ 跳过异常数据3

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I