《统计学习方法》 第十六章 主成分分析PCA

news2025/1/20 17:08:15

主成分分析(PCA)

假设 x x x m m m 维随机变量,其均值为 μ \mu μ,协方差矩阵为 Σ \Sigma Σ

考虑由 m m m维随机变量 x x x m m m维随机变量 y y y的线性变换

y i = α i T x = ∑ k = 1 m α k i x k , i = 1 , 2 , ⋯   , m y _ { i } = \alpha _ { i } ^ { T } x = \sum _ { k = 1 } ^ { m } \alpha _ { k i } x _ { k } , \quad i = 1,2 , \cdots , m yi=αiTx=k=1mαkixk,i=1,2,,m

其中 α i T = ( α 1 i , α 2 i , ⋯   , α m i ) \alpha _ { i } ^ { T } = ( \alpha _ { 1 i } , \alpha _ { 2 i } , \cdots , \alpha _ { m i } ) αiT=(α1i,α2i,,αmi)

如果该线性变换满足以下条件,则称之为总体主成分:

α i T α i = 1 , i = 1 , 2 , ⋯   , m \alpha _ { i } ^ { T } \alpha _ { i } = 1 , i = 1,2 , \cdots , m αiTαi=1,i=1,2,,m

cov ⁡ ( y i , y j ) = 0 ( i ≠ j ) \operatorname { cov } ( y _ { i } , y _ { j } ) = 0 ( i \neq j ) cov(yi,yj)=0(i=j);

变量 y 1 y_1 y1 x x x的所有线性变换中方差最大的

y 2 y_2 y2是与 y 1 y_1 y1不相关的 x x x的所有线性变换中方差最大的

一般地, y i y_i yi是与 y 1 , y 2 , ⋯   , y i − 1 , ( i = 1 , 2 , ⋯   , m ) y _ { 1 } , y _ { 2 } , \cdots , y _ { i - 1 } , ( i = 1,2 , \cdots , m ) y1,y2,,yi1,(i=1,2,,m)都不相关的 x x x的所有线性变换中方差最大的

这时分别称 y 1 , y 2 , ⋯   , y m y _ { 1 } , y _ { 2 } , \cdots , y _ { m } y1,y2,,ym x x x的第一主成分、第二主成分、…、第 m m m主成分


假设 x x x m m m维随机变量

其协方差矩阵是 Σ \Sigma Σ

Σ \Sigma Σ的特征值分别是 λ 1 ≥ λ 2 ≥ ⋯ ≥ λ m ≥ 0 \lambda _ { 1 } \geq\lambda _ { 2 } \geq \cdots \geq \lambda _ { m } \geq 0 λ1λ2λm0

特征值对应的单位特征向量分别是 α 1 , α 2 , ⋯   , α m \alpha _ { 1 } , \alpha _ { 2 } , \cdots , \alpha _ { m } α1,α2,,αm,则 x x x的第2主成分可以写作

y i = α i T x = ∑ k = 1 m α k i x k , i = 1 , 2 , ⋯   , m y _ { i } = \alpha _ { i } ^ { T } x = \sum _ { k = 1 } ^ { m } \alpha _ { k i } x _ { k } , \quad i = 1,2 , \cdots , m yi=αiTx=k=1mαkixk,i=1,2,,m

并且, x x x的第 i i i主成分的方差是协方差矩阵 Σ \Sigma Σ的第 i i i个特征值,即 var ⁡ ( y i ) = α i T Σ α i = λ i \operatorname { var } ( y _ { i } ) = \alpha _ { i } ^ { T } \Sigma \alpha _ { i } = \lambda _ { i } var(yi)=αiTΣαi=λi


主成分有以下性质:

主成分 y y y的协方差矩阵是对角矩阵 cov ⁡ ( y ) = Λ = diag ⁡ ( λ 1 , λ 2 , ⋯   , λ m ) \operatorname { cov } ( y ) = \Lambda = \operatorname { diag } ( \lambda _ { 1 } , \lambda _ { 2 } , \cdots , \lambda _ { m } ) cov(y)=Λ=diag(λ1,λ2,,λm)

主成分 y y y的方差之和等于随机变量 x x x的方差之和

∑ i = 1 m λ i = ∑ i = 1 m σ i i \sum _ { i = 1 } ^ { m } \lambda _ { i } = \sum _ { i = 1 } ^ { m } \sigma _ { i i } i=1mλi=i=1mσii

其中 σ i i \sigma _ { i i } σii x 2 x_2 x2的方差,即协方差矩阵 Σ \Sigma Σ的对角线元素

主成分 y k y_k yk与变量 x 2 x_2 x2的相关系数 ρ ( y k , x i ) \rho ( y _ { k } , x _ { i } ) ρ(yk,xi)称为因子负荷量(factor loading)

它表示第 k k k个主成分 y k y_k yk与变量 x x x的相关关系,即 y k y_k yk x x x的贡献程度

ρ ( y k , x i ) = λ k α i k σ i i , k , i = 1 , 2 , ⋯   , m \rho ( y _ { k } , x _ { i } ) = \frac { \sqrt { \lambda _ { k } } \alpha _ { i k } } { \sqrt { \sigma _ { i i } } } , \quad k , i = 1,2 , \cdots , m ρ(yk,xi)=σii λk αik,k,i=1,2,,m


样本主成分分析就是基于样本协方差矩阵的主成分分析

给定样本矩阵

X = [ x 1 x 2 ⋯ x n ] = [ x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋮ ⋮ ⋮ x m 1 x m 2 ⋯ x m n ] X = \left[ \begin{array} { l l l l } { x _ { 1 } } & { x _ { 2 } } & { \cdots } & { x _ { n } } \end{array} \right] = \left[ \begin{array} { c c c c } { x _ { 11 } } & { x _ { 12 } } & { \cdots } & { x _ { 1 n } } \\\\ { x _ { 21 } } & { x _ { 22 } } & { \cdots } & { x _ { 2 n } } \\\\ { \vdots } & { \vdots } & { } & { \vdots } \\\\ { x _ { m 1 } } & { x _ { m 2 } } & { \cdots } & { x _ { m n } } \end{array} \right] X=[x1x2xn]=x11x21xm1x12x22xm2x1nx2nxmn

其中 x j = ( x 1 j , x 2 j , ⋯   , x m j ) T x _ { j } = ( x _ { 1 j } , x _ { 2 j } , \cdots , x _ { m j } ) ^ { T } xj=(x1j,x2j,,xmj)T x x x的第 j j j个独立观测样本, j = 1 , 2 , … , n j=1,2,…,n j=1,2,n

X X X的样本协方差矩阵

S = [ s i j ] m × m , s i j = 1 n − 1 ∑ k = 1 n ( x i k − x ‾ i ) ( x j k − x ‾ j ) i = 1 , 2 , ⋯   , m , j = 1 , 2 , ⋯   , m \left. \begin{array} { c } { S = [ s _ { i j } ] _ { m \times m } , \quad s _ { i j } = \frac { 1 } { n - 1 } \sum _ { k = 1 } ^ { n } ( x _ { i k } - \overline { x } _ { i } ) ( x _ { j k } - \overline { x } _ { j } ) } \\\\ { i = 1,2 , \cdots , m , \quad j = 1,2 , \cdots , m } \end{array} \right. S=[sij]m×m,sij=n11k=1n(xikxi)(xjkxj)i=1,2,,m,j=1,2,,m

给定样本数据矩阵 X X X,考虑向量 x x x y y y的线性变换 y = A T x y = A ^ { T } x y=ATx

这里

A = [ a 1 a 2 ⋯ a m ] = [ a 11 a 12 ⋯ a 1 m a 21 a 22 ⋯ a 2 m ⋮ ⋮ ⋮ a m 1 a m 2 ⋯ a m m ] A = \left[ \begin{array} { l l l l } { a _ { 1 } } & { a _ { 2 } } & { \cdots } & { a _ { m } } \end{array} \right] = \left[ \begin{array} { c c c c } { a _ { 11 } } & { a _ { 12 } } & { \cdots } & { a _ { 1 m } } \\\\ { a _ { 21 } } & { a _ { 22 } } & { \cdots } & { a _ { 2 m } } \\\\ { \vdots } & { \vdots } & { } & { \vdots } \\\\ { a _ { m 1 } } & { a _ { m 2 } } & { \cdots } & { a _ { m m } } \end{array} \right] A=[a1a2am]=a11a21am1a12a22am2a1ma2mamm

如果该线性变换满足以下条件,则称之为样本主成分。样本第一主成分 y 1 = a 1 T x y _ { 1 } = a _ { 1 } ^ { T } x y1=a1Tx是在 a 1 T a 1 = 1 a _ { 1 } ^ { T } a _ { 1 } = 1 a1Ta1=1条件下

使得 a 1 T x j ( j = 1 , 2 , ⋯   , n ) a _ { 1 } ^ { T } x _ { j } ( j = 1,2 , \cdots , n ) a1Txj(j=1,2,,n)的样本方差 a 1 T S a 1 a _ { 1 } ^ { T } S a _ { 1 } a1TSa1最大的 x x x的线性变换

样本第二主成分 y 2 = a 2 T x y _ { 2 } = a _ { 2 } ^ { T } x y2=a2Tx

是在 a 2 T a 2 = 1 a _ { 2 } ^ { T } a _ { 2 } = 1 a2Ta2=1 a 2 T x j a _ { 2 } ^ { T } x _ { j } a2Txj a 1 T x j ( j = 1 , 2 , ⋯   , n ) a _ { 1 } ^ { T } x _ { j } ( j = 1,2 , \cdots , n ) a1Txj(j=1,2,,n)的样本协方差

a 1 T S a 2 = 0 a _ { 1 } ^ { T } S a _ { 2 } = 0 a1TSa2=0条件下

使得 a 2 T x j ( j = 1 , 2 , ⋯   , n ) a _ { 2 } ^ { T } x _ { j } ( j = 1,2 , \cdots , n ) a2Txj(j=1,2,,n)的样本方差 a 2 T S a 2 a _ { 2 } ^ { T } S a _ { 2 } a2TSa2最大的 x x x的线性变换

一般地,样本第 i i i主成分 y i = a i T x y _ { i } = a _ { i } ^ { T } x yi=aiTx是在 a i T a i = 1 a _ { i } ^ { T } a _ { i } = 1 aiTai=1 a i T x j a _ { i } ^ { T } x _ { j } aiTxj a k T x j ( k < i , j = 1 , 2 , ⋯   , n ) a _ { k } ^ { T } x _ { j } ( k < i , j = 1,2 , \cdots , n ) akTxj(k<i,j=1,2,,n)的样本协方差

a k T S a i = 0 a _ { k } ^ { T } S a _ { i } = 0 akTSai=0条件下

使得 a i T x j ( j = 1 , 2 , ⋯   , n ) a _ { i } ^ { T } x _ { j } ( j = 1,2 , \cdots , n ) aiTxj(j=1,2,,n)的样本方差 a k T S a i a _ { k } ^ { T } S a _ { i } akTSai最大的 x x x的线性变换


主成分分析方法主要有两种,可以通过相关矩阵的特征值分解或样本矩阵的奇异值分解进行

相关矩阵的特征值分解算法

针对 m × n m \times n m×n样本矩阵 X X X,求样本相关矩阵

R = 1 n − 1 X X T R = \frac { 1 } { n - 1 } X X ^ { T } R=n11XXT

再求样本相关矩阵的 k k k个特征值和对应的单位特征向量,构造正交矩阵

V = ( v 1 , v 2 , ⋯   , v k ) V = ( v _ { 1 } , v _ { 2 } , \cdots , v _ { k } ) V=(v1,v2,,vk)

V V V的每一列对应一个主成分,得到 k × n k \times n k×n样本主成分矩阵

Y = V T X Y = V ^ { T } X Y=VTX

矩阵 X X X的奇异值分解算法

针对 m × n m \times n m×n样本矩阵 X X X

X ′ = 1 n − 1 X T X ^ { \prime } = \frac { 1 } { \sqrt { n - 1 } } X ^ { T } X=n1 1XT

对矩阵 X ′ X ^ { \prime } X进行截断奇异值分解,保留 k k k个奇异值、奇异向量,得到

X ′ = U S V T X ^ { \prime } = U S V ^ { T } X=USVT

V V V的每一列对应一个主成分,得到 k × n k \times n k×n样本主成分矩阵 Y Y Y

Y = V T X Y = V ^ { T } X Y=VTX


PCA(principal components analysis)即主成分分析技术旨在利用降维的思想,把多指标转化为少数几个综合指标。

PCA的算法相当简单。 在确保数据被归一化之后,输出仅仅是原始数据的协方差矩阵的奇异值分解。

现在我们有主成分(矩阵U),我们可以用这些来将原始数据投影到一个较低维的空间中

对于这个任务,我们将实现一个计算投影并且仅选择顶部K个分量的函数,有效地减少了维数

我们也可以通过反向转换步骤来恢复原始数据。

第一主成分的投影轴基本上是数据集中的对角线

当我们将数据减少到一个维度时,我们失去了该对角线周围的变化,所以在我们的再现中,一切都沿着该对角线


代码实现

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb
from scipy.io import loadmat

X = data['X']
def pca(X):
    # normalize the features
    X = (X - X.mean()) / X.std()
    
    # compute the covariance matrix
    X = np.matrix(X)
    cov = (X.T * X) / X.shape[0]
    
    # perform SVD
    U, S, V = np.linalg.svd(cov)
    
    return U, S, V
def project_data(X, U, k):
    U_reduced = U[:,:k]
    return np.dot(X, U_reduced)
def recover_data(Z, U, k):
    U_reduced = U[:,:k]
    return np.dot(Z, U_reduced.T)
U, S, V = pca(X)
Z = project_data(X, U, 1)
X_recovered = recover_data(Z, U, 1)
fig, ax = plt.subplots(figsize=(12,8))
ax.scatter(list(X_recovered[:, 0]), list(X_recovered[:, 1]))
plt.show()

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

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

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

相关文章

计算点在线上的投影坐标

如题 计算点到线上的垂点&#xff0c;首先明确&#xff1a; 该线段必须给出确切的起始点和终点&#xff0c; 而不是一个向量&#xff0c;因为一个向量并不能代表一个线段。 所以参数列表如下&#xff1a; Vector3 VerticalPoint(Vector3 point, Vector3 lStart, Vector3 lEnd…

【论文翻译】增强复制状态机的两阶段提交协议

Enhancing Two Phase-Commit Protocol for Replicated State Machines Halit Uyanık and Tolga Ovatman Department of Computer Engineering Istanbul Technical University 34469 Istanbul, Turkey Email目录1 介绍2 设计和实现2.1 事件类型2.2 在状态机上执行事件2.3 具有优…

8、常用基本命令(重要)

文章目录8、常用基本命令&#xff08;重要&#xff09;8.1 帮助命令8.1.1 man 获得帮助信息8.1.2 help 获得 shell 内置命令的帮助信息8.1.3 常用快捷键8.2 文件目录类8.2.1 pwd 显示当前工作目录的绝对路径8.2.2 ls 列出目录的内容8.2.3 cd 切换目录8.2.4 mkdir 创建一个新的目…

Linux驱动入门

一、驱动简介 Linux的驱动在本质上就是一种软件程序&#xff0c;上层软件可以在不了解硬件特性的情况下&#xff0c;通过驱动提供的接口&#xff0c;和计算机硬件进行通信。 系统调用是内核和应用程序之间的接口&#xff0c;而驱动程序是内核和硬件之间的接口。它为应用程序屏蔽…

缓存穿透、缓存击穿、缓存雪崩及其解决方案

缓存&#xff08;cache&#xff09;&#xff0c;大家都非常熟悉&#xff0c;几乎每个系统乃至整个计算机体系中都会用到。在分布式系统架构中&#xff0c;主要用于减轻数据库的压力&#xff0c;提高系统的响应速度和并发吞吐&#xff0c;即空间(内存)换时间。当大量的读、写请求…

【模型推理加速系列】06: 基于resnet18加速方案评测

简介 花雪随风不厌看&#xff0c;更多还肯失林峦。愁人正在书窗下&#xff0c;一片飞来一片寒。小伙伴们好&#xff0c;我是微信公众号小窗幽记机器学习的首席称重师&#xff1a;卖麻辣烫的小男孩。今天这篇文章以resnet18模型为例&#xff0c;对比Pytorch、ONNX、TorchScript…

cmdline(二):uboot cmdline怎么传?cmdline kernel怎么用?

前面我们知道了cmdline是什么&#xff0c;已经在哪里添加cmdline&#xff1f;现在我们来看看在哪里传输cmdline&#xff0c;以及传输收到后怎么用&#xff1f; 参考内容来自前辈&#xff0c;感激&#xff1a; https://blog.csdn.net/weixin_42031299/article/details/12123950…

Spring Boot JPA EntityManager实体管理器示例

在本教程中&#xff0c;您将了解如何在 Spring Boot 示例中使用 JPA EntityManager&#xff08;使用 CRUD 操作和查询方法&#xff09;。我将向您展示&#xff1a; 在 Spring 引导中访问 JPA 实体管理器的方法如何使用实体管理器方法&#xff1a;执行SQL查询使用和CRUD操作cre…

【Android App】实现在线语音合成功能(使用云知声平台和WebSocket 超详细 附源码)

需要源码和Jar包请点赞关注收藏后评论区留下QQ~~~ 一、在线语音合成 虽然国产智能机大多集成了中文语音引擎&#xff0c;但是系统自带的语音工具无法满足商用要求&#xff0c;功能单一&#xff0c;所以势必引入第三方的语音引擎&#xff0c;依靠第三方提供的开发包统一支撑语音…

【新知实验室】——腾讯云音视频TRTC体验

腾讯实时音视频 TRTC 是什么&#xff1f; 腾讯实时音视频&#xff08;Tencent Real-Time Communication&#xff0c;TRTC&#xff09;将腾讯21年来在网络与音视频技术上的深度积累&#xff0c;以多人音视频通话和低延时互动直播两大场景化方案&#xff0c;通过腾讯云服务向开发…

clickHouse基础语法

clichouse数据类型 整形 lnt8 8bit,1字节 &#xff08;-128-127&#xff09;lnt16 16bitlnt32 32bitlnt64 64bit 无符号整型 相比于上面&#xff0c;就是把负数部分挪到正数部分 Ulnt8 &#xff08;0-255&#xff09;Ulnt16Ulnt32Ulnt64 浮点型 Float32 也就是floatFloa…

Instant Neural Graphics Primitives with a Multiresolution Hash Encoding以及源码浅析

背景 现存的一些新视图合成的训练过程和渲染速度都比较慢&#xff0c;其原因是因为query point需要使用MLP编码&#xff0c;而且在一个采样空间中&#xff0c;存在很多无效的query point也要计算其density和color&#xff0c;从而出现很多冗余计算。 作者针对这个问题&#x…

MAUI 中使用 DI 及 MVVM

MAUI 中使用 DI 及 MVVM为什么要使用 依赖注入 和 MVVM如何在 MAUI 中使用依赖注入如何使用 MVVM不使用框架或组件定义一个 BaseViewModelMainViewModel 的实现MainPage 中进行 Binding使用组件优化前面的 ViewModel 代码基项目的效果为什么要使用 依赖注入 和 MVVM MVVM 和 依…

1535_TriCore编译器Tasking使用_汇编分区、内置函数以及伪指令

全部学习汇总&#xff1a; GreyZhang/TriCore_Tasking_Compiler_Skills: Some skills for Tasking compiler on AURIX platform. Happy hacking! (github.com) 看了一下这个章节的内容&#xff0c;原本看着页数很多拆分成了两次学习。后面发现剩下的这部分内容主要并不是框架性…

项目实战——项目上线

ps : 项目要在云服务器上部署&#xff0c;博主自己是用的腾讯云&#xff0c;大家可以选择购买合适的服务器进行部署 目录 一、AC终端操 1、ssh登录服务器 2、创建新用户 3、分配用户 sudo 权限 4、配置免密登录&#xff08;SSH&#xff09; 5、传递祖传文件给服务器 6、安…

JetpackCompose从入门到实战学习笔记2——Modifier的简单使用

JetpackCompose从入门到实战学习笔记2——Modifier的简单使用 1.Image的使用&#xff1a; Composable fun Image(modifier: Modifier) {Row {Image(painterResource(id R.mipmap.iv_pic),contentDescription stringResource(R.string.description),modifier modifier.size…

阿里P8熬了一个月肝出这份32W字Java面试手册,传到Git上目前star数达到了30K+

互联网行业竞争越来越严峻&#xff0c;面试也是越来越难&#xff0c;一直以来我都想整理一套完美的面试宝典&#xff0c;奈何难抽出时间&#xff0c;这套1000道的Java面试手册我整理了整整1个月&#xff0c;上传到Git上目前star数达到了30K这套互联网Java工程师面试题包括了&am…

【iOS】UITableView的动态Cell高度(Masonry)

动态cell高度评论长度不同引出的问题实现评论长度不同引出的问题 对于之前写的项目的评论部分&#xff0c;由于评论文字字数的不同会导致label高度不同&#xff0c;所以需要设定不同的cell高度来展示。 一开始使用了 CGSize labelSize [label.text boundingRectWithSize:CG…

数据结构与算法_AVL平衡二叉树_四种旋转,插入和删除

1 AVL平衡二叉树的概念 平衡二叉树在BST树基础上加了平衡操作。 BST树特点 &#xff1a;在BST树的基础上&#xff0c;引入了节点“平衡”的概念&#xff0c;任意一个节点的左右子树高度差不超过 1 &#xff0c;为了维持节点的平衡&#xff0c;引入了四种旋转操作&#xff0c;如…

MySQL的时区引起的前后端数据交互不畅的问题解决

MySQL的时区问题 一、问题起源 在使用swagger2进行代码测试时&#xff0c;执行完成后显示的时间与国内时间少了8个小时 强迫症的原因&#xff0c;就手贱了如下操作 ① 修改MySQL内的时间 set global time_zone 8:00; flush privileges;② show variables like “%time_zone%…