当前位置: 首页 > news >正文

机器学习(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=m11XcenteredTXcentered

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λii=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=1n(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)可解决非线性问题。

相关文章:

  • Restful接口学习
  • [密码学实战]在Linux中实现SDF密码设备接口
  • 密码学的hash函数,哈希碰撞, collision resistance, BTC用到的SHA-256简介
  • arm64适配系列文章-第十章-arm64环境上jenkins的部署
  • docker部署Jenkins工具
  • PTA -L1-001 Hello World
  • 联邦知识窃取模型(FedBM):从预训练语言模型中窃取知识以实现异构联邦学习|文献速递-深度学习医疗AI最新文献
  • TCP基础题:音乐播放列表管理系统
  • React 的 useEffect 清理函数详解
  • Docker-高级使用
  • 【python】Python 中,单下划线(_)和双下划线(__)开头以及结尾的命名方式具有特殊的含义和用途
  • 安恒web安全春招实战
  • 如何使用 Apache 配置用户主页 ?
  • 【前端】【面试】在前端开发中,如何优化 CSS 以提升页面渲染性能?
  • 轻松完成视频创作,在线视频编辑器,无需下载软件,功能多样实用!
  • 游戏引擎学习第243天:异步纹理下载
  • C++区别于C语言的提升用法(万字总结)
  • 推荐几个可以免费下载视频的软件(Neat Download Manager、蜗牛下载助手、bilidown)
  • 【安全扫描器原理】网络扫描算法
  • 【题解-Acwing】851. spfa求最短路
  • 巴基斯坦最近“比较烦”:遣返阿富汗人或致地区局势更加动荡
  • 长三角议事厅|国际产业转移对中国产业链韧性的影响与对策
  • 中央空管办组织加强无人机“黑飞”“扰航”查处力度
  • 著名茶叶专家谢丰镐逝世,享年95岁
  • 云南洱源县4.8级地震:房屋受损442户,无人员伤亡报告
  • 刘国梁总结发言数度哽咽:乒乓球是事业,更是融入血脉的信仰