PCA学习

news2024/11/25 18:53:07

前置知识

统计

假设数据集 X ∈ R n × m \mathbf{X}\in\mathbb{R}^{n\times m} XRn×m,其中 n n n表示样本数量, m m m表示特征个数

均值 X ˉ = 1 n e T X = 1 n ∑ i = 1 n X i \bar{\mathbf{X}} =\frac{1}{n}\mathbf{e}^T\mathbf{X} =\frac{1}{n} \sum_{i=1}^{n}\mathbf{X}_i Xˉ=n1eTX=n1i=1nXi(其中 e \mathbf{e} e为全 1 1 1向量, X i \mathbf{X}_i Xi是行向量)
协方差 c o v ( X ) = 1 n − 1 ( X − X ˉ ) T ( X − X ˉ ) cov(\mathbf{X}) = \frac{1}{n-1}\left(\mathbf{X}-\bar{\mathbf{X}}\right)^T\left(\mathbf{X}-\bar{\mathbf{X}}\right) cov(X)=n11(XXˉ)T(XXˉ)

补充说明:
1.这里用 n − 1 n-1 n1 n n n都行,因为最后只要特征向量,而不需要特征值, A x = λ x ⇒ ( k A ) x = ( k λ ) x \mathbf{A}x=\lambda x\Rightarrow (k\mathbf{A})x=\left(k\lambda\right)\mathbf{x} Ax=λx(kA)x=()x
2.其实不能直接 X − X ˉ \mathbf{X}-\bar{\mathbf{X}} XXˉ,因为维度对不上,这里就当作能广播

投影

在这里插入图片描述
x \mathbf{x} x投影到 u \mathbf{u} u
∥ x ∥ cos ⁡ θ = ∥ x ∥ x ⋅ u ∥ x ∥ ∥ u ∥ = x ⋅ u ∥ u ∥ \|\mathbf{x}\|\cos \theta = \|\mathbf{x}\| \frac{\mathbf{x}\cdot \mathbf{u}}{\|\mathbf{x}\|\|\mathbf{u}\|}=\frac{\mathbf{x}\cdot \mathbf{u}}{\|\mathbf{u}\|} xcosθ=xx∥∥uxu=uxu
如果 u \mathbf{u} u是单位向量,则投影简化为 x ⋅ u \mathbf{x}\cdot \mathbf{u} xu

PCA

步骤

1.减均值
X ^ = X − X ˉ = X − 1 n e e T X = ( I − 1 n e e T ) X \hat{\mathbf{X}}=\mathbf{X}-\bar{\mathbf{X}}=\mathbf{X}-\frac{1}{n}\mathbf{e}\mathbf{e}^T\mathbf{X}=\left(\mathbf{I}- \frac{1}{n}\mathbf{e}\mathbf{e}^T\right)\mathbf{X} X^=XXˉ=Xn1eeTX=(In1eeT)X
(其实不能直接 X − X ˉ \mathbf{X}-\bar{\mathbf{X}} XXˉ,因为维度对不上,这里就当作能广播,后面两个等号维度是对的上的)

减均值之后,均值为 0 0 0
这里也可以继续除以标准差

2.计算协方差矩阵
c o v ( X ^ ) = 1 n − 1 X ^ T X ^ ∈ R m × m cov\left(\hat{\mathbf{X}}\right)=\frac{1}{n-1}\hat{\mathbf{X}}^T\hat{\mathbf{X}}\in\mathbb{R}^{m\times m} cov(X^)=n11X^TX^Rm×m
这里因为均值为 0 0 0,所以不用再减去 X ˉ \bar{\mathbf{X}} Xˉ
3.计算协方差矩阵特征值与特征向量
不妨假设计算之后的特征值 λ 1 ≥ λ 2 ≥ ⋯ ≥ λ m \lambda_1 \ge \lambda_2\ge \cdots \ge \lambda_m λ1λ2λm
对应的单位特征向量 v 1 , v 2 , ⋯   , v m \mathbf{v}_1,\mathbf{v}_2,\cdots, \mathbf{v}_m v1,v2,,vm
4.选择前 k k k大的特征值对应的特征向量
V = ( v 1 , v 2 , ⋯   , v k ) ∈ R m × k \mathbf{V} = \left(\mathbf{v}_1,\mathbf{v}_2,\cdots, \mathbf{v}_k\right)\in\mathbb{R}^{m\times k} V=(v1,v2,,vk)Rm×k
5.投影
Y = X ^ V ∈ R n × k \mathbf{Y} = \hat{\mathbf{X}}\mathbf{V}\in\mathbb{R}^{n\times k} Y=X^VRn×k

原理

最大方差理论

信号处理中认为信号具有较大的方差,噪声有较小的方差
因此我们认为,最好的 k k k维特征是将样本转换为 k k k维后,每一维上的样本方差都很大

X ^ \hat{\mathbf{X}} X^为减去均值后的数据集
先从 k = 1 k=1 k=1开始,不妨假设投影到 u \mathbf{u} u,投影后为 X ^ u \hat{\mathbf{X}}\mathbf{u} X^u
投影之后的均值依然为 0 0 0,( e T X ^ = 0 ⇒ e T ( X ^ u ) = 0 \mathbf{e}^T\hat{\mathbf{X}}=0\Rightarrow \mathbf{e}^T\left(\hat{\mathbf{X}}\mathbf{u}\right)=0 eTX^=0eT(X^u)=0

则方差
arg ⁡ max ⁡ ∥ u ∥ = 1 S 2 = 1 n − 1 arg ⁡ max ⁡ ∥ u ∥ = 1 u T X ^ T X ^ u = arg ⁡ max ⁡ ∥ u ∥ = 1 u T c o v ( X ^ ) u \begin{aligned} \arg\max_{\|\mathbf{u}\|=1} S^2 &= \frac{1}{n-1}\arg\max_{\|\mathbf{u}\|=1}\mathbf{u}^T\hat{\mathbf{X}}^T\hat{\mathbf{X}}\mathbf{u}\\ &=\arg\max_{\|\mathbf{u}\|=1}\mathbf{u}^Tcov\left(\hat{\mathbf{X}}\right)\mathbf{u}\\ \end{aligned} argu=1maxS2=n11argu=1maxuTX^TX^u=argu=1maxuTcov(X^)u
熟悉的话就知道这个是瑞利商,不熟悉可以用拉格朗日乘数法,或者特征值分解
最后得到 u \mathbf{u} u X ^ T X ^ \hat{\mathbf{X}}^T\hat{\mathbf{X}} X^TX^的最大特征值对应的特征向量

为了方便,设刚刚得到的 u \mathbf{u} u u 1 \mathbf{u}_1 u1
现在需要找 u 2 \mathbf{u}_2 u2,使得投影后方差最大,并且 u 2 \mathbf{u}_2 u2 u 1 \mathbf{u}_1 u1正交
arg ⁡ max ⁡ ∥ u 2 ∥ = 1 u 1 T u 2 = 1 u 2 T c o v ( X ^ ) u 2 \arg\max_{\|\mathbf{u}_2\|=1 \atop \mathbf{u}_1^T\mathbf{u}_2=1}\mathbf{u}_2^Tcov\left(\hat{\mathbf{X}}\right)\mathbf{u}_2 argu1Tu2=1u2=1maxu2Tcov(X^)u2
构造拉格朗日函数
L ( u 2 , λ , μ ) = u 2 T c o v ( X ^ ) u 2 − λ ( u 2 T u 2 − 1 ) − μ u 1 T u 2 L\left(\mathbf{u}_2, \lambda, \mu\right)=\mathbf{u}_2^Tcov\left(\hat{\mathbf{X}}\right)\mathbf{u}_2-\lambda\left(\mathbf{u}_2^T\mathbf{u}_2-1\right)-\mu\mathbf{u}_1^T\mathbf{u}_2 L(u2,λ,μ)=u2Tcov(X^)u2λ(u2Tu21)μu1Tu2
求偏导
∂ L ∂ u 2 = 2 c o v ( X ^ ) u 2 − 2 λ u 2 − μ u 1 = 0 \frac{\partial L}{\partial\mathbf{u}_2}=2cov\left(\hat{\mathbf{X}}\right)\mathbf{u}_2-2\lambda\mathbf{u}_2-\mu\mathbf{u}_1=0 u2L=2cov(X^)u22λu2μu1=0
注意到 c o v ( X ^ ) u 1 = λ 1 u 1 cov\left(\hat{\mathbf{X}}\right)\mathbf{u}_1=\lambda_1 \mathbf{u}_1 cov(X^)u1=λ1u1,并且协方差矩阵是个对称矩阵,有
2 u 1 T c o v ( X ^ ) u 2 − 2 u 1 T u 2 − μ u 1 T u 1 = 2 λ 1 u 1 T u 2 − 0 − μ = μ = 0 \begin{aligned} &2\mathbf{u}_1^Tcov\left(\hat{\mathbf{X}}\right)\mathbf{u}_2-2\mathbf{u}_1^T\mathbf{u}_2-\mu\mathbf{u}_1^T\mathbf{u}_1\\ =& 2\lambda_1\mathbf{u}_1^T\mathbf{u}_2-0-\mu\\ =&\mu\\ =&0 \end{aligned} ===2u1Tcov(X^)u22u1Tu2μu1Tu12λ1u1Tu20μμ0
于是
c o v ( X ^ ) u 2 = λ u 2 cov\left(\hat{\mathbf{X}}\right)\mathbf{u}_2=\lambda\mathbf{u}_2 cov(X^)u2=λu2
可以得到 u 2 \mathbf{u}_2 u2 c o v ( X ^ ) cov\left(\hat{\mathbf{X}}\right) cov(X^)第二大特征值对应的特征向量

后面以此类推

https://towardsdatascience.com/principal-component-analysis-part-1-the-different-formulations-6508f63a5553
https://www.askpython.com/python/examples/principal-component-analysis
https://bagheri365.github.io/blog/Principal-Component-Analysis-from-Scratch/
https://www.python-engineer.com/courses/mlfromscratch/11_pca/
http://blog.codinglabs.org/articles/pca-tutorial.html

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

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

相关文章

[架构之路-178]-《软考-系统分析师》- 分区操作系统(Partition Operating System)概述

目录: 本文概述: 1.1 什么是分区操作系统 1.2 分区操作系统出现背景 1. 前后台系统(Foreground/Background System) 2. 实时操作系统(RTOS) 本文概述: 随着嵌入式系统日趋复杂化以及对安全性要求的不断提高,采用空间隔离、时…

java学习之枚举二

目录 一、enum关键字实现枚举 二、注意事项 一、对Season2进行反编译(javap) ​编辑 三、练习题 第一题 第二题 一、enum关键字实现枚举 package enum_;public class Enumeration03 {public static void main(String[] args) {System.out.println…

el-upload组件的文件回显功能和添加文件到elupload组件

省流: 先获取这个文件对象,使用handleStart方法添加到组件。 this.$refs.uploadRefName.handleStart(rawfile); 在开发的时候遇到表单里需要上传图片的功能。看了下el-upload组件的使用方法,在修改表单的时候,el-upload组件的回显…

flutter学习之旅(二)

如果不知道怎么安装编写可以查看这篇 创建项目 另一个创建方法 flutter create 项目名热部署 vscode 热部署 vscode很简单:可以通过Debug进行调试 使用flutter查看设备 flutter devices如图所见我现在用的是windows所以,我们检测不到ios因为 我们看…

【Fluent】边界类型总结,什么时候用壁面对(wall-shadow pair)、什么时候用interface?

一、fluent自动生成边界类型的规律 Enclosure是包裹在外面的气体(流体),mold是模具(固体),sheet是模具上的薄板件(固体)。 1.1 正向思维 不管是流体域还是固体域,每一…

高度可定制可用于商用目的全流程供应链系统(全部源码)

一、开源项目简介 高度可定制零售供应链中台基础系统,集成零售管理, 电子商务, 供应链管理, 财务管理, 车队管理, 仓库管理, 人员管理, 产品管理, 订单管理, 会员管理, 连锁店管理, 加盟管理, 前端React/Ant Design, 后端Java Spring自有开源框架,全面支…

软件测试之黑盒测试的具体方法详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一.基于需求的设计方法二.等价类三.边界值四.判定表4.1 **关系**4.2 如何设计测试用例4.3 实际案例第一步第二步第三步第四步 五.正交排列5.1 什么是正交表5.2 …

shell脚本的判断式

文章目录 shell脚本的判断式利用test命令的测试功能关于某个文件名的【文件类型】判断关于文件的权限检测两个文件之间的比较关于两个整数之间的比较判定字符串的数据多重条件判定例题 利用判断符号[ ]例题 shell脚本的默认变量($0、$1...)例题shift:造成参数变量号…

Linux安装Mysql操作步骤详解

目录 1. 检测当前系统中是否安装了MySql数据库 2. 使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux 3. 解压并解包到/usr/local/mysql(便于区分) 第一步:将包先移动到该目录下 第二步:解压解包 第三步&#xff1a…

LeetCode 105.106. 从前序|后序与中序遍历序列构造二叉树 | C++语言版

LeetCode 105. 从前序与中序遍历序列构造二叉树 | C语言版 LeetCode 105. 从前序与中序遍历序列构造二叉树题目描述解题思路思路一:使用递归代码实现运行结果参考文章: 思路二:减少遍历节点数代码实现运行结果参考文章: LeetCode …

C语言复习笔记1

1.不同数据类型所占字节数。 bit 01二进制的比特位 byte 字节 8 bit 比特 之后的单位都是以1024为倍数 #include<stdio.h> #include<unistd.h>int main() {printf("sizeof(char)%d\n",sizeof(char));printf("sizeof(short)%d\n",sizeof(sh…

JavaScript 笔记

1 简介 JavaScript 诞生于1995年&#xff0c;是由网景公司发明&#xff0c;起初命名为LiveScript&#xff0c;后来由于SUN公司的介入&#xff0c;更名为 JavaScript。1996年微软在其最新的IE3浏览器中引入了自己对JavaScript的实现JScript&#xff0c;于是市面上就存在两个版本…

Mybatis 框架 ( 三 ) Mybatis-Plus

4.Mybatis-plus 官网 : https://www.baomidou.com/ MyBatis-Plus 是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上封装了大量常规操作&#xff0c;减少了SQL的编写量。 4.1.Maven依赖 使用时通常通过Springboot框架整合使用 并且使用Lombok框架简化实体类 <…

软件测试——基础篇(软件测试的生命周期和BUG的概念)

目录 一、软件测试生命周期 1. 软件生命周期 2. 软件测试生命周期 二、BUG 1. 如何描述一个BUG 2. BUG的级别 3. BUG的生命周期 一、软件测试生命周期 1. 软件生命周期 软件生命周期&#xff1a;需求分析&#xff0c;计划&#xff0c;设计&#xff0c;编码&#xff0c;…

20 printf 的调试

前言 在最开始的 cmd 编程中, 我们会使用到的最常见的输出, 包括一些时候调试的时候 我们最常使用到的函数 那肯定是 printf 了 我们这里来调试一下 这个 printf 还有一个原因是 之前在调试 malloc 的时候, malloc 虚拟内存分配的调试(1) 可以发现, 不仅仅是在 malloc 的时…

Codeforces Round 865 (Div. 2)

6 problems. ABC过, DE没想出来, F没看. https://codeforces.com/contest/1816 A. Ian Visits Mary 分析 - AC 每次跳跃&#xff0c;横纵互质。 限于数据量&#xff0c;不能枚举。 1与任何数互质。考虑从(0,0)跳到(1,y)&#xff0c;这一步一定合法&#xff1b;再从(1,y)跳到…

Netty小白入门教程

一、概述 1.1 概念 Netty是一个异步的基于事件驱动(即多路复用技术)的网络应用框架&#xff0c;用于快速开发可维护、高性能的网络服务器和客户端。 1.2 地位 Netty在Java网络应用框架中的地位就好比&#xff0c;Spring框架在JavaEE开发中的地位。 以下的框架都使用了Nett…

C++017-C++文件读写应用

文章目录 C017-C文件读写应用C文件读写应用CSP-J目标1. 文件的基本概念、文本文件的基本操作关闭文件 文件操作-写入文本文件2.文件读写操作基本案例seekg() 和 tellg() 函数来读取文件中的数据 2. 文本文件类型与二进制文件类型3. 文件重定向、文件读写等操作 在练习&#xff…

56.网页设计规则#4_图标

使用好的图标 使用一个好的图标包&#xff0c;有大量的免费和付费图标包 图标工具推荐&#xff1a; ● Phosphor icons ● ionicons ● ICONS8 只使用一个图标包。不要混合不同图标包中的图标 使用SVG图标或图标字体。不要使用位图图像格式(.jpg and .png)! 调整网站个性!圆…

Android 中的跨进程数据块传递

Android 的 Binder 进程间通信机制主要用于实现远程过程调用 RPC&#xff0c;Android 系统中进程之间的大块数据传递&#xff0c;如音频数据&#xff0c;出于效率等原因&#xff0c;一般不直接用 Binder 机制。Binder 库提供了基于共享内存外加 Binder 机制的跨进程文件描述符传…