【机器学习】机器学习的基本分类-无监督学习-主成分分析(PCA:Principal Component Analysis)

主成分分析(Principal Component Analysis, PCA)

主成分分析(PCA)是一种常用的降维技术,用于将高维数据投影到低维空间,同时尽可能保留原数据的主要信息(方差)。


1. PCA 的核心思想

  1. 目标:找到新的坐标轴(主成分),使得数据投影到这些轴上的方差最大化。
  2. 主成分:数据的主要变化方向。第一个主成分捕获最多的方差,第二个主成分与第一个正交,捕获剩余的最大方差,依此类推。
  3. 降维:选取前 k 个主成分,舍弃次要主成分,达到数据压缩的目的。

2. PCA 的步骤

步骤 1:标准化数据
  • 数据集的不同特征可能具有不同的量纲和尺度,标准化将每个特征的均值设为 0,标准差设为 1:

其中, 是特征 j 的均值, 是特征 j 的标准差。

步骤 2:计算协方差矩阵
  • 协方差矩阵表示各特征之间的线性关系:

其中, 是标准化后的数据矩阵。

步骤 3:计算特征值和特征向量
  • 解出协方差矩阵的特征值 和对应的特征向量 ,特征向量表示主成分的方向,特征值表示对应的方差大小。
步骤 4:选择主成分
  • 按特征值从大到小排序,选择前 k 个最大的特征值对应的特征向量。
步骤 5:投影数据到主成分空间
  • 将原数据投影到选择的主成分方向:

其中,​ 是由前 k 个特征向量构成的矩阵。


3. 数学推导

最大化方差
  • 假设投影方向为单位向量 ,投影后的数据方差为:
  • 通过拉格朗日乘数法,约束 ,得优化问题:

解得 为协方差矩阵 的特征向量,最大方差为对应的特征值。


4. 特点

优点
  1. 降维:减少数据维度,降低计算复杂度。
  2. 特征解耦:发现数据中的主要变化方向。
  3. 去噪:通过忽略小的主成分去除噪声。
缺点
  1. 线性假设:PCA 假设数据是线性可分的,不适用于非线性数据。
  2. 信息损失:降维可能会丢失重要信息。
  3. 解释性差:主成分是线性组合,可能难以直观解释其物理意义。

5. PCA 的应用场景

  1. 数据可视化
    • 将高维数据投影到二维或三维空间,便于可视化。
  2. 降维加速
    • 在机器学习任务中减少特征数量,提高模型训练速度。
  3. 去噪
    • 提取主要特征,过滤掉噪声。
  4. 图像压缩
    • 在图像处理中减少数据存储需求。

6. 实现 PCA

手动实现 PCA
python 复制代码
import numpy as np

# 数据
X = np.array([[2.5, 2.4], [0.5, 0.7], [2.2, 2.9], [1.9, 2.2], [3.1, 3.0], [2.3, 2.7], [2, 1.6], [1, 1.1], [1.5, 1.6], [1.1, 0.9]])

# 步骤 1: 标准化数据
X_mean = np.mean(X, axis=0)
X_std = X - X_mean

# 步骤 2: 计算协方差矩阵
cov_matrix = np.cov(X_std.T)

# 步骤 3: 计算特征值和特征向量
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)

# 步骤 4: 选择主成分
idx = np.argsort(eigenvalues)[::-1]
eigenvalues = eigenvalues[idx]
eigenvectors = eigenvectors[:, idx]

# 步骤 5: 投影数据
k = 1  # 选择一个主成分
principal_components = eigenvectors[:, :k]
X_pca = X_std.dot(principal_components)

print("降维后的数据:\n", X_pca)

输出结果

Matlab 复制代码
降维后的数据:
 [[-0.82797019]
 [ 1.77758033]
 [-0.99219749]
 [-0.27421042]
 [-1.67580142]
 [-0.9129491 ]
 [ 0.09910944]
 [ 1.14457216]
 [ 0.43804614]
 [ 1.22382056]]
使用 scikit-learn 实现
python 复制代码
from sklearn.decomposition import PCA
import numpy as np

# 数据
X = np.array([[2.5, 2.4], [0.5, 0.7], [2.2, 2.9], [1.9, 2.2], [3.1, 3.0], [2.3, 2.7], [2, 1.6], [1, 1.1], [1.5, 1.6], [1.1, 0.9]])

# PCA 降维
pca = PCA(n_components=1)
X_pca = pca.fit_transform(X)

print("降维后的数据:\n", X_pca)

输出结果

python 复制代码
降维后的数据:
 [[-0.82797019]
 [ 1.77758033]
 [-0.99219749]
 [-0.27421042]
 [-1.67580142]
 [-0.9129491 ]
 [ 0.09910944]
 [ 1.14457216]
 [ 0.43804614]
 [ 1.22382056]]

7. 主成分数选择

  1. 累计解释方差比
    • 累计解释方差比达到一定阈值(如 95%)时停止:
  1. 碎石图(Scree Plot)
    • 观察特征值的变化,选择拐点作为主成分数。

8. PCA 的扩展

  1. Kernel PCA:将数据映射到高维空间,处理非线性数据。
  2. Sparse PCA:增加稀疏性约束,选择更少的特征。
  3. Incremental PCA:适合大规模数据集,分批处理数据。

PCA 是降维领域的重要工具,尽管其本质是线性投影,但通过合理使用可以显著提升数据处理效率和模型性能。

相关推荐
蓝速科技几秒前
蓝速科技 3D 全息舱 AI 数字人博物馆导览效果实录
人工智能·科技·3d
weixin_413063211 分钟前
复现 MatchED 边缘检测模型(单张图片重复8次,训练200 epoch)
python·算法·计算机视觉·边缘检测模型
AI-好学者1 分钟前
RAG知识点_3_高级实践
人工智能·ai·架构·langchain·ai编程
2601_962440844 分钟前
计算机毕业设计之jsp教室管理系统
java·开发语言·笔记·分布式·算法·课程设计·推荐算法
大神科技AI定制6 分钟前
告别Excel手工报价,用AI给非标产品报价提效
人工智能
AI视频剪辑官6 分钟前
播客切片工具选型核心评价维度
网络·人工智能·算法
Black蜡笔小新7 分钟前
制造业AI质检工作站/企业AI算力工作站DLTM重构工业质检全流程体系
人工智能·重构
Kyrie6783 小时前
SkillOpt:把 Agent 的技能文件当作可训练参数
人工智能
zzzzzz3103 小时前
别争了,OpenClaw 和国产龙虾我全都要:一个 AI Agent 混合部署实战
机器学习·机器人·api
复杂网络3 小时前
AI 不睡觉,但它比你更会做实验
算法