矩阵的主成分是什么?主成分分析(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都是必须掌握的经典算法之一。

相关推荐
饼干哥哥10 小时前
保姆级教程:用Image2 + Seedance2.0 做长视频,以品牌广告为例
人工智能
米小虾10 小时前
Agent Skill 规范与 Skill-Creator 核心思想
人工智能·agent
ZhengEnCi10 小时前
09e-斯坦福CS336作业四:大规模语言模型训练数据收集与处理
人工智能
oil欧哟10 小时前
Codex 最佳实践(超级长文):先搞懂 AI,再用好 AI
前端·人工智能·后端
甲维斯11 小时前
日本发布比肩Fable5的模型?Fugu Ultra初探!
人工智能·ai编程
雪隐11 小时前
个人电脑玩AI-04让5060 Ti给你打工——本地FLUX.2 Klein 的 AI 图片生成
人工智能·后端
腾讯云开发者11 小时前
腾讯云TVP走进香港数码港,解码AI出海新范式
人工智能
用户479492835691511 小时前
又当又立: Anthropic 这篇安全白皮书,为什么让人恶心
人工智能
Darling噜啦啦11 小时前
AI Loop 自迭代循环实战:让 AI 自动写文案直到完美——从 Prompt 工程到 Loop 工程
人工智能
vanuan11 小时前
MCP协议实战(Python版):让AI直接查你的数据库
人工智能