如何进行PCA分析?

古哥 软件信息

介绍Matlab中用于PCA分析的函数以及计算方法。

回复

共1条回复 我来回复
  • 智能AI的头像
    智能AI
    专业的OpenAI智能系统,使用的模型为:gpt-3.5-turbo。
    评论

    PCA原理

    PCA,即主成分分析(Principal Component Analysis),是一种常用的数据分析方法。其主要思想是通过线性变换将高维度数据映射到低维度空间中,使得不同变量之间的相关性变得更小,而同一组数据之间的差异或方差则尽可能地大。具体来说,PCA的目标是找到一组正交基,使得这些基组成的向量能够线性重建整个数据集的方差,且重建方差最大。

    在计算过程中,将数据集表示为一个矩阵X(其中每一行代表一个样本数据),并设 X 的维度为n×m,其中 n 为样本数量,m 为特征数。同时,设矩阵U为基向量矩阵,维度为 m×k,其中 k 为映射后的低维度空间的维度。则PCA的目标为:找到 U 使得 X 映射到U空间后能够最大化重建方差,即:

    $Var(U^TX)$

    同时,U的基向量必须满足正交性约束,即基向量之间互相垂直。

    PCA的基础公式

    PCA的基础公式有如下几个:

    PCA 变换后的矩阵: Y= XU
    PCA 的反变换: X′ = YU′T
    基向量矩阵 :U=(u1,u2,…,uk)
    样本均值:μ = (1/n) * ∑x
    数据归一化: X′= X – μ

    PCA计算过程

    PCA的计算过程包括以下几个步骤:

    1.数据归一化
    由于PCA是一种基于协方差矩阵的线性变换方法,因此必须先将数据归一化处理,具体来说,即针对每一维度数据,将所有样本的数据减去其均值,再除以标准差,即可将所有数据映射到同一区间内,消除量纲的影响。

    2.求协方差矩阵
    对于归一化后的数据X,可以通过计算其协方差矩阵来量化数据之间的相关性。其公式为:

    $Cov(X) = (1/n)(X‐μ) (X‐μ) ^T$

    其中,μ为样本的均值,n为样本数。

    3.求协方差矩阵特征值和特征向量
    对于协方差矩阵C,可以通过求解其特征值和特征向量来获取数据的主成分。具体来说,对于特征值 λi 和对应的特征向量 ui,有:

    $(C – λiI)ui = 0$

    其中, I 为单位矩阵。将该式变形可得:

    $(X‐μ)(X‐μ)Tui = λiui$

    上述式子表明,特征值 λi 表示主成分在该方向上的方差,而特征向量 ui 表示该主成分在原始数据空间中的方向。

    4.筛选主成分,确定低维空间
    根据特征值的大小和其对应的特征向量,可以确定哪些主成分对数据表征更加重要。具体来说,可以以如下两种方式来筛选主成分:

    – 对特征值进行排序,选取保留主成分的阈值。对于保留主成分数目为k的情况,只需选择前 k 大的特征值对应的特征向量即可。
    – 根据主成分的方差累积占比进行筛选。具体来说,设数据的前k个主成分方差累积占比为p,即

    $p = (λ1+λ2+…+λk)/(λ1+λ2+…+λm)$

    则选择k的值,以保证p达到预设的阈值即可。

    5. 进行线性变换
    确定保留的主成分后,将它们组成新的基向量矩阵U,即可将原数据X映射到低维度空间中。映射后的矩阵为:

    Y = XU

    其中,Y的维度为n×k,即每个样本被映射到了k维空间中。

    PCA在Matlab中的实现

    在Matlab中,可以使用princomp函数来实现PCA分析。该函数的基本用法如下:

    1.输入参数
    princomp(X): X为计算PCA的数据。若X为 m*n 的矩阵,则表示有m个样本,每个样本有n个特征。若 X 给定,则可以省略第二个参数。

    2.输出参数
    [COEFF,~,LATENT,~] = princomp(X): COEFF 为主成分对应的主向量矩阵,其中第k列即为第k个主成分对应的特征向量;LATENT 为各个主成分对应的特征值(按照从大到小排序);

    3.可选参数
    princomp(X,’econ’): 在n>>m时,可以使用该参数来进行经济型奇异值分解,节约计算时间;

    4.示例代码:

    “` matlab
    % 加载数据
    load fisheriris
    X = meas;

    % 数据归一化
    X0 = (X – repmat(mean(X),size(X,1),1))./repmat(std(X),size(X,1),1);

    % 计算主成分
    [coeff,score,latent] = princomp(X0);

    % 可视化结果
    figure; hold on;
    gscatter(score(:,1),score(:,2),species);
    xlabel(‘PC1’);ylabel(‘PC2’);
    title(‘PCA analysis of fisheriris data’);
    “`

    综上,在进行PCA分析时,需要先处理好原始数据,然后计算其协方差矩阵,再求解特征向量和特征值,最后筛选出主成分并进行线性变换。Matlab中的princomp函数可以进行快捷的计算,并输出主向量矩阵COEFF和主成分对应的特征值。

    2023年05月22日 09:36 0条评论
微信小程序
微信公众号