type
status
date
slug
summary
tags
category
icon
password

核心思想与原理
降维、变换基底
- 找到一条轴进行投影
- 投影后相互间距变大
基变换
我们知道要获得原始数据 新的表示空间 ,最简单的方法是对原始数据进行线性变换(也叫做基变换)。其中, 是原始样本, 是基向量, 是新表达。
数学表达:
- 其中 是行向量,表示第 个基;
- 为列向量,表示第 个原始数据
当 时,即「基的维度 < 数据维度」时,达到降维目的,即 X
方差
表示数据分散的程度,在 PCA 中,我们希望方差越大,即 的取值比较分散
- 数学定义,对于单一随机变量
- 将每个数据减去平均值,去中心化,可简化公式为
协方差
表明的是数据多个维度坐标的差距
对于 维随机变量
- 协方差矩阵 为 n 行 n 列的对称矩阵,主对角线方差,斜对角线为协方差
- 的每一列代表一个样本,每一列中的每一个数代表的为特征,即
- 为对称矩阵
- 对角线分别为各个特征的方差,而第 行 列和 行 列元素相同,表明 i 和 j 两个特征之前的协方差
协方差对角化
初始目标和场景为:
- 有 m 个 n 维样本数据,设原始数据为 , 为 n 行 m 列的矩阵。
- 想找到一个基 ,使得 ,其中 ,达到降维的目的
设 的协方差矩阵为 , 的协方差矩阵为 ,且
- 目的为 D 的方差大,协方差为0
即 为能使原始协方差矩阵对角化的 ,是协方差矩阵 的特征向量单位化按行排列出的矩阵,如果 按照特征值排列,则用 前 行组成的矩阵乘以原始数据矩阵 ,就得到我们需要降维后的数据矩阵
PCA 算法
设有 m 条 n 维数据
- 将原始数据排列成矩阵
- 将 的每一行(代表一个特征)进行零均值化,即减去这一行的均值
- 求出协方差矩阵
- 求出协方差矩阵 得特征值和对应的特征向量
- 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前 行组成矩阵 P
- 即为降维到 k 维后的数据
代码实现
PCA算法实现
- 数据集

- PCA
- 查看主成分的特征向量
输出:array([[0.42746553, 0.90403165]])
pca.components_是一个二维数组(矩阵),形状为(n_components, n_features),其中n_components是你指定或自动选择的主成分的数量,n_features是原始数据的特征数量。
- 这个矩阵的每一行都是一个主成分对应的特征向量。换句话说,每一行向量表示原始数据中每个特征在该主成分上的投影系数。
代码文件:
PCA实现降维任务
- 数据集
- 降维实现
- 每个特征方向的方差比例的大小,可以选择舍弃那些不要的信息量小的
- 方差所占比例

- 可以根据所需数据多少选择对应的 components
代码文件:
PCA在数据降噪中的应用
- 数据集——手写数字数据集
- 绘图
- 加上噪声
- 降噪



代码文件:
PCA在人脸识别中的作用
- 数据集——人脸数据集
- PCA
- 通过 SVM 进行人脸识别
进行 PCA 后速度更快,准确率影响不大
代码文件:
优缺点和适用条件
优点
- 简单容易计算
- 降低特征选择工作量,降低开销
- 不要求数据正态分布,无参数限制,不受样本标签限制
- 有效去除噪声,使事物易于使用
缺点
- 非高斯分布情况下,PCA得到的主元可能并非最优,ICA可能效果更好
- 特征值分解的方法有一定局限性
- 降维后存在信息丢失
- 主成分解释较原始数据模糊
适用条件
- 变量间有较强相关性的数据
- 数据压缩、预处理
- 数据降维、噪声去除
- 高维数据集探索与可视化
- Author:空格
- URL:https://www.shipangshuo.xyz/article/PCA
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!









