主成分分析
一种常用的数据分析技术,主要用于数据降维,在众多领域如统计学、机器学习、信号处理等都有广泛应用。
主成分分析是一种通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量(即主成分)的方法。这些主成分按照方差从大到小排列,方差越大,包含的原始数据信息越多。通常会选取前几个方差较大的主成分,以达到在尽量保留原始数据信息的前提下降低数据维度的目的。
它通过将多个指标转换为少数几个主成分,来实现少数几个变量可以反映出原始的大部分数据的能力(这里的多个指标一般都具有不低的相关性
这里的主成分是原本的变量的线性组合
比如一个衣服的尺码的设计的时候会有衣长,袖长腰围等等一系列的变量,但是我们经过主成分分析,就可以将其转化为身高,体重两个变量就可以在很大程度上去帮助我们去反应衣服的大部分信息
大概的步骤和对应代码:
1,得到样本的R矩阵
R = corrcoef(x);
2,计算R矩阵的相关系数矩阵的特征值和特征向量
[V,D] = eig(R); % V 特征向量矩阵 D 特征值构成的对角矩阵(从小到大)
3,根据特征值计算器的贡献率,然后计算累计贡献率,当累计贡献率达到一定的值的时候我们就得到了一个能够记录一定比列的一些主成分
这里要先把特征值取出来并且倒置:
lambda = diag(D); % diag函数用于得到一个矩阵的主对角线元素值(返回的是列向量)
lambda = lambda(end:-1:1); % 因为lambda向量是从小大到排序的,我们将其调个头
然后开始计算贡献度
contribution_rate = lambda / sum(lambda); % 计算贡献率
cum_contribution_rate = cumsum(lambda)/ sum(lambda); % 计算累计贡献率 cumsum是求累加值的函数
V=rot90(V)';% rot90函数可以使一个矩阵逆时针旋转90度,然后再转置,就可以实现将矩阵的列颠倒的效果
根据主成分的个数求出主成分的线性表达式
%% 计算我们所需要的主成分的值
m =input('请输入需要保存的主成分的个数: ');
F = zeros(n,m); %初始化保存主成分的矩阵(每一列是一个主成分)
for i = 1:m
ai = V(:,i)'; % 将第i个特征向量取出,并转置为行向量
Ai = repmat(ai,n,1); % 将这个行向量重复n次,构成一个n*p的矩阵
F(:, i) = sum(Ai .* X, 2); % 注意,对标准化的数据求了权重后要计算每一行的和
end
4,要根据主成分的一些线性组合做出一个合适的解释
优缺点:
优点
数据降维效果显著:能有效将高维数据转换为低维表示,同时保留大部分关键信息。在处理高维数据集(如具有大量特征的基因数据、高分辨率图像数据)时,可大幅减少数据维度,降低后续分析和计算的复杂度。例如,基因数据可能包含成千上万个基因表达量作为特征,PCA 可将其压缩到少数几个主成分,在不损失太多信息的前提下,使数据更易于处理和分析。
消除特征相关性:原始数据的特征之间往往存在相关性,这可能对某些分析和模型造成干扰。PCA 通过将数据转换到新的正交坐标系,使主成分之间相互独立,从而消除特征间的冗余信息。例如在分析经济指标时,一些经济变量之间可能存在较强的相关性,PCA 可将这些相关变量转化为相互独立的主成分,有助于更清晰地理解数据结构和进行后续建模。
易于计算和实现:PCA 的计算过程相对明确,基于矩阵运算,主要步骤包括计算协方差矩阵、特征值分解等,在许多编程语言(如 Python 的 NumPy、SciPy 库)中都有现成的函数实现,便于研究者和工程师应用。
数据可视化助力:对于高维数据,直接可视化非常困难。PCA 将高维数据降维到二维或三维后,可在平面或三维空间中直观展示数据点分布,帮助发现数据中的潜在模式、聚类结构或异常点。例如在客户细分研究中,将多个客户属性通过 PCA 降维后在二维图上展示,能直观地看到不同客户群体的分布情况。
缺点
主成分缺乏可解释性:虽然主成分能够有效保留数据的大部分方差,但它们通常是原始特征的复杂线性组合,难以直接赋予实际的物理或业务含义。比如在分析用户行为数据时,得到的主成分可能无法直接对应到具体的用户行为指标,不利于领域专家基于业务知识进行解读和应用。
可能丢失重要信息:尽管 PCA 旨在保留最大方差信息,但在降维过程中不可避免地会舍弃部分信息。当舍弃的信息对于特定的分析任务(如某些对细节敏感的分类问题)至关重要时,可能会影响分析结果的准确性。例如在医学图像诊断中,如果舍弃的信息恰好与某些疾病的细微特征相关,可能导致诊断失误。
对数据分布有要求:PCA 假设数据具有高斯分布,在这种分布下能较好地发挥作用。然而,实际数据往往并不完全符合高斯分布,对于非高斯分布的数据,PCA 可能无法充分捕捉数据的内在结构,降维效果可能不理想。
依赖数据整体特征:PCA 基于数据的整体协方差结构来确定主成分,对于数据中的局部结构或离群点较为敏感。离群点可能会对协方差矩阵的计算产生较大影响,进而改变主成分的方向和解释,导致降维结果不能准确反映数据的真实特征。
应用场景
数据可视化:高维数据难以直接可视化,通过 PCA 将数据降到二维或三维,可在平面或三维空间中绘制数据点,帮助观察数据的分布模式和潜在结构。例如在基因表达数据分析中,基因数量可能成千上万,利用 PCA 降维后,可在二维图上展示不同样本间的关系。
机器学习预处理:在训练机器学习模型时,高维数据可能导致计算量增大、过拟合等问题。PCA 用于降低数据维度,去除噪声和冗余信息,同时保留数据的主要特征,提高模型训练效率和泛化能力。如在图像识别中,将高分辨率图像的像素特征通过 PCA 降维后输入分类模型。
信号处理:在处理如音频、视频信号时,信号可能包含大量冗余信息。PCA 可去除冗余,提取主要成分,实现信号的压缩和去噪。例如在语音识别中,对语音信号进行 PCA 处理,可减少数据量,提高识别效率。