PCA降维的推导(超详细)

本文介绍了PCA(主成分分析)作为一种常见的数据降维方法,通过找出数据的主要特征,减少冗余,优化数据表示。文章详细阐述了PCA的数学推导过程,包括中心化、协方差矩阵、特征值和最大特征值的寻找,以及降维的实际步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

前言

什么是PCV降维

应用场景

PCA的数学推导

PCA降维的过程

PCA的流程


前言

什么是PCV降维

PCA(Principal Component Analysis)是一种常用的降维技术,即将高维数据转换为低维数据的方法。通俗地说,PCA降维就是通过找到数据中的主要特征,并将其用较少的特征来表示,从而减少数据的维度。

下图为例,所有的数据是分布在三维空间中,PCA将三维数据映射到二维平面u,二维平面由向量<u1,u2>表示,u1与u2垂直

应用场景

假设你有一个数据集,它有很多特征(维度),比如说100个。但是你发现这些特征之间可能存在冗余或者相关性,有些特征对数据的贡献可能不是很大。在这种情况下,你可以使用PCA来降低数据的维度。

PCA的数学推导

假设对n个样本x_{i}进行PCA处理,先对数据进行中心化,即将数据的均值变为0(为了后面计算的方便,不用减去mean)

则数据集的协方差矩阵为:

由于上面已经将数据中心化\mu _{i},\mu _{j}均为0,所以这里的协方差可以简化为下面的式子

PCA的主要目的是找到一个线性变换,让数据投影的方差最大化

内基的补充

假设找到线性变化\mu _{1}单位向量),对x _{i}做线性变化的投影,可知:

然后计算投影后的均值和方差

我们要投影后的方差取最大,可以得到优化函数,如下

这里的(1)是我们的目标函数,(2)是约束条件,然后构建拉格朗日函数得

要求得(1)式的max,即要λ \lambdaλ最大,而λ \lambdaλ是矩阵S的特征值,问题就转换为求S的最大特征值,求解的方法有SVD矩阵分解和特征值分解。

PCA降维的过程

  • x投影后的方差,就是x协方差矩阵的特征值,想要方差最大,就是要找协方差矩阵最大的特征值,最佳投影方向就是最大特征值对应的特征向量
  • 协方差的特征值有特征向量有\lambda _{1},\lambda _{2},.....\lambda _{n},特征向量有\mu _{1},\mu _{2},....\mu _{n}
  • 将所有特征值从大到小排列,将相应的特征向量随之排列,选择特征向量的前k行组成的矩阵(\mu _{1},\mu _{2},....,\mu _{k})乘以原始数据矩阵X,就得到我们需要的降维后的数据矩阵Y

PCA的流程

假设n个d维样本x_{i}进行PCA处理

  • 将原始数据按列组成d行n列矩阵X
  • 将X的每一行去中心化,即减去这一行的均值
  • 求出X的协方差矩阵
  • 求出协方差矩阵的特征值和对应的特征向量
  • 将特征向量根据对应的特征值大小从上到下按行排列,取前m行组成矩阵P
  • Y=PX即为降维到m维的数据
<think>好的,用户想了解主成分分析(PCA)的工作原理和实现方法。首先,我需要回顾一下PCA的基本概念,确保自己理解正确。PCA是一种通过线性变换将高数据投影到低空间的技术,保留数据的主要特征,常用于和去噪。 接下来,我应该分步骤解释PCA的工作原理。第一步通常是数据标准化,确保每个特征的均值为0,方差为1,这样不同量纲的特征不会影响结果。然后计算协方差矩阵,协方差矩阵能反映特征间的相关性,这对找到主成分很重要。 接下来是计算协方差矩阵的特征值和特征向量。这一步是关键,因为特征向量代表了数据的主成分方向,而对应的特征值则表示了各个主成分的重要性,即方差大小。按特征值从大到小排序,选择前k个特征向量作为新的坐标轴,这样就能将数据投影到这些主成分上,实现。 用户可能需要具体的实现步骤,比如如何用代码实现。Python中使用NumPy和sklearn是比较常见的方法。我需要写出示例代码,并解释每一步的作用,比如标准化数据、计算协方差矩阵、特征分解等。同时,提醒用户在实际应用中使用sklearn的PCA类会更方便,但自己实现有助于理解原理。 还要注意用户提供的引用内容,特别是引用[1]到[4],需要适当引用到回答中。例如,引用[1]提到PCA通过线性组合提取信息,引用[2]和[4]提到了代码实现,可以结合起来说明。 用户可能对数学推导有疑问,比如为什么选择协方差矩阵,或者为什么要用特征值分解。这时候需要解释协方差矩阵反映了变量之间的关系,而特征向量则指向方差最大的方向,也就是数据变化最显著的方向,这样保留的主成分能最大程度保留原始数据的方差,减少信息损失。 另外,可能需要解释方差贡献率,即选择多少个主成分合适,通常通过累计贡献率超过某个阈值(如95%)来决定k的值。这部分在数学推导中可以提到特征值的累加比例。 在实现方法中,手动实现和库函数调用的对比也很重要。手动实现有助于理解,但实际应用中使用库函数更高效,特别是处理大数据时。 最后,生成相关问题需要考虑用户可能进一步想知道的内容,比如PCA的优缺点、优化方法、与其他技术的对比等。根据引用[3],提到PCA与最大可分性的关系,可以引导用户深入理解其数学基础。 需要检查是否遵循了系统级指令,比如数学公式使用$...$和$$...$$,LaTeX语法正确,引用标识自然添加。例如,在解释协方差矩阵时用$$...$$单独成段,特征值分解的公式也用正确格式。 总结下来,回答的结构应该是:原理分步骤讲解,数学推导,手动实现代码,库函数使用示例,最后相关问题。确保每个部分都清晰,并引用适当的参考文献。</think>### 主成分分析(PCA)算法详解 主成分分析(PCA)是一种通过正交变换将高数据投影到低空间的无监督方法,其核心目标是保留数据中的最大方差信息[^1]。以下从原理和实现两个层面进行说明: --- #### 一、工作原理(数学推导) 1. **数据标准化** 对原始数据矩阵$X$($n$个样本,$m$特征)进行标准化,使每个特征均值为0,方差为1: $$ z_{ij} = \frac{x_{ij} - \mu_j}{\sigma_j}, \quad \mu_j = \frac{1}{n}\sum_{i=1}^n x_{ij}, \quad \sigma_j = \sqrt{\frac{1}{n}\sum_{i=1}^n (x_{ij} - \mu_j)^2} $$ 2. **计算协方差矩阵** 协方差矩阵反映不同特征间的相关性: $$ C = \frac{1}{n} Z^T Z $$ 其中$Z$为标准化后的数据矩阵。 3. **特征值分解** 对协方差矩阵$C$进行特征分解,得到特征值$\lambda_1 \geq \lambda_2 \geq \dots \geq \lambda_m$和对应的特征向量$v_1, v_2, \dots, v_m$。每个特征向量代表一个主成分方向[^3]。 4. **选择主成分** 根据方差贡献率($\frac{\lambda_i}{\sum \lambda_j}$)选择前$k$个主成分,构造投影矩阵$W = [v_1, v_2, \dots, v_k]$。 5. **数据投影** 将原始数据投影到低空间: $$ Y = Z \cdot W $$ 其中$Y$为后的$n \times k$矩阵。 --- #### 二、实现方法(Python示例) **手动实现步骤** ```python import numpy as np # 1. 数据标准化 def standardize(X): mean = np.mean(X, axis=0) std = np.std(X, axis=0) Z = (X - mean) / std return Z # 2. 计算协方差矩阵并特征分解 def pca(Z, k): cov_matrix = np.cov(Z, rowvar=False) eigenvalues, eigenvectors = np.linalg.eigh(cov_matrix) sorted_indices = np.argsort(eigenvalues)[::-1] top_k_indices = sorted_indices[:k] W = eigenvectors[:, top_k_indices] return Z @ W # 示例调用 X = np.random.rand(100, 5) # 100样本,5特征 Z = standardize(X) Y = pca(Z, 2) # 至2 ``` **使用scikit-learn库** ```python from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler scaler = StandardScaler() Z = scaler.fit_transform(X) pca = PCA(n_components=2) Y = pca.fit_transform(Z) ``` --- #### 三、关键点说明 1. **最大可分性**:PCA通过最大化投影方差保留数据可分性,数学上等价于协方差矩阵的特征值分解[^3]。 2. **正交性约束**:主成分之间相互正交,消除冗余信息。 3. **应用场景**:图像压缩、特征提取、数据可视化等[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值