主成分分析(PCA)

Junity 发布于 2 天前 60 次阅读 最后更新于 2 天前 569 字 预计阅读时间: 3 分钟


AI 摘要

主成分分析(PCA)是一种通过方差最大化实现降维的方法。其数学本质是对协方差矩阵进行特征分解,选取前m大特征值对应的正交特征向量建立新坐标系,使数据在各维度上投影方差最大。本文详细推导了PCA的数学原理,并从协方差矩阵角度解释其特征分解过程,最后给出了numpy实现代码。

主成分分析(PCA)是一种对数据进行降维,并尽可能保留更多信息的方法。在PCA中,衡量信息的多少的指标是变量的 “分散” 程度。例如,考虑以下数据:
Pasted image 20250605192345.png

X轴上的分散程度远远大于Y轴上的,因此我们认为X轴上蕴含的信息比Y轴上要多。而为了衡量数据在某个轴上的分散程度,一个自然的想法是求出数据在该轴上的方差。而PCA的思想,就是建立一个新的 m 维坐标系,使得在新坐标系各坐标轴上数据的方差尽量大。

数学推导

设有一列数据 {Xn} ,那么问题转化为,求出一个单位向量 w,使得这些数据在这个向量方向上的投影长度的方差最大。由于 w 是单位向量,Xiw 方向上投影的长度就是 wTXi 。 因此可以列式如下:

D(X)=1ni=1n(wTXiwTX)2

其中涉及到 X ,为了计算方便,不妨对 X 进行去中心化:Xi=XiX 。则式子变成下面的形式:

D(X)=1ni=1n(wTXi)2=1ni=1n(wTXi)(wTXi)T=1ni=1nwTXiXiTw=1nwT(i=1nXiXiT)w

其中,i=1nXiXiT=i=1n(XiX)(XiX)TX 的协方差矩阵,不妨记作 C ,则问题转化为在 wTw=1 的条件下,求 wTCw 的最大值。因此使用拉格朗日乘子法,列出拉格朗日方程如下:

L(w,λ)=wTCwλ(1wTw)

求出偏导数并使其为 0 :

{Lw=2Cw2λw=0Lλ=(1wTw)=0

因此:

{Cw=λwwTw=1

不难发现, w 就是 C 的特征向量,而 λ 就是对应的特征值。带回到方差算式中:D(X)=1nwTCw=1nwTλw=λn ,因此对 C 作特征值分解后,取前 m 大的特征值对应的特征向量,由于 C 是对称的矩阵,因此特征向量间相互正交,那么将数据投影到这些向量的方向上就完成了PCA的过程。

numpy实现

import numpy as np

def PCA(data):
	data = data - data.mean(axis = 1, keepdims = True)
	C = np.dot(data,data.T)
	
	u,v,d = np.linalg.svd(C)
	
	return np.dot(u[:,:k].T, data)
此作者没有提供个人介绍。
最后更新于 2025-06-10