PCA是使用得最普遍的降维算法,是一种非监督式线性降维算法,要将数据降维到维子空间,包括两个步骤:
- 找出最能保存数据方差的超平面(包括k个基向量)
- 将数据投影到该超平面
这个基向量又称为主成分。经过数学计算可知,这些基向量分别是数据矩阵最大的的特征值所对应的单位特征向量。
注:PCA假设数据最初是以原点为中心
实际上包括两个思路:
- 最大重构性
- 最大可分性
其中最大可分性就对应上述步骤,方差最大化。今天花了几乎一整天推导,发现细节化之后就很容易绕进去,然后作出了几点改进:
- 不必列出具体的样本数,用随机变量代替
- 将运算高度向量化,部分步骤推导的形式可以具体化之后确定
1. 数据定义
全程并不会讨论具体的样本个数。
原数据:随机变量其中为随机变量维度。
为了后续计算便捷,原数据是经过了中心化的,有:%3D0#card=math&code=E%28%5Cmathbf%20x%29%3D0)
投影(降维)后的数据:,为投影后的维度。
投影矩阵(转移矩阵)为,其中为基向量,有
于是有:
2. 基于最大可分性
基本思想:将源数据的维数从降到(),并最大程度上保持方差。即将数据从原空间映射到由k个线性无关向量张成的子空间。
对中各分量按方差从大到小进行排序,如果有,则称为第一主成分,为第主成分。就的方差:
%20%26%3D%20E(z_i-E(z_i))%5E2%20%5C%5C%0A%26%3D%20E(z_i)%5E2%5C%5C%0A%26%3D%20E(w_i%5ETX)%5E2%20%5C%5C%0A%26%3D%20E(w_i%5ETXX%5ETw_i)%5C%5C%0A%26%3D%20w_i%5ETE(XX%5ET)w_i%5C%5C%0A%26%3D%20w_i%5ET%5CSigma%20w_i%0A%5Cend%7Balign%7D%0A#card=math&code=%5Cbegin%7Balign%7D%0AD%28z_i%29%20%26%3D%20E%28z_i-E%28z_i%29%29%5E2%20%5C%5C%0A%26%3D%20E%28z_i%29%5E2%5C%5C%0A%26%3D%20E%28w_i%5ETX%29%5E2%20%5C%5C%0A%26%3D%20E%28w_i%5ETXX%5ETw_i%29%5C%5C%0A%26%3D%20w_i%5ETE%28XX%5ET%29w_i%5C%5C%0A%26%3D%20w_i%5ET%5CSigma%20w_i%0A%5Cend%7Balign%7D%0A)
对该主成分,优化目标为:
%0A#card=math&code=%5Carg%5Cmax_%7Bw_i%7D%20D%28z_i%29%0A)
利用拉格朗日乘子法,拉格朗日函数为:
%0A#card=math&code=w_i%5ET%5CSigma%20w_i%20-%20%5Clambda%20%28w%5ETw-1%29%0A)
上式对进行求导并令整式为0,(对矩阵求导)有:
化简有:
代入#card=math&code=D%28z_i%29)可得%3D%5Clambda#card=math&code=D%28z_i%29%3D%5Clambda)。方差为协方差矩阵的特征值,投影向量为对应的单位化特征向量。
为保留最多的方差信息,并降维到,可对协方差矩阵进行特征值分解,将特征值从大到小排列,取前个,对应的单位化特征向量即构成投影矩阵(转移矩阵)。
3. 基于最大重构性思想
实际上指的是,原向量与在投影超平面上的投影向量之后距离最小,也是最小平方误差。
向量的投影坐标为:%5ET#card=math&code=zi%20%3D%20%28x_i%5ETW%29%5ET),投影向量为![](https://g.yuque.com/gr/latex?%5Chat%20x_i%3D%5Csum%7Bj%3D1%7D%5Edz%7Bij%7Dw_j#card=math&code=%5Chat%20x_i%3D%5Csum%7Bj%3D1%7D%5Edz_%7Bij%7Dw_j),优化目标为:
优化处理之后最终可以得到跟基于最大可分性完全相同的结果。
4. 计算步骤
- 将数据进行预处理(通常为中心化、标准化)
- 确定要降维成的维数(即k个主成分)
- 计算数据的协方差矩阵
- 对协方差矩阵进行特征值分解,将对角矩阵元素按从大到小排列,取对角矩阵的前项,对应的特征向量为降维子空间的基向量
另外的计算方式:
- 可以采用相关矩阵替代上面的协方差矩阵,顺便可以去掉对数据的预处理步骤
- 采用奇异值分析代替特征值分解,对数据矩阵的转置代替上面的协方差矩阵。