1、问题提出
在处理实际问题时,多变量问题是经常遇到的,一方面维度太高会增加问题的复杂性,另一方面变量之间具有一定的相关性,导致信息冗余。所以能否只用少数的几个变量来表示原始多个变量,并且信息也尽可能不丢失呢?主成分分析(Principal components analysis,PCA)就是解决这类问题的工具。
2、算法原理
PCA是由K.Pearson在1901年首先提出的,是把原来多个变量化为少数几个综合指标的一种数据分析技术。从数学上看,简单来说就是对数据进行降维操作。下面通过一个例子对其进行解释:
首先选取一个二维问题,里面包含身高与体重两个维度,并且每个维度下都有5个样本,然后在二维平面(也就是身高与体重组成的坐标系)上描绘出来,此时可以看到五个点,如图所示。
接下来考虑对其进行降维操作,对二维平面降维得到一维,即将坐标系降维得到坐标轴,此时分别对体重和身高进行投影,如图所示。
解决了降维问题之后,该如何评价降维方法的好坏呢?在统计学上,方差用来刻画数据的离散程度,方差越大,数据的离散程度越多。此外,方差也可以刻画数据包含的信息量,方差越大,数据包含的信息量越大。把成千上万维的一个问题降低到几维的时候,就是要保证原始数据里面所包含的信息尽可能的不丢失。从数学上看,也就是要让这组变量之间的方差尽可能的大。
由初中数学知识可知方差公式为:(式2-1)
通过方差公式(式2-1)可以得到,投影到体重维度的方差为:
投影到身高维度的方差为:
通过比较方差可知,降低到身高维度会更好一些,因为其方差较大,所包含的信息量更多。
除此之外还有没有其他降维方式呢?实际上也是有的。如果从方差的角度来看,可以在二维平面中找到一条斜线(如下图所示),把这些点投影到这条斜线上,可以发现这些点的离散程度更大,则方差也大。那么如何找到这条斜线呢?这就引出了本文所要讨论的PCA的方法。
PCA求解方法:协方差矩阵、相关系数矩阵、奇异值分解、交替最小二乘法。本文要讲的方法是相关系数矩阵,该方法简单,直观且容易理解。
首先选取M个样本,每个样本有N个指标,也就是N个维度,如表所示。
(1)对样本数据进行标准化
不同指标的量纲通常是不完全相同的,为了使各指标之间具有可比性,须消除指标的量纲。因为量纲的不同就会使有些数据很大,有些数据很小。很小的数据方差本来比较大,但它在很大的数据面前方差就表现的非常小,这是不合理的,然后标准化可以消除量纲的影响,所以首先对样本数据进行标准化,使得其均值为0,方差为1且消除量纲。
标准化公式为: (式2-2)
经标准化处理后可得到标准化矩阵:(式2-3)
(2)计算相关系数,得到相关系数矩阵
计算标准化后样本矩阵的每两个指标间的相关关系,得到相关系数矩阵R,即n个指标的协方差矩阵。计算相关系数矩阵的公式为:
(式2-4)
(3)计算矩阵R的特征根及相应的特征向量
于是得到N个非负特征根,和对应于特征根的N个单位化特征向量,构成一个正交矩阵(变量之间无任何相关性,也即没有任何冗余信息),记为a,则
(式2-5)
其中矩阵a的每一列为对应于特征值的特征向量。
(4)计算主成分
N个主成分如下:
(式2-6)
通过特征向量与标准化矩阵,可以求出N个主成分。通过式2-6可以看到,第一主成分Z1实际上就是矩阵a的第一列(即最大特征值所对应的特征向量)与标准化矩阵的第一列分别相乘再相加所得,同理可得N个主成分。此时也许有人会说原始数据是N个特征,变化之后还是N个特征,实际上维度并没有降低,所以接下来就开始降低维度,也就是从N个主成分里面选出K个。
(5)选择主成分
总方差中属于主成分Zi的比例为,称为主成分Zi的贡献率。
前K个主成分的贡献率之和称为主成分的累积贡献率。通常取较小的K,使得累积贡献率达到一个较高的百分比(如80%~90%)。此时,Z1,Z2,……,Zk,可用来代替X1,X2,……,Xn,从而达到降维的目的,而损失的信息却不多。
3、结果分析
对于以上二维问题,通过借助MATLAB软件对其进行编程求解(如果不会使用MATLAB软件,可以去B站搜索UP主“CleverFrank”,里面有非常详细的视频讲解),样本数据如图3-1所示,程序及运算结果分析如下:
图3-1 样本数据
(1)对样本数据标准化。首先将样本数据存放到data中,构成了5行2列的原始矩阵,然后开始对其进行标准化,经标准化处理后得到标准化矩阵X,其中标准化处理时可以通过调用MATLAB中的zscore函数得到标准化矩阵,也可以通过式2-2得到,标准化处理程序如图3-2所示。程序经过运行之后,可得到原始矩阵data与标准化矩阵X,如图3-3所示。
图3-2 标准化处理程序
图3-3 原始矩阵与标准化矩阵
(2)计算相关系数矩阵。此时可以通过调用MATLAB中的cov函数得到相关系数矩阵,也可以通过式2-4得到。程序及运行结果如图3-4所示。
图3-4 相关系数矩阵
(3)计算相关系数矩阵R的特征值,特征向量以及主成分贡献率。此时可以通过调用MATLAB中的pcacov函数得到。程序及运行结果如图3-5所示。
图3-5 特征值,特征向量及贡献率
其中coeff表示特征向量,latent表示特征值,explained表示主成分贡献率。特征值1.9184所对应的特征向量为coeff的第一列且其贡献率达到95.9187,特征值0.0816所对应的特征向量为coeff的第二列且贡献率为4.0813。
(4)计算主成分及其方差,并与原始数据分别投影到身高与体重维度的方差做比较,可以发现第一主成分的方差为37.15,原始数据的第一主成分的方差为22.8,所以通过PCA可以明显提高第一主成分的方差,从而减少信息的丢失。程序及运行结果如图3-6所示。
图3-5 主成分及其方差
综上所述,对于这个二维问题,通过PCA可以直接使用一个维度的信息来衡量原来两个维度所表示的信息,并且信息的丢失仅仅达到4%左右,对于更高维度的问题,使用PCA的方法进行降维,就可以将复杂问题简单化以达到预期效果。下面通过一个高维度的问题加深对PCA的理解。问题原始数据如表3-1所示。
表3-1 问题原始数据
通过参考二维问题的处理过程,将上述问题转化为MATLAB编程语言如图3-6所示。
图3-6 MATLAB源程序
将上述程序在MATLAB运行之后,结果如图3-7所示,从而可以得到第一主成分与第二主成分贡献率分别为64.0503,23.6168,计算公式如下:
图3-7 特征向量,特征值及贡献率
所以,通过计算发现前两个主成分累积贡献率为87.67%。其中第一主成分主要和数学、物理、化学三科有很强的正相关性,第一主成分起名为“理科能力”,第二主成分和所有特征都正相关,可起名为“综合能力”。
以上内容是根据B站UP主 “CleverFrank” 所讲视频整理总结的!有总结不到位和错误的地方欢迎大家批评指正。
欢迎大家多多关注UP主“CleverFrank”!以及“数模很美,算法不难”公众号,可以获取详细的数学建模相关资料。