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

降维算法之PCA(主成分分析)

主成分分析(Principal Component Analysis, PCA)算法讲解

1. PCA的基本概念

主成分分析(PCA)是一种统计降维方法,主要用于数据的特征提取去相关性。其核心思想是通过线性变换,将原始高维数据投影到新的低维坐标轴(主成分)上,同时尽可能保留数据的方差信息

核心目标:

  • 通过正交变换,将原始数据投影到新的坐标轴,使得新坐标轴(主成分)上的数据方差最大化。
  • 这些新的坐标轴是数据协方差矩阵的特征向量,按对应的特征值大小排序,方差越大的方向越重要。

2. PCA的数学原理

PCA的实现主要涉及线性代数中的特征值分解(Eigen Decomposition)或奇异值分解(SVD),下面详细介绍计算过程。

2.1 数据中心化

设有 m × n m \times n m×n 维数据矩阵 X X X m m m 是样本数, n n n 是特征数),首先对每个特征进行零均值化(中心化)
X c = X − X ˉ X_c = X - \bar{X} Xc=XXˉ
其中, X ˉ \bar{X} Xˉ 是数据矩阵每一列(特征)的均值。

2.2 计算协方差矩阵

PCA 通过计算数据的协方差矩阵来找到主要的变化方向:
C = 1 m X c T X c C = \frac{1}{m} X_c^T X_c C=m1XcTXc
这里, C C C 是一个 n × n n \times n n×n 的对称矩阵,表示特征之间的协方差关系。

2.3 计算特征值和特征向量

对协方差矩阵 C C C 进行特征值分解
C v i = λ i v i C v_i = \lambda_i v_i Cvi=λivi
其中:

  • λ i \lambda_i λi 是协方差矩阵的特征值,表示数据在对应特征向量方向上的方差信息;
  • v i v_i vi 是协方差矩阵的特征向量,表示新坐标轴的方向。

2.4 选择主成分

通常,我们选取前 k k k 个最大的特征值对应的特征向量作为主成分,形成一个新的转换矩阵:
V k = [ v 1 , v 2 , . . . , v k ] V_k = [v_1, v_2, ..., v_k] Vk=[v1,v2,...,vk]
其中 k ≤ n k \leq n kn,可以通过累计方差贡献率确定 k k k 的取值:
累计方差贡献率 = ∑ i = 1 k λ i ∑ i = 1 n λ i \text{累计方差贡献率} = \frac{\sum_{i=1}^{k} \lambda_i}{\sum_{i=1}^{n} \lambda_i} 累计方差贡献率=i=1nλii=1kλi
若累计方差贡献率达到某个阈值(如95%),则选取对应的 k k k

2.5 变换数据

最终,我们用 V k V_k Vk 将原始数据投影到低维空间:
X new = X c V k X_{\text{new}} = X_c V_k Xnew=XcVk
X new X_{\text{new}} Xnew 就是降维后的数据表示。


3. PCA的Python实现

使用 scikit-learn 库进行 PCA 操作:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# 生成示例数据
X = np.array([[2, 3, 4], [3, 4, 5], [5, 6, 7]])

# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 进行PCA降维(降到2维)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)

print("降维后的数据:\n", X_pca)
print("主成分:\n", pca.components_)
print("方差贡献率:\n", pca.explained_variance_ratio_)

4. 总结

  • PCA 是基于协方差矩阵的特征值分解来寻找数据主成分的降维方法
  • 核心思想是找到数据的最大方差方向,并投影到低维空间
  • PCA 广泛用于数据降维、降噪、可视化和特征提取,但在非线性数据上效果有限

主成分分析(PCA,Principal Component Analysis)是一种很常用的数据降维方法,通俗来说,它就像是帮你把一堆乱七八糟的数据“整理归纳”,找到最重要、最有代表性的几个方向,然后用这些方向来简化数据。让我用一个生活化的例子来解释:

假设你去超市买东西,购物篮里装了一堆东西:苹果、香蕉、面包、牛奶、薯片等等。现在你想把这些东西整理一下,方便拎回家。你可能会发现,这些东西其实可以用几个“主要特点”来概括:

  1. 水果类(苹果、香蕉)——偏健康、轻便。
  2. 日常食品类(面包、牛奶)——必需品,稍微重一点。
  3. 零食类(薯片)——不健康,但占空间。

与其把每件东西单独拎着,你可以把它们按这几个“主要类别”打包,这样既省力,又能保留大部分信息。PCA 做的事情就有点像这样:它从一堆复杂的、互相纠缠的数据中,找出几个“主要方向”(主成分),这些方向能抓住数据里的大部分变化(信息),然后用这些方向重新表达数据,丢掉一些不重要的细节。

怎么工作的?

  1. 找方向:PCA 会分析数据,看看哪些变量(比如“重量”“甜度”)之间的关系最明显,变化最大。它会挑出变化最大的方向作为“第一主成分”,然后再找次大的方向(第二主成分),以此类推。
  2. 投影:把原来的数据“投影”到这些新方向上,就像把杂乱的购物清单按类别整理好。
  3. 简化:如果数据太复杂,你可以只保留前几个主成分(比如前两三个),丢掉剩下的,这样数据量变小,但还能保留大部分关键信息。

举个例子

假如你有学生的数据:身高、体重、成绩、运动能力。你想简化这些信息。PCA 可能会发现:

  • “身高”和“体重”变化很相关,可以合成一个主成分叫“体型”。
  • “成绩”和“运动能力”可能是另一个主成分,叫“综合能力”。
    最后,你从4个变量简化成了2个主成分,既方便分析,又没丢掉太多信息。

生活中的意义

PCA 就像是你大脑的“总结大师”,帮你从一大堆乱糟糟的信息里挑出重点。比如看电影推荐,它能从“时长”“类型”“评分”等一堆特征里,找出最能代表你喜好的几个关键点,然后用这些点来推荐电影。

简单来说,PCA 就是:抓住重点,丢掉琐碎,化繁为简!

http://www.dtcms.com/a/112075.html

相关文章:

  • 函数和模式化——python
  • 文件系统-重定向
  • 架构思维:冷热分离 - 表数据量大读写缓慢的优化方案
  • 有没有可以帮助理解高数的视频或者书籍资料?
  • 【力扣hot100题】(050)岛屿数量
  • 消息队列之-Kafka
  • #Linux内存管理# 在ARM32bit Linux中,高端内存的起始地址是如计算出来的?
  • 思二勋:未来所有的业务都将生于AI、长于AI、成于AI
  • 搜索二维矩阵
  • 笔记:代码随想录算法训练营day65:dijkstra(堆优化版)精讲、Bellman_ford 算法精讲
  • Docker安装、配置Redis
  • 使用Expo框架开发APP——详细教程
  • 【JavaScript】原型链 prototype 和 this 关键字的练习(老虎机)
  • 安当TDE透明加密:构建跨地域文件服务器安全传输的“双重保险“
  • VBA中类的解读及应用第二十二讲:利用类判断任意单元格的类型-5
  • C语言:3.31
  • 【YOLO系列(V5-V12)通用数据集-火灾烟雾检测数据集】
  • 大模型学习四:‌DeepSeek Janus-Pro 多模态理解和生成模型 本地部署指南(折腾版)
  • 七均线策略思路
  • Mac VM 卸载 win10 安装win7系统
  • Win7下安装高版本node.js 16.3.0 以及webpack插件的构建
  • Apache Camel指南-第四章:路由径构建之异常处理
  • 如何使用 IntelliJ IDEA 开发命令行程序(或 Swing 程序)并手动管理依赖(不使用 pom.xml)
  • 从飞机的状态矩阵A阵求运动模态的特征根、求传递函数矩阵
  • NOIP2013提高组.华容道
  • 从菜鸟到高手的提示词优化指南‌
  • Muduo网络库介绍
  • Sensodrive力控关节模组SensoJoint:TÜV安全认证助力机器人开发
  • 主机和虚拟机间的网络通信
  • LeetCode算法题(Go语言实现)_29