PCA原理
PCA思想
PCA是一种重要的降维方法之一,就是找出数据里最主要的方面,用主要方面代替原数据,并希望损失尽可能小。
PCA推导:基于最小投影距离
假设m个n维数据((x^{(1)},x^{(2)},...,x^{(m)}))都已经进行了中心化,即(sumlimits_{i=1}^mx^{(i)}=0),经过投影变换后得到的新坐标系为({w_1,w_2,...,w_n}),其中(w)是标准正交基,即(lVert w Vert_2=1,w_i^Tw_j=0)。
如果我们将数据从n维降到n'维,即丢弃新坐标系中部分坐标,则新坐标系为({w_1,w_2,...,w_{n'}}),样本点(x^{(i)})在n'维坐标系中的投影为:(z^{(i)}=(z_1^{(i)},z_2^{(i)},...,z_{n'}^{(i)})^T),其中,(z_j^{(i)}=w_j^Tx^{(i)})是(x^{(i)})在低维坐标系里第j维的坐标。
如果我们用(z^{(i)})来恢复原始数据(x^{(i)}),则得到恢复数据(overline x^{(i)}=sumlimits_{j=1}^{n'}z_j^{(i)}w_j=Wz^{(i)})其中,W为标准正交基组成的矩阵。
现在我们考虑整个样本集,我们希望所有的样本到这个超平面的距离足够近,即最小化下式:
将这个式子进行整理可以得到
注意到(sumlimits_{i=1}^{m}x^{(i)}x^{(i)T})是数据集的协方差矩阵,W的每个向量(w_j)是正标准正交基,而(sumlimits_{i=1}^{m}x^{(i)T}x^{(i)})是一个常数,最小化上式等于
可以发现,最小值对就的W由协方差矩阵(XX^T)最大的n'个特征向量组成。
利用拉格朗日函数可以得到
对W求导有(-XX^TW+lambda W=0),整理如下
这样可以看到,W为(XX^T)的n'个特征向量组成的矩阵,面(lambda)为(XX^T)的若干个特征值组成的矩阵,特征值在主对角线上,其余位置为0。当我们将数据集从n维降到n'维时,需要找到的最大的n'个特征值对应的向量。这n'个特征向量组成的矩阵W即为我们需要的矩阵,对于原始数据集,我们只需要用(z^{(i)}=W^Tx^{(i)}),就可以把原始数据集降维到最小投影距离的n'维数据集。
PCA推导:基于最大投影方差
假设m个n维数据((x^{(1)},x^{(2)},...,x^{(m)}))都已经进行了中心化,即(sumlimits_{i=1}^mx^{(i)}=0),经过投影变换后得到的新坐标系为({w_1,w_2,...,w_n}),其中(w)是标准正交基,即(lVert w Vert_2=1,w_i^Tw_j=0)。
如果我们将数据从n维降到n'维,即丢弃新坐标系中部分坐标,则新坐标系为({w_1,w_2,...,w_{n'}}),样本点(x^{(i)})在n'维坐标系中的投影为:(z^{(i)}=(z_1^{(i)},z_2^{(i)},...,z_{n'}^{(i)})^T),其中,(z_j^{(i)}=w_j^Tx^{(i)})是(x^{(i)})在低维坐标系里第j维的坐标。
对于任意样本(x^{(i)}),在新的坐标系中的投影为(W^Tx^{(i)}),在新坐标系中投影方差为(W^Tx^{(i)}x^{(i)T}W),要使所有的样本投影方差和最大,也就是最大化(sumlimits_{i=1}^{m}W^Tx^{(i)}x^{(i)T}W)的迹,即
与上面一样,只是少一个负号,利用拉格朗日函数可以得到
对W求导有(XX^TW+lambda W=0),整理如下
这样可以看到,和上面一样。W为(XX^T)的n'个特征向量组成的矩阵,面(lambda)为(XX^T)的若干个特征值组成的矩阵,特征值在主对角+--位置为0。当我们将数据集从n维降到n'维时,需要找到的最大的n'个特征值对应的向量。这n'个特征向量组成的矩阵W即为我们需要的矩阵,对于原始数据集,我们只需要用(z^{(i)}=W^Tx^{(i)}),就可以把原始数据集降维到最小投影距离的n'维数据集。
PCA算法流程
输入:n维样本集(D=(x^{(1)},x^{(2)},...,x^{(m)})),要降维到的维数n'
输出:降维后的数据集D'
-
对所有样本进行中心化:(x^{(i)}=x^{(i)}-frac{1}{m}sumlimits_{j=1}^{m}x^{(j)})
-
计算样本的协方差矩阵(XX^T)
-
对矩阵(XX^T)进行特征值分解
-
对出最大的n'个特征值对应的向量((w_1,w_2,...,w_{n'})),将所有向量标准化后,组成特征向量矩阵W。
-
对样本集中的每一个样本(x^{(i)})转化为新的样本(z^{(i)}=W^Tx^{(i)})
-
得到输出样本集(D'=(z^{(1)},z^{(2)},...,z^{(m)}))
核主成分分析KPCA
在PCA算法中,我们假设存在超平面,可以让我们对数据进行投影。但有些时候数据不是线性的,不能直接使用PCA的方法直接降维。这就需要用和SVM一样的核函数的思想,先把数据集从n维映射到线性可分的高维N>n,然后再从N维降到一个低维度n',这里有n'<n<N。
假设高维空间的数据是由n维空间的数据通过映射(phi)产生,对于n维空间的特征分解:
映射为
和PCA一样进行降维。
方差与协方差的意义
方差:用来度量随机变量与其数据期望之间的偏离程度
协方差:用来度量两个变量之间的相关关系。
协方差:
- 大于0,正相关
- 小于0,负相关
- 等于0,不相关
- 协方差小的,两者相关性也小
PCA算法总结
PCA优点:
- 仅以方差衡量信息量,不受数据集以外的因素影响
- 各主成分之前正交,可消除原始数据成分间的相互影响因素
- 计算方法简单,主要计算是特征值分解,易于实现
PCA缺点:
- 主成分各特征维度的含义模糊,不如原样本的特征解释性强
- 方差小的非主成分也可能含对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。
sklearn使用PCA
类库
from sklearn.decomposition import PCA
参数
- n_components:降维后特征维度数量
- whiten:是否进行白化
- svd_solver:奇异值分解的方法
实例
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
pca.fit(x)