《机器学习实战》学习笔记(二)利用PCA来简化数据

主成分分析(Principal Component Analysis, PCA)

在PCA中,数据从原本的坐标系转换到了新的坐标系,新坐标系的选择是由数据本身决定的。第一个新坐标轴选择的是原始数据中方差最大的方向第二个新坐标轴的选择和第一个坐标轴正交且具有最大方差的方向。该过程一直重复,重复次数为原始数据中特征的数目。大部分方差都包含在最前面的几个新坐标轴中,因此可以忽略余下的坐标轴,即对数据进行了降维处理。

理解PCA所需要的线性代数相关知识如下:

向量内积

接着从几何角度来分析,为了简单起见, 假设A,B均为二维向量,\(\alpha\)为A,B之间的夹角,$则:$$A \cdot B = |A||B|cos(\alpha)$$几何表示见下图:可以看出A与B的内积等于A到B的投影长度乘以B的模。

常说的坐标轴如上图所示,以x轴和y轴正方向长度为1的向量为标准。向量(3,2)实际是说在x轴投影为3而y轴投影为2。要准确描述向量,首先要确定一组基,然后给出在基所在的各个直线上的投影。为了方便求坐标,希望这组基向量模长为1,因为向量的内积运算,当模长为1时,内积可以直接表示投影所以对于向量(3,2)来说,如果想求它在(1,0),(0,1)这组基下的坐标,分别内积即可,当然内积完了还是(3,2),即:

最大可分性

如果有一组N维向量,现在要将其降到K维(K<N),那么应该如何让选择K个基才能最大程度保留原有的信息?一种直观的想法是:希望样本点到超平面上的投影能尽可能分散,因为如果重叠就会有样本消失。

方差

协方差

协方差矩阵

矩阵对角化

根据上述讨论的最终优化目标是,希望最终找到一组这样的K个单位正交基,使得原始数据变换到这组基上后,各变量两两之间的协方差为0,变量的方差尽可能大,所以需要将除对角线外的其他元素化为0,并且在对角线上将元素按大小从上到下排列这样就达到了优化目的。

设原始数据矩阵X对应的协方差矩阵为C,而P是一组基按行组成的矩阵,设Y=PX,则Y为X做基变换后的数据,设Y的协方差矩阵为D,现在看看D和C的关系:

通过上式可以看出,要找的P是能让原始协方差矩阵对角化的P,优化目标变成了寻找一个矩阵P,满足\(PCP^T\)是一个对角矩阵,并且对角元素按从大到小依次排列,那么P的前K行就是要寻找的基,用P的前K行组成的矩阵乘以X就使得X从N维降到了K维。

协方差矩阵C是一个对称矩阵,对称矩阵有以下几个性质:

1、对称矩阵不同特征值对应的特征向量必正交。
2、设特征向量λ重数为r,则必然存在r个线性无关的特征向量对应于λ,因此可以将这r个特征向量单位正交化。

其中Λ是对角矩阵,其对角元素为各特征向量对应的特征值(可能有重复)。到这里,发现已经找到了需要的矩阵P,\(P=Q^T\),P是协方差矩阵的特征向量单位化后按行排列出的矩阵,其中每一行都是C的一个特征向量,如果P按照Λ中特征值从大到小,将特征向量从上到下排列,则用P的前K行组成的矩阵乘以原始矩阵X,就得到了需要的降维后的数据矩阵Y。

PCA算法求解步骤

设有m条n维数据:

1、将原始数据按照列组成n行m列矩阵X(每一列代表一个数据)

2、将X的每一行进行零均值化

3、求出协方差矩阵\(C=\frac{1}{m}XX^T\)

4、求出协方差矩阵的特征值以及特征向量

5、将特征向量按对应特征值大小从上到下按行排列成矩阵,取前K行组成矩阵P

6、Y=PX即为将维到K维后的数据

示例1:利用Numpy实现PCA

  • 注意loadDataSet方法返回的数据矩阵,每一列代表一个样本,每一行代表一个特征
  • 这里有一点之前不太懂的地方,就是如何通过降维后的数据重构原始数据,原理是这样的:
  • 计算降维后的数据:Y=PX
  • 两边同时乘以\(P^T\),则\(P^TY = P^TPX\),又因为矩阵P是由单位正交的特征向量组成,所以\(P^TP = E\),所以可以得出\(X=P^TY\),之后再加上均值就可以得到重构后的原始数据。

示例2:利用PCA对半导体制造数据进行降维

  • 2.1 数据预处理:将所有NaN替换成平均值
  • 未替换之前的数据(返回的数据secomDataMat每一行代表一个样本,与上一个示例中的不同)
  • 替换之后的数据
  • 2.2 零均值化
  • 2.3 计算协方差矩阵并进行特征值分解
  • 需要注意的是这个计算协方差矩阵的方法np.cov(),这里比起示例1多了一个参数rowvar,这个参数默认为True,此时表示每一行代表一个特征,每一列代表一个样本,但此时的数据是正好相反的(secomDataMat每一行代表一个样本),所以需要将该参数设置为False。
  • 2.4 观察特征值的结果
  • 会发现其中很多值都是0,这就意味着这些特征都是其他特征的副本,也就是说,它们可以通过其他特征来表示,而本身并没有提供额外的信息。
  • 2.5 计算方差百分比和累积方差百分比
  • 从上面的计算结果可以看出,前六个主成分就覆盖了96.9%的方差,而前20个主成分则覆盖了99.3%的方差,这就表明,如果保留前6个而去除后584个主成分,就可以实现大概100:1的压缩比。

小结

降维技术使得数据更易使用,并且往往能够去除数据中的噪声,使得其他机器学习任务更加精确。降维往往作为预处理步骤,在数据应用到其他算法之前清洗数据。PCA可以从数据中识别其主要特征,它是通过沿着数据最大方差方向旋转坐标轴来实现的,选择方差最大的方向作为第一条坐标轴,后续坐标轴则与前面的坐标轴正交。

参考书籍:机器学习实战(Machine Learning in Action)