主成分分析PCA
PCA原理
PCA思想
PCA是一种重要的降维方法之一,就是找出数据里最主要的方面,用主要方面代替原数据,并希望损失尽可能小。
PCA推导:基于最小投影距离
假设m个n维数据\((x^{(1)},x^{(2)},...,x^{(m)})\)都已经进行了中心化,即\(\sum\limits_{i=1}^mx^{(i)}=0\),经过投影变换后得到的新坐标系为\({w_1,w_2,...,w_n}\),其中\(w\)是标准正交基,即\(\lVert w\rVert_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)}=\sum\limits_{j=1}^{n'}z_j^{(i)}w_j=Wz^{(i)}\)其中,W为标准正交基组成的矩阵。
现在我们考虑整个样本集,我们希望所有的样本到这个超平面的距离足够近,即最小化下式:
将这个式子进行整理可以得到
注意到\(\sum\limits_{i=1}^{m}x^{(i)}x^{(i)T}\)是数据集的协方差矩阵,W的每个向量\(w_j\)是正标准正交基,而\(\sum\limits_{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)})\)都已经进行了中心化,即\(\sum\limits_{i=1}^mx^{(i)}=0\),经过投影变换后得到的新坐标系为\({w_1,w_2,...,w_n}\),其中\(w\)是标准正交基,即\(\lVert w\rVert_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\),要使所有的样本投影方差和最大,也就是最大化\(\sum\limits_{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}\sum\limits_{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)