机器学习(8)——主成分分析
文章目录
- 1. 主成分分析介绍
- 2. 核心思想
- 3. 数学基础
- 4. 算法步骤
- 4.1. 数据标准化:
- 4.2. 计算协方差矩阵:
- 4.3. 特征分解:
- 4.4. 选择主成分:
- 4.5 降维:
- 5. 关键参数
- 6. 优缺点
- 7. 改进变种
- 8. 应用场景
- 9. Python示例
- 10. 数学推导(最大化方差)
- 11. 注意事项
- 12. 总结
1. 主成分分析介绍
主成分分析(PCA,Principal Component Analysis)是一种常用的降维技术,旨在通过线性变换将数据转换到一个新的坐标系中,使得数据的方差最大化,从而提取出数据中的主要特征。它在数据预处理、降维、噪声去除和数据可视化等领域有广泛应用。
2. 核心思想
PCA是一种无监督降维算法,旨在通过线性变换将高维数据投影到低维空间,同时保留最大方差信息。其核心思想是:
-
方差最大化:选择数据变化最大的方向(主成分)作为新坐标轴。
-
去相关性:新特征(主成分)之间线性无关。
3. 数学基础
- 协方差矩阵:衡量特征间的线性关系。
Cov ( X ) = 1 n X T X (假设数据已中心化) \text{Cov}(X) = \frac{1}{n} X^T X \quad \text{(假设数据已中心化)} Cov(X)=n1XTX(假设数据已中心化) - 特征分解:协方差矩阵的特征向量即为主成分方向,特征值表示各主成分的方差贡献。
4. 算法步骤
假设有一个数据集,包含 m m m个样本,每个样本有 n n n 个特征。数据集可以表示为一个 m × n m×n m×n 的矩阵 X X X,每一行表示一个样本,每一列表示一个特征
4.1. 数据标准化:
对每个特征进行标准化处理,使得每个特征的均值为0,方差为1
- 中心化: X centered = X − μ , 其中 μ 是均值向量。 X_{\text{centered}} = X - \mu, \text{ 其中 } \mu \text{ 是均值向量。} Xcentered=X−μ, 其中 μ 是均值向量。
- 标准化(可选): X scaled = X − μ σ X_{\text{scaled}} = \frac{X - \mu}{\sigma} Xscaled=σX−μ其中, μ μ μ 是各列的均值, σ σ σ 是各列的标准差
4.2. 计算协方差矩阵:
协方差矩阵是描述数据集各个特征之间关系的矩阵。对于一个包含多个特征的向量数据集,协方差矩阵表示了各特征之间的线性相关性
- 协方差矩阵 C 是一个 n×n 的矩阵,表示各个特征之间的协方差。
C = 1 m − 1 X centered T X centered C = \frac{1}{m-1} X_{\text{centered}}^T X_{\text{centered}} C=m−11XcenteredTXcentered
4.3. 特征分解:
协方差矩阵的特征值和特征向量决定了数据在新坐标系中的投影方向和方差。特征值越大,表示该方向上的方差越大,信息量越丰富。
- 求解 C C C的特征值和特征向量,特征值 λ λ λ 表示在该特征向量方向上的方差,特征向量则表示主成分的方向:
C v i = λ i v i C \mathbf{v}_i = \lambda_i \mathbf{v}_i Cvi=λivi - 按特征值降序排列: λ 1 ≥ λ 2 ≥ ⋯ ≥ λ d λ_1 ≥λ_2≥⋯≥λ_d λ1≥λ2≥⋯≥λd。
4.4. 选择主成分:
根据特征值的大小,选择前几个主成分,通常选择最大的几个特征值对应的特征向量。选择的主成分数量决定了降维后的维度
- 保留前 k k k 个最大特征值对应的特征向量 v 1 , … , v k \mathbf{v}_1 ,…,\mathbf{v}_k v1,…,vk ,构成投影矩阵 W W W
4.5 降维:
将原始数据投影到选定的主成分上,得到降维后的数据表示
Z = X centered W Z=X_{\text{centered}}W Z=XcenteredW
- Z Z Z 是 n × k n×k n×k 的降维后数据。
- W W W是选定的前 k k k 个特征向量组成的矩阵
5. 关键参数
-
降维后维度 k:
- 通过累计方差贡献率选择:
Explained Variance Ratio = ∑ i = 1 k λ i ∑ i = 1 d λ i \text{Explained Variance Ratio} = \frac{\sum_{i=1}^{k} \lambda_i}{\sum_{i=1}^{d} \lambda_i} Explained Variance Ratio=∑i=1dλi∑i=1kλi - 通常选择累计贡献率≥95%的最小 k k k。
- 通过累计方差贡献率选择:
-
是否标准化:若特征量纲差异大,需标准化。
6. 优缺点
-
✅ 优点:
-
降维效率高:线性复杂度,适合高维数据。
-
去相关性:新特征互不相关。
-
可解释性:主成分可反映原始特征的综合影响。
-
-
❌ 缺点:
-
线性假设:无法捕捉非线性关系(需核PCA)。
-
方差≠信息:保留方差最大的方向未必最重要。
-
丢失局部结构:可能破坏数据的局部几何关系。
-
7. 改进变种
-
核PCA(Kernel PCA):通过核函数处理非线性数据。
-
稀疏PCA:引入稀疏性约束,提升可解释性。
-
增量PCA:适用于流式数据或内存受限场景。
8. 应用场景
-
数据可视化:将高维数据降至2D/3D。
-
特征工程:减少特征数量,提升模型效率。
-
去噪:去除低方差成分(噪声)。
-
人脸识别(如Eigenfaces)。
9. Python示例
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt# 加载数据
X, y = load_iris(return_X_y=True)# 标准化并降维(k=2)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X)# 可视化
plt.scatter(X_pca[:, 0], X_pca[:, 1], c=y, cmap='viridis')
plt.xlabel('PC1 (Explained Variance: {:.2f}%)'.format(pca.explained_variance_ratio_[0]*100))
plt.ylabel('PC2 (Explained Variance: {:.2f}%)'.format(pca.explained_variance_ratio_[1]*100))
plt.title('PCA of Iris Dataset')
plt.show()
10. 数学推导(最大化方差)
投影后的样本方差为:
Var ( Z ) = 1 n ∑ i = 1 n ( w T x i ) 2 = w T C w \text{Var}(Z) = \frac{1}{n} \sum_{i=1}^{n} (\mathbf{w}^T \mathbf{x}_i)^2 = \mathbf{w}^T C \mathbf{w} Var(Z)=n1i=1∑n(wTxi)2=wTCw
通过拉格朗日乘子法最大化 w T C w \mathbf{w}^TC\mathbf{w} wTCw,约束 w T w = 1 \mathbf{w}^T\mathbf{w}=1 wTw=1,可得: C w = λ w C \mathbf{w} = \lambda \mathbf{w} Cw=λw
即协方差矩阵的特征向量。
11. 注意事项
-
特征缩放:量纲差异大时需标准化。
-
解释性:主成分是原始特征的线性组合,物理意义可能模糊。
-
非正交特征:若原始特征强相关,PCA效果显著。
12. 总结
PCA通过正交变换提取数据主要变化方向,是降维和特征提取的基石。理解其数学本质(特征分解)和局限性(线性假设)有助于在实际任务中合理应用。进阶方法(如核PCA)可解决非线性问题。