基于MATLAB的主成分分析(PCA)降维算法实现
项目简介
本项目基于MATLAB环境开发了一套完整的主成分分析(PCA)算法。该程序不仅实现了PCA的核心数学逻辑,还包含了从数据生成、预处理、特征提取到结果可视化的全流程功能。本项目旨在解决高维数据的降维问题,通过线性变换将原始数据映射到低维空间,同时最大程度地保留数据的主要信息和变异性。
算法经过精心设计,采用奇异值分解(SVD)方法处理协方差矩阵,确保了数值计算的稳定性。程序内置了模拟数据生成模块,能够自动产生具有潜在相关性的高维数据,用于验证算法在降维压缩、去噪和重构方面的有效性。
主要功能特性
- 模拟数据生成:自动构建包含100个样本、10个特征的高维数据集。通过线性组合潜在变量并添加高斯噪声,模拟真实世界中具有内部相关性的数据结构。
- 健壮的数据预处理:包含去均值与Z-score标准化处理,自动处理标准差为0的异常情况,消除不同特征量纲对分析结果的影响。
- 高精度协方差计算:基于标准化数据精确构建协方差矩阵,量化特征间的线性相关程度。
- SVD特征分解:利用奇异值分解(SVD)技术求解协方差矩阵的特征向量与特征值,相比传统的特征值分解更具数值稳定性。
- 自动维度筛选:支持基于累积方差贡献率阈值(默认为95%)自动确定最佳主成分数量,实现智能降维。
- 数据重构与误差分析:支持将降维后的数据逆变换回原始空间,并计算均方误差(MSE),量化评估信息损失。
- 全方位可视化:提供碎石图、特征值分布图、二维投影散点图、重构对比图以及协方差矩阵热力图。
算法实现原理
本项目中的核心算法逻辑严格遵循统计学习中的PCA流程:
- 数据标准化:
计算输入矩阵每一列的均值($mu$)和标准差($sigma$)。对原始数据进行标准化处理:$X_{norm} = (X - mu) / sigma$。
*注意:程序中加入了保护机制,若某列标准差为0,将其设为1以避免除零错误。*
- 构建协方差矩阵:
计算标准化数据的样本协方差矩阵 $Sigma$。公式为:$Sigma = frac{1}{m-1} X_{norm}^T X_{norm}$,其中 $m$ 为样本数量。
- 特征分解:
对协方差矩阵 $Sigma$ 进行奇异值分解(SVD),得到分解结果 $[U, S, V]$。其中 $U$ column 向量即为特征向量(主成分方向),$S$ 对角线元素对应特征值。
- 贡献率计算:
*
单个贡献率:特征值 / 特征值总和。
*
累积贡献率:单个贡献率的累加序列。
- 降维与投影:
根据设定的阈值(例如0.95),选取前 $k$ 个特征向量组成变换矩阵 $U_k$。
计算降维后的数据(Principal Components):$Z = X_{norm} times U_k$。
- 数据重构:
利用公式 $X_{rec_norm} = Z times U_k^T$ 恢复标准化数据,随后应用逆标准化操作恢复到原始量纲,用于对比分析。
模块与函数说明
1. 主流程控制模块
程序的入口函数,负责协调整个分析过程。
- 环境初始化:清理工作区、控制台及图形窗口,设置随机数种子(Seed=42)以保证结果可复现。
- 数据模拟:生成 $200 times 10$ 的矩阵。数据由3个潜在的真实维度混合而成,并叠加了随机噪声,确保数据既有冗余性又有规律性。
- 参数配置:定义目标累积贡献率阈值(Target Captured Variance)。
- 流程调度:依次调用计算函数、文本展示函数和绘图函数。
2. PCA核心计算模块 (perform_pca)
这是算法的数学引擎,封装了所有PCA相关的计算步骤。
- 输入:原始数据矩阵、方差贡献率阈值。
- 输出:包含标准化数据、均值、标准差、协方差矩阵、特征向量/值、贡献率、降维结果及重构数据的结果结构体。
- 逻辑:实现了上述“算法实现原理”中的所有步骤。它不仅计算降维后的投影矩阵 $Z$,还计算重构误差向量,用于评估算法性能。
3. 结果文本展示模块 (display_text_results)
负责在MATLAB命令行窗口输出关键的指标信息:
- 选定的主成分数量及其对应的累积方差贡献率。
- 原始数据的特征维度。
- 重构数据的平均均方误差(MSE)。
- 前5个主成分的详细方差贡献率列表。
4. 视觉可视化模块 (visualize_results)
生成两个独立的图形窗口,全面展示分析结果。
图形窗口 1:PCA分析主结果
- 子图1:碎石图 (Scree Plot):柱状图显示每个主成分的贡献率,折线图显示累积贡献率,并用虚线标记了截断点 $k$。
- 子图2:特征值分布:展示特征值随主成分序号下降的趋势。
- 子图3:低维空间投影:展示数据在前两个主成分(PC1 vs PC2)构成的平面上的散点分布,直观反映数据的聚类或分布特性。
- 子图4:重构效果对比:自动选取原始数据中变异度(方差)最大的两个维度,绘制原始数据点与经过PCA降维-重构后的数据点对比图。
图形窗口 2:协方差矩阵
- 绘制标准化数据的协方差矩阵热力图,颜色深浅代表特征间的相关性强弱。
使用方法
- 直接在MATLAB环境中运行脚本。
- 程序将自动执行数据生成、分析和绘图。
- 观察命令行输出的统计指标以及弹出的两个图形窗口。
- 若需分析自己的数据,只需替换主函数中“生成模拟数据”部分的代码,将变量
X_raw 赋值为用户自己的 $m times n$ 数据矩阵即可。
系统要求
- MATLAB R2016a 或更高版本(代码使用基础矩阵运算,兼容性较好)。
- 无需额外的工具箱(Toolbox),本算法完全基于MATLAB基础内置函数实现。