降维算法之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 就是:抓住重点,丢掉琐碎,化繁为简!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值