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

相关推荐
吴可可1231 小时前
CAD2004自定义实体开发环境配置
c++·算法
xixixi777771 小时前
危机与防御并存:ShadowModel 供应链投毒爆发,PQC 国密融合筑牢 AI 量子安全底座
大数据·人工智能·安全·ai·供应链·后量子密码·模型投毒
weixin_446260851 小时前
分离性身份:语言模型代理缺乏声誉机制的基础
人工智能·语言模型·自然语言处理
雪隐1 小时前
个人电脑玩AI00-前言
人工智能·后端
薛定谔的悦1 小时前
光伏-储能-负荷联合预测:给 EMS 装上“预知能力“
java·数据库·人工智能·python·储能
大菜菜小个子1 小时前
template<typename T>使用
java·开发语言·算法
云边云科技_云网融合1 小时前
AI 网关:企业 AI 时代的 “智能交通枢纽“—— 六大行业典型场景深度解析
大数据·运维·人工智能
Fanfanaas1 小时前
C++ 继承
java·开发语言·jvm·c++·学习·算法
GISer_Jing1 小时前
Claude Code MCP Server 集成全解析
前端·人工智能·ai·架构