PCA详解

article/2025/10/13 19:51:35

本文目录

  • 一、来源及作用
    • 存在问题
    • 基本作用
  • 二、 基本原理及求解步骤
    • 核心思想
    • 如何选择投影方向
  • 三、原理分析
    • 最大投影方差
    • 最小重构代价
  • 四、SVD与PCA的关系

一、来源及作用

存在问题

  在我们训练模型的过程中,有时会出现在训练集上误差较小,但到了测试集误差又较大,我们称之为泛化误差,造成这种现象往往是以下几个原因:

  • 训练数据不足
  • 训练集与测试集数据分布不同
  • 特征维度过高,造成过拟合

  而为了解决这一问题,我们又有以下几种方法:

  • 增加样本数量
  • 使用正则项
  • 对数据进行降维

  其中对数据进行降维可以进行人工特征筛选,但往往费时又费力,效果还有可能不好,因此我们可以采用一些模型来进行数据降,其中比较常用的就是PCA(Principal Component Analysis),即主成分分析。

基本作用

  PCA经常被用作以下几个方面:

  • 数据降维(降低高维数据,简化计算)
  • 数据去噪
  • 处理共线特征,降低算法的开销,同时防止样本过拟合

二、 基本原理及求解步骤

核心思想

  PCA的核心思想是经过线性变换,将数据从 n n n维线性空间映射至 k k k维( k < n k < n k<n),并且期望在投影方向上信息量最大,同时将数据进行反向重构时代价最小。

比如下面一组数据:
在这里插入图片描述

如果我们将其投影至X轴,则其效果如下:
在这里插入图片描述

X = [1  7 -4  1  5 -1  3 -2 -6 -2]
Y = [ 1.86379123  6.27582279 -3.08964086  3.39810814  6.43125938 -0.576652543.06208316 -1.7341361  -6.09519518 -1.36688637]

如果我们将其投影至Y轴,则效果如下:
在这里插入图片描述

但如果我们将其投影至过原点的一条直线,其效果将变为:
在这里插入图片描述
很显然投影至 y = x y=x y=x直线上,更能体现出数据之间的差异性。

如何选择投影方向

1.数据中心化

  即所有特征分别减去其各自维度的平均值,其效果就是将所有数据往原点方向整体偏移,处理后的数据平均值为0.

2.求协方差矩阵C

我们以原始特征空间为2维举例: C = [ c o v ( x 1 , x 1 ) c o v ( x 1 , x 2 ) c o v ( x 2 , x 1 ) c o v ( x 2 , x 2 ) ] C= \left[ {\begin{array}{cc} cov(x_1,x_1) & cov(x_1,x_2) \\ cov(x_2,x_1) & cov(x_2,x_2) \\ \end{array} } \right] C=[cov(x1,x1)cov(x2,x1)cov(x1,x2)cov(x2,x2)]

  • C的纬度是 k ∗ k k*k kk维的, k k k为特征的数量。

  • 对角线上的值分别是 x 1 x_1 x1 x 2 x_2 x2的方差,非对角线上的是协方差,协方差可以用来描述两个特征之间的相关性,协方差大于0表示 x 1 x_1 x1 x 2 x_2 x2成正相关,即一个增大,另一个也增大;如果协方差小于0,则说明呈负相关;如果协方差等于0,则说明线性无关。协方差的绝对值越大,相关性越强;反之则越弱

  • 其中对于协方差并没有统一的度量值

其中:
c o v ( x , y ) = E [ ( x − E ( x ) ) ( y − E ( y ) ) ] = ∑ i = 1 n ( x i − x ˉ ) ( y i − y ˉ ) n \begin{aligned}cov(x,y)&=E[(x-E(x))(y-E(y))]\\&=\frac{\sum\limits_{i=1}^n(x_i-\bar x)(y_i-\bar y)}{n}\end{aligned} cov(x,y)=E[(xE(x))(yE(y))]=ni=1n(xixˉ)(yiyˉ)
由于中心化后的数据各个维度上的平均值都为0,因此
c o v ( x , y ) = 1 n ∑ i = 1 n x i y i = 1 n x T y \begin{aligned}cov(x,y)&=\frac{1}{n}\sum\limits_{i=1}^nx_iy_i\\&=\frac{1}{n}x^Ty\end{aligned} cov(x,y)=n1i=1nxiyi=n1xTy
由此可得: C = 1 n X T X C=\frac{1}{n}X^TX C=n1XTX

  • 这里 n n n为样本的数量,X为所有样本的特征构成的矩阵

3.求解协方差矩阵的特征值与特征向量

C μ = λ μ C\mu=\lambda\mu Cμ=λμ
就可以解出一组特征值与特征向量 { ( λ 1 , μ 1 ) , ( λ 2 , μ 2 ) . . . ( λ n , μ n ) } \{(\lambda_1,\mu_1),(\lambda_2,\mu_2)...(\lambda_n,\mu_n)\} {(λ1,μ1),(λ2,μ2)...(λn,μn)}

我们将其按照特征值从大到小排列,如果要将数据从 n n n维投影至 k k k维,我们取前 k k k个特征值对应的特征向量,并且将其标准化,使得每个特征向量的模为1,将其从上到下按行排列构成特征矩阵 P P P
P = [ μ 1 μ 2 . . . μ k ] P= \left[ {\begin{array}{cc} \mu_1\\ \mu_2 \\ .\\ .\\ .\\ \mu_k \end{array} } \right] P=μ1μ2...μk
4.将原始特征投影到新的特征空间

我们设投影后的的特征为 Y Y Y
Y = P X Y=PX Y=PX即为降维后的数据

三、原理分析

  对于上述PCA的降维步骤,我们心里一定有一个疑惑,即为什么要用协方差矩阵的特征向量作为投影方向,一开始我们提到过,PCA的目标可以从两方面理解,一个是最大投影方差,还有是最小重构距离,下面将从两方面进行推导。

最大投影方差

  对于某一原始的特征 x i x_i xi,其中心化后的值变为 x i − x ˉ i x_i-\bar x_i xixˉi。假设我们要向某一基准向量为 u i u_i ui的方向投影,由于 u i u_i ui为基准向量,所以其模为1,即 u i T u i = 1 u_i^Tu_i=1 uiTui=1,我们设两个向量间的夹角为 θ \theta θ,那么其投影后的向量就可以表示为 ∣ x i − x ˉ i ∣ cos ⁡ θ |x_i-\bar x_i|\cos\theta xixˉicosθ,其中投影前的两个向量的内积为 ∣ x i − x ˉ i ∣ ∣ u i ∣ cos ⁡ θ |x_i-\bar x_i||u_i|\cos\theta xixˉiuicosθ,因此可得投影后的向量就等于两个向量的内积 ( x i − x ˉ i ) T u i (x_i-\bar x_i)^Tu_i (xixˉi)Tui

  我们要使投影方差最大,即使得全局投影后的方差最大,投影后全量均值为:
1 n ∑ i = 1 n ( x i − x ˉ i ) T u i = u i ∑ i = 1 n 1 n ( x i − x ˉ i ) T = 0 \frac{1}{n}\sum\limits_{i=1}^n(x_i-\bar x_i)^Tu_i=u_i\sum\limits_{i=1}^n\frac{1}{n}(x_i-\bar x_i)^T=0 n1i=1n(xixˉi)Tui=uii=1nn1(xixˉi)T=0
因此投影后的方差为:
J = 1 n ∑ i = 1 n [ ( x i − x ˉ i ) T u i ] 2 = 1 n ∑ i = 1 n u i T ( x i − x ˉ i ) ( x i − x ˉ i ) T u i = u i T ∑ i = 1 n 1 n ( x i − x ˉ i ) ( x i − x ˉ i ) T u i \begin{aligned}J&=\frac{1}{n}\sum\limits_{i=1}^n[(x_i-\bar x_i)^Tu_i]^2\\&=\frac{1}{n}\sum\limits_{i=1}^nu_i^T(x_i-\bar x_i)(x_i-\bar x_i)^Tu_i\\&=u_i^T\sum\limits_{i=1}^n\frac{1}{n}(x_i-\bar x_i)(x_i-\bar x_i)^Tu_i\end{aligned} J=n1i=1n[(xixˉi)Tui]2=n1i=1nuiT(xixˉi)(xixˉi)Tui=uiTi=1nn1(xixˉi)(xixˉi)Tui
其中 ∑ i = 1 n 1 n ( x i − x ˉ i ) ( x i − x ˉ i ) T \sum\limits_{i=1}^n\frac{1}{n}(x_i-\bar x_i)(x_i-\bar x_i)^T i=1nn1(xixˉi)(xixˉi)T就是中心化后矩阵的协方差矩阵,我们设其为 S S S,因此可以得到:
L = arg max ⁡ μ i T S u i s . t . u i T u i = 1 \begin{aligned}&L = \argmax\mu_i^TSu_i\\&s.t.\quad u_i^Tu_i=1\end{aligned} L=argmaxμiTSuis.t.uiTui=1
这就变成了一个简单的带约束优化问题,我们将其转化为拉格朗日形式可以得到:
L ( μ i , λ ) = μ i T S μ i + λ ( 1 − μ i T μ i ) L(\mu_i,\lambda)=\mu_i^TS\mu_i+\lambda(1-\mu_i^T\mu_i) L(μi,λ)=μiTSμi+λ(1μiTμi)
我们对 u i u_i ui求偏导令其等于0得:
∂ L ( μ i , λ ) ∂ μ i = 2 S μ i − 2 λ μ i = 0 \frac{\partial L(\mu_i,\lambda)}{\partial \mu_i}=2S\mu_i-2\lambda\mu_i=0 μiL(μi,λ)=2Sμi2λμi=0
因此可得:
S μ i = λ μ i S\mu_i=\lambda\mu_i Sμi=λμi
所以这里的 λ \lambda λ就可以等同为协方差矩阵的特征值, μ i \mu_i μi为对应的特征向量

我们将其带入 L L L可得 L = arg max ⁡ μ i T λ μ i L=\argmax \mu_i^T\lambda\mu_i L=argmaxμiTλμi
由于这里 λ \lambda λ是一个实数,因此可以得到: L = arg max ⁡ λ μ i T μ i = arg max ⁡ λ L=\argmax \lambda\mu_i^T\mu_i=\argmax\lambda L=argmaxλμiTμi=argmaxλ
所以在进行降维时,优先选取特征值大的特征向量

最小重构代价

  重构代价的含义就是将首先将原始空间的向量进行重构,转化成由一组线性无关的向量所构成的向量 x i x_i xi,其与投影后的数据 x ^ i \hat x_i x^i的距离就是重构代价。我们的目的是使得 x i − x ^ i x_i-\hat x_i xix^i的距离最小,至于向量间的距离,我们可以用内积来度量。可得:
J = 1 n ∑ i = 1 n ∣ ∣ x i − x ^ i ∣ ∣ 2 J=\frac{1}{n}\sum\limits_{i=1}^n||x_i-\hat x_i||^2 J=n1i=1nxix^i2
我们假设重构后的特征空间为 p p p维,降维后的特征空间为 q q q维( q < p q<p q<p),具体某个方向的基准向量为 μ 1 , μ 2 . . . μ p \mu_1,\mu_2...\mu_p μ1,μ2...μp,那么重构后的向量 x i x_i xi可以表示为: x i = ∑ k = 1 p ( x i T μ k ) μ k x_i=\sum\limits_{k=1}^p(x_i^T\mu_k)\mu_k xi=k=1p(xiTμk)μk
降维后的 x ^ i \hat x_i x^i可以表示为:
x ^ i = ∑ k = 1 q ( x i T μ k ) μ k \hat x_i=\sum\limits_{k=1}^q(x_i^T\mu_k)\mu_k x^i=k=1q(xiTμk)μk
因此我们可以得到:
J = 1 n ∑ i = 1 n ∣ ∣ ∑ k = q + 1 p ( x i T μ k ) μ k ∣ ∣ 2 = 1 n ∑ i = 1 n ∑ k = q + 1 p ( x i T μ k ) 2 \begin{aligned}J&=\frac{1}{n}\sum\limits_{i=1}^n||\sum\limits_{k=q+1}^p(x_i^T\mu_k)\mu_k||^2\\&=\frac{1}{n}\sum\limits_{i=1}^n\sum\limits_{k=q+1}^p(x_i^T\mu_k)^2\end{aligned} J=n1i=1nk=q+1p(xiTμk)μk2=n1i=1nk=q+1p(xiTμk)2
这里我们将 x i x_i xi替换成中心化后的点 x i − x ˉ i x_i-\bar x_i xixˉi可得:
J = 1 n ∑ i = 1 n ∑ k = q + 1 p [ ( x i − x ˉ i ) T μ k ] 2 = ∑ k = q + 1 p ∑ i = 1 n 1 n [ ( x i − x ˉ i ) T μ k ] 2 \begin{aligned}J&=\frac{1}{n}\sum\limits_{i=1}^n\sum\limits_{k=q+1}^p[(x_i-\bar x_i)^T\mu_k]^2\\&=\sum\limits_{k=q+1}^p\sum\limits_{i=1}^n\frac{1}{n}[(x_i-\bar x_i)^T\mu_k]^2\end{aligned} J=n1i=1nk=q+1p[(xixˉi)Tμk]2=k=q+1pi=1nn1[(xixˉi)Tμk]2
跟最大投影方差中的推导过程类似,我们可以得到:
J = ∑ k = q + 1 p μ k T S μ k J=\sum\limits_{k=q+1}^p\mu_k^TS\mu_k J=k=q+1pμkTSμk
其中 S S S为均值化后的协方差矩阵,于是我们可以构造优化问题:
L = arg min ⁡ ∑ k = q + 1 p μ k T S μ k s . t . μ k T μ k = 1 \begin{aligned}&L=\argmin\sum\limits_{k=q+1}^p\mu_k^TS\mu_k\\&s.t.\quad \mu_k^T\mu_k=1\end{aligned} L=argmink=q+1pμkTSμks.t.μkTμk=1
同样构造拉格朗日函数后我们可以得到:
L = arg min ⁡ ∑ k = q + 1 p λ k L=\argmin\sum\limits_{k=q+1}^p\lambda_k L=argmink=q+1pλk
因此在舍弃维度时,优先舍弃特征值较小的

四、SVD与PCA的关系

  我们假设经过中心化后的样本为 X X X,前面我们已经推导过,此时的协方差矩阵可以表达为 S = 1 n X T X S=\frac{1}{n}X^TX S=n1XTX
假设我们对 X X X进行奇异值分解为:
X = U Σ V T X=UΣV^T X=UΣVT
其中 U U U V V V都是酉矩阵,满足 U T U = I U^TU=I UTU=I以及 V T V = I V^TV=I VTV=I Σ Σ Σ为对角阵,其对角线上的值为所有奇异值

那么 S S S就可以表示为:
S = 1 n V Σ U T U Σ V T = 1 n V Σ 2 V T \begin{aligned}S&=\frac{1}{n}VΣU^TUΣV^T\\&=\frac{1}{n}VΣ^2V^T\end{aligned} S=n1VΣUTUΣVT=n1VΣ2VT
因此,在数据量较大,不方便直接求解协方差矩阵的情况,我们可以对中心化后的矩阵进行奇异值分解来代替计算


http://chatgpt.dhexx.cn/article/o8GEFfFa.shtml

相关文章

主成分分析法(PCA)

主成分分析&#xff08;Principal components analysis&#xff0c;以下简称PCA&#xff09;是最重要的降维方法之一。在数据压缩消除冗余和数据噪音消除等领域都有广泛的应用。一般我们提到降维最容易想到的算法就是PCA&#xff0c;下面我们就对PCA的原理做一个总结。 目录 …

主成分分析(PCA)方法步骤以及代码详解

主成分分析&#xff08;PCA&#xff09;方法步骤以及代码详解 前言 上一节我们了解到在构建神经网络模型&#xff0c;除了掌握如何搭建神经网络架构&#xff0c;了解参数具体含义&#xff0c;规避风险等方法。第一步是要对采用数据集的详细了解&#xff0c;无需接触任何神经网…

机器学习——PCA降维(我至今为止遇见的最好的博文)

参考文章&#xff1a;https://zhuanlan.zhihu.com/p/77151308 PCA&#xff08;Principal Component Analysis&#xff09; 是一种常见的数据分析方式&#xff0c;常用于高维数据的降维&#xff0c;可用于提取数据的主要特征分量。 PCA 的数学推导可以从最大可分型和最大重构性…

通达OA工作流数据报表二次开发版

此模块除具备工作流——数据报表所有功能外&#xff0c;新加入的功能包括&#xff1a; 1&#xff1a;查询条件自带可查询未完成的流程&#xff1b; 2&#xff1a;查询条件可设置查询所有子流程的字段&#xff1b; 3&#xff1a;报表可显示流程当前处理人&#xff0c;并且点击每…

开发通达OA工作流接口从ERP自动生成OA请款单(图文)

ERP系统很多不带审批系统&#xff0c;即使有审批系统的话应用起来也不那么容易&#xff0c;因为领导一般都是不使用ERP系统的&#xff0c;那么我就用通达OA来完成ERP的单据审批吧&#xff0c;是不是很酷呢&#xff0c;而且还支持移动端app和微信审批。 ERP端的数据发起由ERP方…

OA工作流引擎:作为组织血脉支撑的重要性解析

前面提到协同OA管理平台是以“人和事”为管理对象&#xff0c;但如何把“人和事”通过一定的方法能全部贯通起来呢。就如同一个人&#xff0c;有手、脚、嘴、头脑等各种器官&#xff0c;但如何能把这些器官充分的调动起来&#xff0c;里面最核心的还是人的血液&#xff0c;OA系…

通达OA 工作流运行异常情况的紧急处理(图文)

本文整理自通达OA技术交流群&#xff08;QQ群号&#xff1a;378591362&#xff09;群友交流内容。 一位朋友的工作流设计和运行突然出现故障&#xff0c;显示的数据部分都不正常&#xff0c;如下图&#xff1a; 经过重启所有服务&#xff08;包括缓存服务&#xff09;现象依旧。…

通达OA二次开发 小飞鱼应用OA工作流二次开发智能公文系统(三)(图文)

流程流转完毕后&#xff0c;会自动进行归档&#xff0c;默认存成10年存档目录&#xff0c;并且可以在多个存档年限中进行调整切换。点击流程文号可以直接查看具体的流程表单及执行记录。 如果不需要对部门进行管理时&#xff0c;可以直接使用ajax方式快速将存档年限进行修改切换…

通达OA 工作流流转过程中使用系统自带的提醒功能设置(图文)

在流程流转过程中&#xff0c;可以通过增加步骤的方式来提醒相关人员。其实可以使用系统自带的提醒功能&#xff0c;比如需要在某一步骤提醒流程发起人&#xff0c;就可以在提醒设置下设置提醒发起人&#xff0c;有3个选项可选&#xff0c;其中使用手机短信需要短信猫的支持&am…

通达OA工作流不可编辑

找到表&#xff1a;flow_run 搜索自增长ID流水号&#xff0c;查看该条记录的用户是否ok 找到表&#xff1a;flow_run_prcs 搜索流水号&#xff1a;run_id*** 查看结果的PRCS_ID数字最大的那一条记录的OP_FLAG是否为1&#xff0c;如果不为1则改为1即可。

java oa工作流设计_简易OA漫谈之工作流设计(DB)

1、流程图。 工作流可以做得很复杂&#xff0c;也可以设计的很简单。看下图 看这个图&#xff0c;一个流程图最基础的三部分&#xff1a;流程&#xff0c;步骤&#xff0c;操作。 2、流程模板。 流程图的程序描述就叫流程模板。一个流程模板大概需要的一些属性如下图&#xff1…

OA审批工作流设计器实现

OA审批工作流设计器实现 wflow-web&#x1f440;界面一览工作区面板表单管理表单基本设置表单设计器流程设计器 wflow-web 由 Vue ElementUI 驱动&#xff0c;已开源不断更新中 &#xff0c;主要更新 Gitee &#x1f60b; 码云gitee | github地址 &#x1f449; 在线体验地…

OA工作流引擎设计(纯java开发,不需要额外任何插件引擎)

目录 1 系统概览 2 表单管理 2.1 添加表单 2.2 表单智能设置 2.2.1 单行文本 2.2.2 多行文本 2.2.3 下拉菜单&#xff0c;单选按钮和复选框 2.2.4 日期时间控件 2.2.5 计算控件 2.2.6 会签字段 2.2.7 员工选择框和部门选择框 2.3 表单测试 2.3.1 可选日期、时间、日…

OA 系统工作流引擎 Camunda 实践(1)

【审核人员看清楚再审核&#xff0c;我是把自己公司的案例分析一下&#xff0c; 这哪是广告&#xff1f;&#xff1f;&#xff1f;】 Camunda是Activiti最大的贡献者之一(除Alfresco以外)&#xff0c;同时也是它一个主 要的执行咨询合作伙伴。camunda表示Activiti可能太拘束于…

小飞鱼通达二开 OA工作流打印次数统计控制程序(图文)

每个工作流工作打印了多少次了&#xff0c;在OA里不知道&#xff0c;如何能够控制呢&#xff0c;今天小飞鱼带给大家的就是这个工作量打印次数统计控制程序&#xff0c;使用起来是不是会方便很多。 可以查询打印日志明细。 打印页面上多了一个打印按钮和流水号、打印次数的信息…

通达OA工作流-表单设计

第1章 什么是工作流 1.1 工作流的用途 随着企业管理信息化进程的不断深入&#xff0c;协同应用软件的概念已深入人心&#xff0c;而工作流系统正是协同应用软件的核心。通过应用 IT 技术来规范工作流程、提高工作的执行效率和准确度、使企业运营更加高效、规范、稳健&…

通达OA 工作流执行出现的异常现象处理(图文)

一个朋友用的工作流&#xff0c;突然说这里面多了很多人不应该看到这个流程的&#xff0c;就是在查询工作时&#xff0c;最上面多了一个“查阅信息”项&#xff0c;然后最下面多了很多人查询的记录。这个项目是从哪里来的呢&#xff1f;普通的流程倒也无所谓了&#xff0c;而有…

小飞鱼通达二开 通达OA工作流表单标题下拉列表字体样式设置(图文)

今天的一个流程表单里使用了下拉列表框&#xff0c;如下图&#xff1a; 在设计视图和预览时都没有问题&#xff0c;只是在流程查询时显示的不正常。表单上的样式对于变成文字后的数据不再起作用。 小飞鱼经过研究&#xff0c;发现原来是系统在数据浏览页面时加载了其他的样式文…

OA工作流概述

本文转自&#xff1a;http://www.cnblogs.com/cuihongyu3503319/archive/2007/10/15/924378.html 一、工作流是什么&#xff1f; 工作流是从英文单词work flow中直译过来的。用在OA系统中最直白的意思就是日常工作中相对固定的流程计算机化。 例如&#xff1a;空管站发文的流程…

通达oa工作流升级 操作说明

通达oa工作流升级 操作说明 升级程序下载链接: https://pan.baidu.com/s/1SL_7qePn7c6pWnCR16VG2A 提取码: s6dx 1.停止其他用户访问oa 2.备份oa数据 3.对工作流数据进行归档 注意&#xff1a;如果有父子流程&#xff0c;其中子流程办结&#xff0c;父流程没有办结的情…