首页 百科知识 主成分分析的算法

主成分分析的算法

时间:2022-02-18 百科知识 版权反馈
【摘要】:6.1.8 主成分分析的NIPALS算法前面介绍的求解主成分的Jacobi分解方法是一次计算出全部特征向量后求出所有的主成分。相对于根据协方差矩阵特征分解求主成分的算法,NIPALS算法可不必求全部得分与载荷,可减少主成分分解过程的工作量,适合于大型数据矩阵的PCA。

6.1.8 主成分分析的NIPALS算法

前面介绍的求解主成分的Jacobi分解方法是一次计算出全部特征向量后求出所有的主成分。当数据矩阵较小时,采用Jacobi分解法求主成分的情况较多,如例6-3中变量为2,协方差矩阵是个2×2的矩阵,即使手算进行特征分解也很容易实现。

但当协方差矩阵较大(即变量很多)时,这种一次性求出所有特征向量的分解方法很耗时,也无必要(因为特征值很小的特征向量没有必要求出)。尤其在分析化学测试数据中,处理的大都是上千个点的矢量或矩阵,当数据矩阵阶数较大时(>50),用Jacobi法运算速度很慢。所以化学计量学常用非线性迭代偏最小二乘法(NIPALS)与线性代数中常用的奇异值分解法(Singular Value Decomposition,SVD)来进行主成分分解。

NIPALS(Nonlinear Iterative Partial Least Squares)算法不是一次算出所有的特征向量,而是逐步算出来每一个特征向量,其所对应的主成分得分也随之同步计算出来。

NIPALS迭代格式如下(设主成分的序号h=1)。

(1)取X任一列(通常用第一列)矢量作为第一个得分向量th的初值

(2)由于th与X间应存在线性关系,回归可得载荷向量vh

(3)将vh进行归一化化为单位长度向量

(4)再根据vh与X间应存在线性关系,回归可得新的得分向量th

如果第(4)步和第(1)步th小于阈值,转第(5)步,计算残差;否则转第(2)步。

(5)

上式右端将X减去收敛的载荷和得分的外积,得到X的残差,赋给X。将th、vh存下来,转第一步,h=h+1,如此循环,直到所需要的h个载荷都求出来(h≤p)。

上面迭代算法和直接解协方差矩阵特征方程的关系可以这样来理解,将第(4)步式(6-33)代入第(2)步式(6-31),注意到第(2)、第(3)和第(4)步的分母都是一个标量,可用一个广义的常数d来表示它们的某种结合,由此可以得到

式中,XTX就是协方差矩阵,和通常定义只相差一个因子1/n。式(6-36)表明,NIPALS迭代的确求出了协方差矩阵的特征值和特征矢量。得到载荷向量后,可以方便地由下式求特征值

从NIPALS迭代算法可以看到,后一个载荷与得分是应用前面回归拟合后留下的残差去计算的,它所反映的是前一个主成分所未能解释和代表的原始变量矩阵的剩余信息,其信息量较前一个载荷与得分要少。

相对于根据协方差矩阵(或相关矩阵)特征分解求主成分的算法,NIPALS算法可不必求全部得分与载荷,可减少主成分分解过程的工作量,适合于大型数据矩阵的PCA。此外,NIPALS可帮助理解后面介绍的偏最小二乘PLS算法原理。

奇异值分解(SVD)方法具有运算速度快、非常适合大型数据矩阵的处理的特点,并且可同时给出特征值、载荷阵(特征向量矩阵)与得分矩阵(即主成分矩阵)。其算法原理在线性代数中有介绍,MATLAB中的主成分分解函数princomp.m文件即以该算法为基础,该方法运算速度远高于Jacobi分解方法,无论是大型数据矩阵(如由几百、几千个光谱点组成的数据矩阵),还是只有几个变量的数据矩阵,采用princomp函数进行主成分分析均十分适合。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈