当前位置: 首页 > news >正文

基于主成分分析(PCA)的数据降维

一、概述

  主成分分析(Principal Component Analysis,PCA)是一种用于数据降维的方法,其核心目标是在尽可能保留原始数据信息的前提下,将高维数据映射到低维空间。该算法基于方差最大化理论,通过寻找数据的主要变化方向(即主成分),将原始数据投影到这些方向上,从而实现降维。

二、算法过程

1.数据中心化

  指将数据的每个特征减去其均值,使得数据的均值为 0。这样做的目的是将数据的分布中心移到原点,便于后续计算协方差矩阵等操作,因为协方差矩阵的计算对于数据的中心位置比较敏感,中心化后可以更好地反映数据的内在结构和相关性。

值得说明的是,在某些情况下,特别是当不同特征的量纲差异较大或者数据的分布比较复杂时,除了数据中心化外,还会进行数据标准化。数据标准化是指将数据的每个特征减去对应特征列的均值再除以标准差,这样可以进一步消除不同特征在尺度上的差异,使得不同特征在后续的分析中具有相同的重要性,避免因特征尺度不同而导致的结果偏差。

2. 计算协方差矩阵

  对中心化后的数据矩阵计算协方差,协方差矩阵描述了数据特征之间的相关性。
    总体协方差矩阵计算公式为 C o v = 1 n X c T X c Cov=\frac{1}{n}X_{c}^{T}X_c Cov=n1XcTXc
    样本协方差矩阵计算公式为 S = 1 n − 1 X c T X c S=\frac{1}{n-1}X_{c}^{T}X_{c} S=n11XcTXc

  其中 n n n是样本数量。实际计算中通常使用样本协方差,其中的 1 n − 1 \frac{1}{n-1} n11是总体协方差的无偏估计。

3. 计算协方差矩阵的特征值和特征向量

  通过求解协方差矩阵 S S S的特征方程 ∣ S − λ I ∣ = 0 \left| S-\lambda I \right|=0 SλI=0 ,得到特征值 λ i \lambda_i λi和对应的特征向量 v i v_i vi。特征值反映了数据在对应特征向量方向上的方差大小,特征值越大,说明数据在该方向上的变化程度越大,包含的信息越多。

4. 选择主成分

  将特征值按照从大到小的顺序排列,对应的特征向量也随之重新排序。选择前 k k k 个最大的特征值及其对应的特征向量,这些特征向量构成了新的低维空间的基向量。 k k k 的选择通常基于一个阈值,例如保留能够解释原始数据方差累计百分比达到一定比例(如 80%、90% 等)的主成分。

5.数据投影

  将原始数据投影到由选定的 k k k 个特征向量构成的低维空间中,得到降维后的数据。投影的计算公式为
Y = X c W Y=X_cW Y=XcW
  其中, X c X_c Xc是中心化后的数据矩阵, W W W是由前 k k k个特征向量组成的投影矩阵, Y Y Y 是降维后的数据矩阵。​

三、示例

  现有一组二维数据 X = [ 1 2 2 3 3 4 4 5 5 6 ] X= \begin{bmatrix} 1 & 2 \\ 2 & 3 \\ 3 & 4 \\ 4 & 5 \\ 5 & 6 \end{bmatrix} X= 1234523456 ,下面使用PCA方法进行降维,将其从二维降至一维。

1.数据标准化

  首先,计算每列的均值:
    第一列均值: x ˉ 1 = 1 + 2 + 3 + 4 + 5 5 = 3 \bar x_1=\frac{1+2+3+4+5}{5}=3 xˉ1=51+2+3+4+5=3
    第二列均值: x ˉ 2 = 2 + 3 + 4 + 5 + 6 5 = 4 \bar x_2=\frac{2+3+4+5+6}{5}=4 xˉ2=52+3+4+5+6=4
  然后,对矩阵 X X X进行中心化,得到矩阵 X c X_c Xc

     X c = X_c= Xc= [ 1 − 3 2 − 4 2 − 3 3 − 4 3 − 3 4 − 4 4 − 3 5 − 4 5 − 3 6 − 4 ] \begin{bmatrix} 1-3 & 2-4 \\ 2-3 & 3-4 \\ 3-3 & 4-4 \\ 4-3 & 5-4 \\ 5-3 & 6-4 \end{bmatrix} 13233343532434445464 = = = [ − 2 − 2 − 1 − 1 0 0 1 1 2 2 ] \begin{bmatrix} -2 & -2 \\ -1 & -1 \\ 0 & 0 \\ 1 & 1 \\ 2 & 2 \end{bmatrix} 2101221012

2. 计算协方差矩阵

  协方差矩阵 S S S的计算公式为 S = 1 n − 1 X c T X c S=\frac{1}{n-1}X_{c}^{T}X_{c} S=n11XcTXc,其中 n n n是样本数量。

     X c T X c = X_c^TX_c= XcTXc= [ − 2 − 1 0 1 2 − 2 − 1 0 1 2 ] \begin{bmatrix} -2 & -1 &0 & 1 & 2 \\ -2 & -1 &0 & 1 & 2 \end{bmatrix} [2211001122] [ − 2 − 2 − 1 − 1 0 0 1 1 2 2 ] \begin{bmatrix} -2 & -2 \\ -1 & -1 \\ 0 & 0 \\ 1 & 1 \\ 2 & 2 \end{bmatrix} 2101221012 = = = [ 10 10 10 10 ] \begin{bmatrix} 10 & 10 \\ 10 & 10 \end{bmatrix} [10101010]

  则协方差矩阵 S S S

     S = 1 5 − 1 S=\frac{1}{5-1} S=511 [ 10 10 10 10 ] \begin{bmatrix} 10 & 10 \\ 10 & 10 \end{bmatrix} [10101010] = = = [ 2.5 2.5 2.5 2.5 ] \begin{bmatrix} 2.5 & 2.5 \\ 2.5 & 2.5 \end{bmatrix} [2.52.52.52.5]

3. 计算协方差矩阵的特征值和特征向量

  对于矩阵 S S S,其特征方程为 ∣ S − λ I ∣ = 0 \left| S-\lambda I \right|=0 SλI=0 ,其中 I I I 是单位矩阵。

     ∣ 2.5 − λ 2.5 2.5 2.5 − λ ∣ \begin{vmatrix} 2.5-\lambda & 2.5 \\ 2.5 & 2.5-\lambda \end{vmatrix} 2.5λ2.52.52.5λ = = = ( 2.5 − λ ) 2 − 2. 5 2 {(2.5-\lambda)}^{2}-2.5^2 (2.5λ)22.52 = = = 0 0 0

  展开可得 λ 2 − 5 λ = 0 \lambda^2-5\lambda=0 λ25λ=0 ,解得特征值为 λ 1 = 5 \lambda_1=5 λ1=5 λ 2 = 0 \lambda_2=0 λ2=0

求特征向量:
  对于 λ 1 = 5 \lambda_1=5 λ1=5 求解 ( S − 5 I ) v 1 = 0 (S-5I)v_1=0 (S5I)v1=0

     [ 2.5 − 5 2.5 2.5 2.5 − 5 ] \begin{bmatrix} 2.5-5 & 2.5 \\ 2.5 & 2.5-5 \end{bmatrix} [2.552.52.52.55] [ v 11 v 12 ] \begin{bmatrix} v_{11} \\ v_{12} \end{bmatrix} [v11v12] = = = [ − 2.5 2.5 2.5 − 2.5 ] \begin{bmatrix} -2.5 & 2.5 \\ 2.5 & -2.5 \end{bmatrix} [2.52.52.52.5] [ v 11 v 12 ] \begin{bmatrix} v_{11} \\ v_{12} \end{bmatrix} [v11v12] = = = [ 0 0 ] \begin{bmatrix} 0 \\ 0 \end{bmatrix} [00]

v 11 = 1 v_{11}=1 v11=1 ,则 v 12 = 1 v_{12}=1 v12=1 ,单位化后得到特征向量 v 1 = [ 1 2 1 2 ] v_1= \begin{bmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{bmatrix} v1=[2 12 1]

  对于 λ 2 = 0 \lambda_2=0 λ2=0 ,求解 ( S − 0 I ) v 2 = 0 (S-0I)v_2=0 (S0I)v2=0

     [ 2.5 2.5 2.5 2.5 ] \begin{bmatrix} 2.5 & 2.5 \\ 2.5 & 2.5 \end{bmatrix} [2.52.52.52.5] [ v 21 v 22 ] \begin{bmatrix} v_{21} \\ v_{22} \end{bmatrix} [v21v22] = = = [ 0 0 ] \begin{bmatrix} 0 \\ 0 \end{bmatrix} [00]

v 21 = 1 v_{21}=1 v21=1 ,则 v 22 = − 1 v_{22}=-1 v22=1 ,单位化后得到特征向量 v 2 = [ 1 2 − 1 2 ] v_2= \begin{bmatrix} \frac{1}{\sqrt{2}} \\ -\frac{1}{\sqrt{2}} \end{bmatrix} v2=[2 12 1]

4. 选择主成分

  按照特征值从大到小排序,选择前 k k k 个特征值对应的特征向量作为主成分。这里我们选择最大特征值 λ 1 = 5 \lambda_1=5 λ1=5

  对应的特征向量 v 1 = [ 1 2 1 2 ] v_1= \begin{bmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{bmatrix} v1=[2 12 1] 作为主成分。

5. 数据投影

  将中心化后的数据 X c X_c Xc 投影到主成分上,得到降维后的数据

     Y = X c v 1 = Y=X_cv_1= Y=Xcv1= [ − 2 − 2 − 1 − 1 0 0 1 1 2 2 ] \begin{bmatrix} -2 & -2 \\ -1 & -1 \\ 0 & 0 \\ 1 & 1 \\ 2 & 2 \end{bmatrix} 2101221012 [ 1 2 1 2 ] \begin{bmatrix} \frac{1}{\sqrt{2}} \\ \frac{1}{\sqrt{2}} \end{bmatrix} [2 12 1] = = = [ − 2 2 − 2 0 2 2 2 ] \begin{bmatrix} -2\sqrt{2} \\ -\sqrt{2} \\ 0 \\ \sqrt{2} \\ 2\sqrt{2} \end{bmatrix} 22 2 02 22

四、Python实现

scikit-learn实现:
import numpy as np
from sklearn.decomposition import PCA# 数据
data = np.array([[1, 2],[2, 3],[3, 4],[4, 5],[5, 6]])# 创建PCA对象,指定降维后的维度为1
pca = PCA(n_components=1)# 使用PCA对数据进行降维
reduced_data = pca.fit_transform(data)# 降维后的数据
print("降维后的数据:")
print(reduced_data)

在这里插入图片描述



函数实现:
import numpy as npdef pca(X, n_components):# 数据中心化X_mean = np.mean(X, axis=0)X_centered = X - X_mean# 计算协方差矩阵cov_matrix = np.cov(X_centered, rowvar=False)# 计算协方差矩阵的特征值和特征向量eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)# 对特征值进行排序,获取排序后的索引sorted_indices = np.argsort(eigenvalues)[::-1]# 选择前n_components个最大特征值对应的特征向量top_eigenvectors = eigenvectors[:, sorted_indices[:n_components]]# 将数据投影到选定的特征向量上X_reduced = np.dot(X_centered, top_eigenvectors)return X_reduced# 数据
X = np.array([[1,2],[2,3],[3,4],[4,5],[5,6]])# 降至1维
n_components = 1
X_reduced = pca(X, n_components)# 降维后的数据
print("降维后的数据:")
print(X_reduced)

在这里插入图片描述

End.



下载

相关文章:

  • Off-Policy策略演员评论家算法SAC详解:python从零实现
  • SAM详解2.1(好题1)
  • 安卓基础(XML)
  • 六、Hadoop初始化与启动
  • 前端面经--网络通信与后端协作篇--XMLHttpRequest、axios、fetch、AbortController
  • Java 对象克隆(Object Cloning)详解
  • 基于LSTM与SHAP可解释性分析的神经网络回归预测模型【MATLAB】
  • AI学习路径
  • Ubuntu 服务器管理命令笔记
  • 查看单元测试覆盖率
  • SHA系列算法
  • C PRIMER PLUS——第6-2节:二维数组与多维数组
  • 算法中的数学:约数
  • mobile自动化测试-appium webdriverio
  • 【deepseek教学应用】001:deepseek如何撰写教案并自动实现word排版
  • 单体架构实现延时任务
  • 《Zabbix Proxy分布式监控实战:从安装到配置全解析》
  • 删除链表倒数第N个节点
  • 微信小程序上传视频,解决ios上传完video组件无法播放
  • iPhone手机连接WiFi异常解决方法
  • 近4小时会谈、3项联合声明、20多份双边合作文本,中俄元首今年首次面对面会晤成果颇丰
  • 晶圆销量上升,中芯国际一季度营收增长近三成,净利增超1.6倍
  • 东莞“超级”音乐节五一出圈背后:文旅热力何以澎湃经济脉动
  • 美联储主席:关税“远超预期”,美联储实现目标的进程或被推迟至明年
  • 视频丨习近平主席出席俄方在机场举行的迎宾仪式
  • 多地跟进官宣下调公积金贷款利率,最低降至2.1%