主成分分析是一种被广泛使用的提取数据的主要特征分量和对数据进行降维的算法。在许多领域的研究和应用中,获得的数据样本可能包含很多的变量,更多的变量虽然可以提供更丰富的信息,但是也大大增加了数据分析和处理的复杂度。所以,在很多情况下,需要找到一种方法,以尽可能减少数据的特征(维度),并尽量维持原数据中的有用信息,比如去除噪声、冗余特征或者不重要的特征等。
降维能使数据集更容易被使用,并且能减少算法的计算量、去除噪声,使结果更容易理解。用于数据降维的方法有很多,主成分分析是最常用的方法之一。
主成分分析的主要思想是将n维特征数据映射到k维的全新正交特征上,这k维特征就被称为主成分。主成分分析的工作就是按顺序从n维原始空间中寻找可以作为主成分的新空间的坐标轴。新的坐标轴与数据本身是密切相关的。
选择新坐标轴的方法如下。首先将坐标轴中心移到数据的中心,然后旋转坐标轴,选择原始数据在其上的投影方差最大的坐标轴作为第一个坐标轴。在这个坐标轴上,数据的投影最分散,因为方差表示数值的分散程度。第二个坐标轴选取与第一个坐标轴正交的所有坐标轴中使得方差最大的那一个。第三个坐标轴选取和前两个都正交的平面中方差最大的那一个。依此类推,由n维原始空间可以得到新空间的n个坐标轴。通过这种方法发现,大部分方差都包含在前k个坐标轴中,后面的坐标轴所含方差几乎为0。因此,可以只保留前k个坐标轴而忽略掉其余的坐标轴,从而实现对数据特征的降维处理。
其中:y表示数据集的投影,总共有m个数据;yi表示数据集中第i个数据的投影;μ表示均值,也就是数据的中心。由于最开始将坐标轴移动到了数据的中心,因此μ=0,计算方差时只需要计算yi的平方和。除以m-1是为了获得无偏估计。方差是针对一维的,而如果是多维数据,则协方差对角线上的数据就对应着每个维度的方差,其他的数据则对应不同维度之间的协方差。当协方差为0时,两个维度之间线性无关。找正交的坐标轴,就是要找协方差为0的维度,正交的坐标轴能尽可能多地表示原始信息。
假设数据集X有m个数据,有n维特征,将其按列排成n×m的矩阵,设投影矢量为w,它是一个维数为n的单位行向量,则X投影后的坐标为
y=wX (4.61)
它表示将X的每一列(每个数据)投影到w中以每一行的行向量为基(也可以理解为每一个新坐标轴)表示的空间中去。
投影后的数据协方差矩阵为
其中,表示求平均。假设每一个特征都平移到了数据的中心,那么式(4.62)可以简化为
其中,XXT/(m-1)正好是X的协方差矩阵,且是一个对称矩阵。
于是现在任务就变成了找到w矩阵。它能将原始数据X的协方差矩阵变成一个对角矩阵,只有对角线上的元素不为0,并且对角线上的元素按从大到小依次排列。这个w矩阵的前k行组成的矩阵就可以使得X从n维降到k维,且丢失的信息最少。由线性代数理论可以知道,对于XXT,一定可以找到n个单位正交的特征向量,将这n个特征向量按列组成矩阵E=(e1,e2,…,en),则有
其中,λ表示各特征向量的特征值(eigenvalue)。
于是,w=ET。
由以上分析得到,对m条n维数据进行主成分分析降维的基本算法如下。
(1)将原始数据按列组成n行m列的矩阵X。
(2)对X每一行(每一个维度或特征)进行零均值化,也就是将每一行的每个元素减去这该的均值。
(3)求X的协方差矩阵C,如果不除以m或m-1,则称为散布矩阵。使用协方差矩阵或散布矩阵都可以,不影响特征值和特征向量。
(4)求C的特征值及对应的特征向量。
(5)将特征向量按对应的特征值由大到小排列成矩阵,取前k行组成矩阵w。
(6)由y=wX即得到降到k维后的数据。
其中,步骤(4)可以采用方阵特征值分解法或矩阵的奇异值分解(SVD,singular value decomposition)法等不同方法来实现,scikit-learn中的生成分析算法就是采用的奇异值分解法进行求解。在sklearn中,为了保证结果的唯一,在进行奇异值分解后,使用svd_flip函数对符号进行调整,所以计算的结果和直接应用原理计算出来的结果有时候在符号上有一点区别。
算法对应的参考代码为:(www.xing528.com)
下面通过具体数值的计算过程来进一步说明算法的流程,并可以用以上代码进行验证计算结果。参考代码见所附文件PCA_Eigen Value.py。在sklearn工具包中使用主成分分析算法的方法请参考PCA_sklearn.py。
例4.10 假设数据为(0,0)、(0,2)、(1,2),(3,3)、(1,3),使用主成分分析算法将其从二维数组降到一维数组。
解 (1)组成矩阵。
(2)零均值化。
第1行的均值为1,第2行的均值为2,零均值化后得到
(3)计算散布矩阵。
(4)求特征值和特征向量。
特征值为
对应的特征向量为
其中,c1和c2可取任意实数,标准化后为
(5)由行向量组成w矩阵。
可以验证
(6)降维后数据为
降维投影后的结果演示如图4.33所示。
图4.33 数据降维结果演示
主成分分析算法的应用比较简单,没有需要调整的主观参数,可以作为一种通用算法。该算法通过舍弃数据中一些不重要的信息,降低了维度,相当于提升了数据的采样密度,可以缓解因为维度过高而引起的一系列问题。因为数据中的噪声往往都与最小特征值对应的特征向量有关,所以该算法也能起到一定的降噪作用。该算法不仅可以降低数据的维度,也使得降维之后的数据特征相互独立。在应用主成分分析算法时,不仅对训练数据进行处理,对验证数据和测试数据也要执行相同的操作,并且对验证数据和测试数据进行零均值化处理时,需要使用来自训练数据的均值,因为使用由训练数据训练出来的模型去预测测试数据的前提就是假设两者是独立同分布的。该算法舍弃了一些对于训练数据集看似无用的信息,而有可能这些信息对于真实数据来说恰好是重要的,这时就会加剧过拟合现象的发生。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。