主成分分析学习笔记

news2024/10/5 15:30:05

概述

  • 主成分分析(Principal Component Analysis)是一种常见的数据分析方式,常用于高维数据的降维,提取数据的主要特征分量,其数学推导可以从最大可分性最近重构性两个角度着手,前者的优化条件为划分后方差最大,后者的优化条件为点到划分平面距离最小,此处将从最大可分性的角度进行证明。

前置知识——线性代数

向量表示和基变换

内积

  • 假设有如下两个向量, A = [ a 1 , a 2 , . . , a n ] A=[a_1,a_2,..,a_n] A=[a1,a2,..,an] B = [ b 1 , b 2 , . . , b n ] B=[b_1,b_2,..,b_n] B=[b1,b2,..,bn],那么两个向量的内积为 A B T = [ a 1 , a 2 , . . , a n ] ∗ [ b 1 , b 2 , . . , b n ] T = a 1 b 1 + a 2 b 2 + . . . + a n b n = ∣ A ∣ ∣ B ∣ c o s θ \begin{align*} AB^T &= [a_1,a_2,..,a_n]*[b_1,b_2,..,b_n]^T \\ &= a_1b_1+a_2b_2+...+a_nb_n \\ &= |A||B|cos\theta \end{align*} ABT=[a1,a2,..,an][b1,b2,..,bn]T=a1b1+a2b2+...+anbn=A∣∣Bcosθ
    其中 θ = A ⃗ ⋅ B ⃗ ∣ A ∣ ∣ B ∣ \theta=\frac{\vec{A}\cdot \vec{B}}{|A||B|} θ=A∣∣BA B
  • 其几何表示为
    在这里插入图片描述- 由此,我们可以看出A 与 B 的内积等于 A 到 B 的投影长度乘以 B 的模,当B为单位向量时,则 A ⋅ B = ∣ A ∣ c o s θ A\cdot B=|A|cos\theta AB=Acosθ 此时,A 与 B 的内积值等于 A 向 B 所在直线投影的标量大小

基变换

  • 我们常说的平面直角坐标系,实际上是由 ( 1 , 0 ) , ( 0 , 1 ) (1,0),(0,1) (1,0),(0,1)这组基确定的一个二维向量空间,例如向量 A = ( 3 , 2 ) A=(3,2) A=(3,2)实际是指一个在 x 轴投影为 3 ,而 y 轴的投影为 2的向量。

  • 对于 A = ( 3 , 2 ) A=(3,2) A=(3,2)来说,如果我们想求它在 ( 1 , 0 ) , ( 0 , 1 ) (1,0),(0,1) (1,0),(0,1)这组基下的坐标的话,分别内积即可,我们可以用矩阵乘法来简洁的表示这一过程 ( 3 2 ) ⋅ ( 1 0 0 1 ) = ( 3 2 ) \begin{equation*} %开始数学环境 \left( %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 3 & 2\\ %第一行元素 \end{array} \right) %右括号 \end{equation*}\cdot \begin{equation*} %开始数学环境 \left( %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 1 & 0\\ %第一行元素 0 & 1 \\ %第二行元素 \end{array} \right) %右括号 \end{equation*}=\begin{equation*} %开始数学环境 \left( %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 3 & 2\\ %第一行元素 \end{array} \right) %右括号 \end{equation*} (32)(1001)=(32)
    此处将 ( 3 , 2 ) (3,2) (3,2) ( 1 , 0 ) , ( 0 , 1 ) (1,0),(0,1) (1,0),(0,1)做内积实质上是分别将其投影到两个基上。并且此处的运算结果仍然是 ( 3 , 2 ) (3,2) (3,2),这是因为 ( 1 , 0 ) , ( 0 , 1 ) (1,0),(0,1) (1,0),(0,1)是一组标准的正交基,并且 ( 3 , 2 ) (3,2) (3,2)本身已经在 ( 1 , 0 ) , ( 0 , 1 ) (1,0),(0,1) (1,0),(0,1)确定的线性空间内,因此做了投影之后得到的向量仍然是它本身。

    我们也可以使用标准正交基以外的各种基,但这组基必须是线性无关的。通过类似的矩阵乘法运算,我们可以将左边矩阵的每一个行向量都变换到以右矩阵所有列向量为基的线性空间内,因此一个矩阵可以表示为一种线性变换。

  • 所以,我们大致可以得到一个结论,我们要准确描述向量,首先要确定一组基,然后给出在基所在的各个直线上的投影值。为了方便求坐标,我们希望这组基向量模长为 1。因为向量的内积运算,当模长为 1 时,内积可以直接表示投影。然后还需要这组基是线性无关的,我们一般用正交基,非正交的基也是可以的,不过正交基有较好的性质。

从最大可分性角度证明

  • 上面我们讨论了选择不同的基可以对同样一组数据给出不同的表示,如果基的数量少于向量本身的维数,则可以达到降维的效果。但是我们还没回答一个最关键的问题:如何选择基才是最优的? 或者说,如果我们有一组 N 维向量,现在要将其降到 K 维 ( K < N ) (K < N) (K<N),那么我们应该如何选择 K 个基才能最大程度保留原有的信息?
  • 一种直观的看法是:希望投影后的投影值尽可能分散,因为如果重叠就会有样本消失。当然这个也可以从熵的角度进行理解,熵越大所含信息越多。

方差

  • 我们知道数值的分散程度,可以用数学上的方差来表述。在一维空间中,一个变量的方差可以看做是每个元素与变量均值的差的平方和的均值,即: V a r ( a ) = 1 m ∑ i = 1 m ( a i − μ ) 2 Var(a)=\frac{1}{m}\sum^{m}_{i=1}{(a_i-\mu)^2} Var(a)=m1i=1m(aiμ)2为了方便处理,我们将每个变量的均值都化为 0 ,因此方差可以直接用每个元素的平方和除以元素个数表示: V a r ( a ) = 1 m ∑ i = 1 m a i 2 Var(a)=\frac{1}{m}\sum^{m}_{i=1}{a_i^2} Var(a)=m1i=1mai2于是上面的问题被形式化表述为:寻找一个一维基,使得所有数据变换为这个基上的坐标表示后,方差值最大

协方差

  • 在一维空间中我们可以用方差来表示数据的分散程度。而对于高维数据,我们用协方差进行约束,协方差可以表示两个变量的相关性。为了让两个变量尽可能表示更多的原始信息,我们希望它们之间不存在线性相关性,因为相关性意味着两个变量不是完全独立,必然存在重复表示的信息。
  • 协方差可由如下公式计算 C o v ( a , b ) = 1 m − 1 ∑ i = 1 m ( a i − μ a ) ( b i − μ b ) Cov(a,b)=\frac{1}{m-1}\sum^{m}_{i=1}(a_i-\mu_a)(b_i-\mu_b) Cov(a,b)=m11i=1m(aiμa)(biμb)为了简单起见,我们仍设置 μ a = μ b = 0 \mu_a=\mu_b=0 μa=μb=0,同时,当样本数较大时,不必在意其是 m m m 还是 m − 1 m-1 m1,为了方便计算,我们分母取 m m m,因此 C o v ( a , b ) = 1 m ∑ i = 1 m a i b i Cov(a,b)=\frac{1}{m}\sum^{m}_{i=1}a_ib_i Cov(a,b)=m1i=1maibi
  • 当协方差为 0 时,表示两个变量不存在线性相关性(非线性相关性未知,因此不能说两个变量相互独立)。为了让协方差为 0,我们选择第二个基时只能在与第一个基正交的方向上进行选择,因此最终选择的两个方向一定是正交的。
  • 至此,我们得到了降维问题的优化目标:将一组 N 维向量降为 K 维,其目标是选择 K 个单位正交基,使得原始数据变换到这组基上后,各变量两两间协方差为 0,而变量方差则尽可能大(在正交的约束下,取最大的 K 个方差)。

协方差矩阵

  • 假设我们只有 a a a b b b 两个变量,服从均值为 0 的高斯分布,我们将它们按列组成矩阵 X X X(每一列看作一个变量的不同取值,每个变量我们可以看作是样本的一个特征),那么 X = ( a 1 b 1 a 2 b 2 ⋮ ⋮ a n b n ) X=\begin{equation*} %开始数学环境 \left( %左括号 \begin{array}{ccc} %该矩阵一共3列,每一列都居中放置 a_1 & b_1\\ %第一行元素 a_2 & b_2\\ \vdots & \vdots\\ a_n & b_n\\ \end{array} \right) %右括号 \end{equation*} X= a1a2anb1b2bn
  • 然后,我们通过矩阵内积,求得协方差矩阵
    1 m X T X = ( 1 m ∑ i = 1 m a i 2 1 m ∑ i = 1 m a i b i 1 m ∑ i = 1 m a i b i 1 m ∑ i = 1 m b i 2 ) = ( C o v ( a , a ) C o v ( a , b ) C o v ( b , a ) C o v ( b , b ) ) \begin{align*} \frac{1}{m}X^TX &=\begin{equation*} %开始数学环境 \left( %左括号 \begin{array}{ccc} \frac{1}{m}\sum^{m}_{i=1}{a_i^2} & \frac{1}{m}\sum^{m}_{i=1}a_ib_i\\ \\ \frac{1}{m}\sum^{m}_{i=1}a_ib_i & \frac{1}{m}\sum^{m}_{i=1}{b_i^2}\\ \end{array} \right) %右括号 \end{equation*} \\ \\ &= \begin{equation*} %开始数学环境 \left( %左括号 \begin{array}{ccc} Cov(a,a) & Cov(a,b) \\ \\ Cov(b,a)& Cov(b,b)\\ \end{array} \right) %右括号 \end{equation*} \\ \end{align*} m1XTX= m1i=1mai2m1i=1maibim1i=1maibim1i=1mbi2 = Cov(a,a)Cov(b,a)Cov(a,b)Cov(b,b)
  • 我们可以看到这个矩阵对角线上的分别是两个变量的方差,而其它元素是 a 和 b 的协方差,两者被统一到了一个矩阵里。
  • 我们很容易推广到一般情况:设我们有 m 个 n 维数据记录,将其排列成矩阵 X m , n X_{m,n} Xm,n,设 C = 1 m X T X C=\frac{1}{m}X^TX C=m1XTX,则 C C C 是一个对称矩阵,其对角线分别对应各个变量的方差,而第 i i i j j j 列和 j j j i i i 列元素相同,表示 i i i j j j 两个变量的协方差。

矩阵对角化

  • 根据我们的优化条件,我们需要将除对角线外的其它元素化为 0最小化变量之间的线性相关性),并且将对角线上元素按大小从上到下排列方便选取前k个方差最大的变量),这样我们就达到了优化目的。
  • 下面,我们进一步探讨原矩阵与其基变换后得到的矩阵它们的协方差矩阵之间的关系
    • 设原矩阵为 X X X ,原矩阵对应的协方差矩阵为 C C C P P P 为一组基按列组成的矩阵,设 Y = X P Y=XP Y=XP,则 Y Y Y X X X P P P 做基变换后得到的矩阵,设 Y Y Y 的协方差矩阵为 D D D ,则 D D D C C C 之间的关系为 D = 1 m Y T Y = 1 m ( X P ) T ( X P ) = 1 m P T X T X P = P T 1 m ( X T X ) P = P T C P \begin{align*} D &= \frac{1}{m}Y^TY \\ &= \frac{1}{m}(XP)^T(XP)\\ &= \frac{1}{m}P^TX^TXP\\ &= P^T\frac{1}{m}(X^TX)P\\ &= P^TCP \end{align*} D=m1YTY=m1(XP)T(XP)=m1PTXTXP=PTm1(XTX)P=PTCP因此,二者协方差矩阵之间的关系就是 D = P T C P D=P^TCP D=PTCP
  • 这样我们就看清楚了,我们要找的 P P P 是能让原始协方差矩阵 C C C 对角化的 P P P。换句话说,优化目标变成了寻找一个矩阵 P P P,使得 D D D 是一个对角矩阵,并且对角元素按从大到小依次排列,那么 P P P 的前 K K K 列就是要寻找的基,用 X X X P P P 的前 K K K 列组成的矩阵就使得 X X X N N N 维降到了 K K K 维。
  • 那么如何寻找到这样的 P P P 呢?
    • 由上文知道,协方差矩阵 C C C 是一个是对称矩阵,在线性代数中实对称矩阵有一系列非常好的性质,具体来讲,每个实对称矩阵都可以分解成实特征向量和实特征值 A = Q Λ Q T A=Q\Lambda Q^T A=QΛQT其中 Q Q Q A A A 的特征向量组成的正交矩阵(正交矩阵的列向量一定是线性无关的), Λ \Lambda Λ对角矩阵,特征值 Λ i , i \Lambda_{i,i} Λi,i 对应的特征向量是矩阵 Q Q Q 的第 i i i 列,记作 Q : , i Q_{:,i} Q:,i,因为 Q Q Q 是正交矩阵,所以 A A A 可以看作是沿着 Q : , i Q_{:,i} Q:,i 方向延展了 Λ i , i \Lambda_{i,i} Λi,i 倍的空间。
    • 因此,一个 n n n n n n 列的实对称矩阵一定可以找到 n n n 个单位正交特征向量,我们将协方差矩阵 C C C 做特征分解,可以得到
      C = Q Λ Q T C=Q\Lambda Q^T C=QΛQT
      因为Q是正交矩阵,所以有 Q − 1 = Q T Q^{-1}=Q^T Q1=QT,因此上式可化为 Λ = Q T C Q \Lambda=Q^TCQ Λ=QTCQ
      此时 Λ \Lambda Λ 恰好为一个对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复,因为一个 r r r 重的特征值对应着 r r r 个线性无关的特征向量)。
  • 至此,我们就找到了这样的 P : P = Q P: P=Q P:P=Q
  • 实现对角元素按从大到小依次排列也很简单,只需要同时将特征值和特征向量从大到小排列即可,则用 P P P 的前 K K K 行组成的矩阵便是我们所求的一组基。

从最近重构性角度证明

pass

Reference

  • https://zhuanlan.zhihu.com/p/77151308

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

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

相关文章

MySQL-NoSQL整体笔记---持续输出中

MySQL部分 一、搭建 MySQL 数据库服务器 1、下载并上传glibc版本的Mysql 2、新建用户以安全方式运行进程 [roottemplate ~]# groupadd -r -g 306 mysql [roottemplate ~]# useradd -g 306 -r -u 306 mysql3、安装并初始化mysql [roottemplate ~]# tar xf mysql-5.7.36-linu…

【Azure Developer】使用 Microsoft Graph API 获取 AAD User 操作示例

问题解答 使用Microsoft Graph API&#xff0c;演示如何获取AAD User信息&#xff0c;因参考文档是针对Global Azure&#xff0c;所以文档种的URL为&#xff1a; // Global Azure Microsoft Graph API Host GET https://graph.microsoft.com/v1.0/me 需要修改为 // 中国区A…

iperf 安装与使用

iperf命令是一个网络性能测试工具&#xff0c;可以测试TCP和UDP带宽质量。同时也可以通过UDP测试报告网丢包率或者发包性能&#xff0c;是一个非常实用的工具 1.windwos安装 可以直接通过官网下载对应系统版本进行安装&#xff08;https://iperf.fr/iperf-download.php&#…

无涯教程-Perl - each函数

描述 在列表context中调用此函数时,将返回一个由2个元素组成的列表,该列表由哈希的下一个元素的键和值组成,以便您可以对其进行迭代。在标量context中调用时,仅返回哈希中下一个元素的键。 语法 以下是此函数的简单语法- each HASH返回值 在列表context中调用此函数时,将返…

红帽认证前景如何,有什么优势?

红帽Linux认证优势: RedHat是全球最大的开源技术厂家&#xff0c;是世界领先的开源解决方案供应商&#xff0c;其产品RedHat Enterprise Linux&#xff08;红帽企业级 Linux&#xff09;也是全世界应用最广泛的Linux。 作为检验Linux技能的黄金标准&#xff0c; RHCE认证项目已…

农商行基于分类分级的数据安全管控建设实践

《数据安全法》颁布实施以来&#xff0c;以分类分级为基础&#xff0c;对数据进行差异化管理和防护&#xff0c;成为行业共识。 金融行业作为数据密集的高地&#xff0c;安全是重中之重&#xff0c;而鉴于金融数据种类和内容庞杂&#xff0c;面临规模化用数、普惠用数、跨机构共…

Selenium自动化测试之学会元素定位

这是我经常被问到的一个问题&#xff0c;也是我很讨厌回答的问题&#xff0c;因为要想回答这个问题需要知道上下文。什么样式的元素&#xff0c;有哪些属性&#xff0c;是否有表单嵌套&#xff0c;都尝试了哪些定位方法。。。而且没几个提问者能事先详细的说明这些。哪儿像提bu…

[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序

1.今天开发了一套服务程序&#xff0c;使用的是Odbc连接MySql数据库&#xff0c; 在我本机用VS打开程序时&#xff0c;访问一切正常&#xff0c;当发布出来装在电脑上&#xff0c;连接数据库时提示&#xff1a; [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定…

Python Opencv实践 - 基本图像IO操作

import numpy as np import cv2 as cv import matplotlib.pyplot as plt#读取图像 #cv2.IMREAD_COLOR&#xff1a; 读取彩色图像&#xff0c;忽略alpha通道&#xff0c;也可以直接写1 #cv2.IMREAD_GRAYSCALE: 读取灰度图&#xff0c;也可以直接写0 #cv2.IMREAD_UNCHANGED: 读取…

跨平台开发框架Qt:面向对象、丰富API

Qt是一个跨平台C图形用户界面应用程序开发框架&#xff0c;它具有以下三大优势&#xff1a; 优良的跨平台特性&#xff1a;Qt支持多种操作系统&#xff0c;包括Windows、Linux、Solaris、HP-UX、Irix、FreeBSD等&#xff0c;使开发人员能够在不同平台上开发和部署应用程序&…

如何在业务中体现TCC事务模型?

在分布式系统设计中&#xff0c;随着微服务的流行&#xff0c;通常一个业务操作被拆分为多个子任务&#xff0c;比如电商系统的下单和支付操作&#xff0c;就涉及到了创建和更新订单、扣减账户余额、扣减库存、发送物流消息等&#xff0c;那么在复杂业务开发中&#xff0c;如何…

【多重信号分类】超分辨率测向方法——依赖于将观测空间分解为噪声子空间和源/信号子空间的方法具有高分辨率(HR)并产生准确的估计(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ApplicationContent 和BeanFactory的关系

选中这个类&#xff0c; ctrl alt u 从springboot的启动类说起 我们知道这个启动类返回值呢是哟个configurableApplicationContent 类型 我们查看她的类图 从图中我们可以看出&#xff0c;configurableApplicationContent是见解的继承了BeanFactory接口&#xff0c;扩展了他…

Centos7克隆快速复制多台虚拟机|互通互联

背景&#xff1a;有时候&#xff0c;我们在用虚拟机的时候会用到多个进行使用。重新安装会花费大量的时间&#xff0c;此时&#xff0c;我们可以通过vmware虚拟机自带的功能快速克隆出完全相同的系统。 前提&#xff1a;被克隆的虚拟机系统要处于关闭状态 步骤&#xff1a;…

elevation mapping学习笔记2之高程图输入、输出、服务和参数配置的定义和说明

文章目录 0 引言1 话题Topics1.1 订阅subscribe1.2 发布publish 2 服务Services3 参数Parameters 0 引言 elevation mapping学习笔记1已经成功编译安装elevation mapping高程图工程&#xff0c;并运行示例turtlesim3_waffle_demo&#xff0c;在仿真环境下&#xff0c;控制带有…

九、ESP32控制1602LCD屏幕显示内容

1. 运行效果 2. 1602简介 1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字) 市面上字符液晶大多数是基于HD44780液晶芯片的 需要8根数据线来传输要显示的数据,当然还

每天一道leetcode:剑指 Offer 04. 二维数组中的查找(中等二分查找)

今日份题目&#xff1a; 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右 非递减 的顺序排序&#xff0c;每一列都按照从上到下 非递减 的顺序排序。请完成一个高效的函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。 示…

EP4CE6E22C8 FPGA最小系统电路原理图+PCB源文件

资料下载地址&#xff1a;EP4CE6E22C8 FPGA最小系统电路原理图PCB源文件 一、原理图 二、PCB

Windows 安装Tensorflow2.1、Pycharm开发环境

文章目录 1、安装anaconda2、安装Tensoflow2.1、创建虚拟环境2.2、安装Tensorflow依赖2.3、验证Tensorflow是否成功 3、配置pycharm环境4、错误记录 1、安装anaconda https://www.anaconda.com/download 打开命令行工具&#xff0c;出现base就表示安装成功了&#xff0c;表示当…

SQL-每日一题【1204. 最后一个能进入巴士的人】

题目 表: Queue 有一队乘客在等着上巴士。然而&#xff0c;巴士有1000 千克 的重量限制&#xff0c;所以其中一部分乘客可能无法上巴士。 写一条 SQL 查询语句找出 最后一个 上巴士且不超过重量限制的乘客&#xff0c;并报告 person_name 。题目测试用例确保顺位第一的人可以…