矩阵的主成分是什么?主成分分析(PCA)又能做什么?

目录

一、前言

二、什么是主成分

三、为什么需要主成分

四、主成分的直观理解

五、主成分分析(PCA)的核心思想

第一步

第二步

六、主成分和特征值的关系

七、如何选择主成分

八、PCA为什么能降维

九、Python实现PCA

十、查看主成分

十一、查看解释方差比例

十二、PCA的应用场景

图像压缩

人脸识别

数据可视化

机器学习预处理

十三、PCA的优点

降低维度

提高训练速度

去除噪声

防止过拟合

十四、PCA的缺点

可解释性下降

信息损失

只适合线性关系

十五、总结


一、前言

当我们学习机器学习、数据分析或者人工智能时,经常会听到一个词:

复制代码
PCA

Principal Component Analysis

主成分分析

很多教程上来就是一堆公式:

复制代码
协方差矩阵

特征值

特征向量

降维

让人看得云里雾里。

实际上,PCA背后的思想非常简单:

在大量数据中,找到最重要的信息方向,保留这些方向,丢弃不重要的信息。

而这些最重要的方向:

复制代码
就是主成分(Principal Component)

二、什么是主成分

假设我们收集了一批学生的数据:

身高 体重
170 60
175 65
180 70
185 75

如果把这些数据画到坐标系中:

复制代码
      *
         *

            *

               *

会发现:

复制代码
数据并不是随机分布

而是沿着某个方向排列。

这个方向:

复制代码
最能反映数据变化趋势

这就是:

复制代码
第一主成分

简单理解:

复制代码
主成分

=

数据最主要的变化方向

三、为什么需要主成分

现实项目中经常遇到:

复制代码
100个特征

500个特征

1000个特征

例如:

用户画像:

复制代码
年龄

收入

学历

消费金额

浏览记录

点击次数

购买次数
...

特征越多:

复制代码
计算越慢

存储越大

容易过拟合

但很多特征其实高度相关。

例如:

复制代码
身高

腿长

通常同时增长。

那么:

复制代码
保存两个特征

意义不大

因此希望:

复制代码
压缩数据

减少维度

保留主要信息

这就是PCA存在的意义。


四、主成分的直观理解

假设数据如下:

复制代码
身高

体重

绘制后:

复制代码
      *
        *

          *

             *

                *

可以看到:

复制代码
数据主要沿对角线方向分布

因此:

复制代码
对角线方向

就是第一主成分

而垂直方向:

复制代码
变化很小

因此:

复制代码
信息较少

这部分通常会被舍弃。


五、主成分分析(PCA)的核心思想

PCA本质上做了两件事:

第一步

寻找:

复制代码
数据变化最大的方向

得到:

复制代码
第一主成分

第二步

寻找:

复制代码
与第一主成分垂直

且变化第二大的方向

得到:

复制代码
第二主成分

依次类推。


整体流程:


六、主成分和特征值的关系

上一篇文章讲过:

复制代码
A × v = λ × v

其中:

复制代码
v

特征向量

λ

特征值

在PCA中:

复制代码
特征向量

=

主成分方向

而:

复制代码
特征值

=

该方向的重要程度

例如:

复制代码
特征值:

100

20

5

1

说明:

复制代码
第一个方向最重要

因为:

复制代码
100 >> 20 >> 5 >> 1

七、如何选择主成分

假设得到:

复制代码
特征值:

100

20

5

1

总信息量:

复制代码
100 + 20 + 5 + 1

= 126

第一主成分贡献率:

复制代码
100 / 126

≈ 79%

前两个主成分:

复制代码
(100 + 20) / 126

≈ 95%

说明:

复制代码
前两个主成分

已经保留95%的信息

因此:

复制代码
后两个方向可以舍弃

八、PCA为什么能降维

假设原始数据:

复制代码
100个特征

经过PCA:

复制代码
保留前10个主成分

变成:

复制代码
10个特征

这样:

复制代码
维度降低90%

但:

复制代码
大部分信息仍然保留

因此:

复制代码
训练速度更快

存储更少

泛化能力更强

九、Python实现PCA

安装依赖:

复制代码
pip install scikit-learn

导入数据:

python 复制代码
from sklearn.datasets import load_iris

iris = load_iris()

X = iris.data

print(X.shape)

输出:

复制代码
(150,4)

表示:

复制代码
150条数据

4个特征

进行PCA降维:

python 复制代码
from sklearn.decomposition import PCA

pca = PCA(
    n_components=2
)

X_new = pca.fit_transform(X)

print(X_new.shape)

输出:

复制代码
(150,2)

说明:

复制代码
4维

↓

2维

成功降维。


十、查看主成分

查看主成分方向:

python 复制代码
print(
    pca.components_
)

输出类似:

复制代码
[
 [0.36 0.08 0.85 0.35]
 [-0.65 -0.73 0.17 0.07]
]

每一行:

复制代码
代表一个主成分

十一、查看解释方差比例

查看信息保留率:

python 复制代码
print(
    pca.explained_variance_ratio_
)

输出:

复制代码
[0.92 0.05]

表示:

复制代码
第一主成分

保留92%信息

第二主成分

保留5%信息

总计:

复制代码
97%

说明:

复制代码
2个主成分

已经代表原始数据

十二、PCA的应用场景

图像压缩

原始图片:

复制代码
1920 × 1080

数据量巨大。

利用PCA:

复制代码
保留主要信息

压缩图片

人脸识别

经典算法:

复制代码
EigenFace

就是利用:

复制代码
PCA

提取主要特征。


数据可视化

例如:

复制代码
100维数据

无法直接观察。

通过PCA:

复制代码
100维

↓

2维

即可绘图展示。


机器学习预处理

训练模型前:

复制代码
删除冗余特征

减少噪声

降低维度

提升训练效率。


十三、PCA的优点

降低维度

复制代码
减少特征数量

提高训练速度

复制代码
减少计算量

去除噪声

复制代码
保留主要信息

舍弃次要信息

防止过拟合

复制代码
减少无关特征

十四、PCA的缺点

可解释性下降

降维后:

复制代码
主成分

不再对应具体业务字段

信息损失

降维过程中:

复制代码
部分信息被舍弃

只适合线性关系

复杂非线性问题:

复制代码
效果有限

十五、总结

主成分分析(PCA)是机器学习和数据分析中最重要的降维方法之一。

核心思想:

复制代码
寻找数据变化最大的方向

↓

保留这些方向

↓

舍弃不重要方向

↓

完成降维

其中:

复制代码
主成分

=

数据最重要的变化方向

而:

复制代码
特征值

=

该方向的重要程度

可以这样理解:

复制代码
原始数据

像一堆杂乱信息

PCA

帮助我们找到最重要的信息主干

因此,无论是机器学习、图像处理、推荐系统还是数据可视化,PCA都是必须掌握的经典算法之一。

相关推荐
阿里云大数据AI技术9 小时前
从算力到智能体,面向 Agentic AI 的基础设施演进
人工智能·agent
hangyuekejiGEO10 小时前
GEO技术服务选型指南
大数据·人工智能·python
普通攻击往后拉10 小时前
Leetcode 206. 反转链表
算法·leetcode·链表
阿里云大数据AI技术10 小时前
EMR Serverless Spark AI Function 的双维降本实践
人工智能·sql·spark
维基框架10 小时前
GitHub源码处理提速 一趟扫描反而更慢
人工智能·github
冬奇Lab10 小时前
代码库知识库系列(05):向量检索 vs 知识图谱——加了调用图并没有变更好
人工智能
AKAMAI10 小时前
你的源服务器可能是你做出的最昂贵决定
运维·人工智能·云计算
@syh.10 小时前
【贪心】矩阵消除游戏
算法·游戏·矩阵
冬奇Lab11 小时前
【无标题】
人工智能·开源
专业贴准11 小时前
苏州SMT供料器设备选型分析:本地主流自动化企业技术特点与行业趋势
人工智能·自动化·制造