主成分分析方法,是一种使用最广泛的数据降维算法,PCA的主要思想是将高维的特征映射到k维上。这k维就是主成分,并能保留原始变量的大部分信息,这里的信息是指原始变量的方差。
如果用坐标系进行直观解释,一个坐标系表示一个变量,对原坐标系中的数据进行主成分分析等价于进行坐标系旋转变换,将数据投影到新坐标系的坐标轴上。新坐标轴表示的变量是原来多个变量的线性组合。
什么是方差?
数据在每一轴上的坐标值的平方表示相应变量的方差。
什么是第一主成分?
第一主成分就是新坐标系的第一坐标轴,为旋转变换中坐标值的平方和最大的轴,即方差最大的轴。需要注意第一主成分,第二主成分。。。第 k 主成分是相互正交的。
如何得到包含最大差异性的主成分方向?
通过计算数据矩阵的协方差矩阵,然后得到协方差矩阵的特征值特征向量,选择特征值最大的K个特征所对应的特征向量组成的矩阵。那么就可以将数据矩阵转换到新的空间当中,实现数据特征的降维。
得到协方差矩阵的特征值向量有两种方法:特征值分解协方差矩阵、奇异值分解协方差矩阵。
PCA算法有两种实现方法:
基于特征值分解协方差矩阵:
A = Q Σ Q − 1 A = Q \Sigma Q^{-1} A=QΣQ−1
基于SVD分解协方差矩阵:
A = U Σ V T A = U \Sigma V^{T} A=UΣVT
关于奇异值分解的相关内容请参考: https://blog.csdn.net/leemusk/article/details/107149297
基于特征值分解协方差矩阵:
输入:数据集 X = { x 1 , x 2 , . . . , x n } X = \{x_1, x_2, ..., x_n\} X={x1,x2,...,xn},需要降到 k 维
1) 去平均值(即去中心化),即每一位特征减去各自的平均值
2)计算协方差矩阵 1 ( n − 1 ) X X T \frac 1 {(n-1)} XX^T (n−1)1XXT,这里除或不除样本数量 n 或 n-1 ,其实对求出的特征向量没有影响
3) 用特征值分解方法求协方差矩阵 1 ( n − 1 ) X X T \frac 1 {(n-1)} XX^T (n−1)1XXT 的特征值或特征向量。
4)对特征值从小到大排序,选择其中最大的 k 个,然后对其对应的 k 个特征向量分别作为列向量组成特征向量矩阵P
4)将数据转换到 k 个特征向量构建的新空间中,即 Y=PX。
基于SVD分解协方差矩阵:
输入:数据集 X = { x 1 , x 2 , . . . , x n } X = \{x_1, x_2, ..., x_n\} X={x1,x2,...,xn},需要降到 k 维
1) 去平均值(即去中心化),即每一位特征减去各自的平均值
2). 构造新的 n*m 矩阵:
X ′ = 1 n − 1 X T X' = \frac 1 {\sqrt{n-1}} X^T X′=n−11XT
X’ 的每一列的均值为零。因为 X ′ T X ′ = 1 n − 1 X X T X'^TX' = \frac 1 {n-1}XX^T X′TX′=n−11XXT,即等于X的协方差矩阵,而主成分分析归结于求协方差矩阵的特征值和对应的单位特征向量,那么问题转化为求矩阵 X ′ T X ′ X'^TX' X′TX′ 的特征值和对应的单位特征向量,即对 X ′ X' X′ 进行SVD分解求得的 V k T V^T_k VkT 为所需的 K 个主成分。
这里我们需要注意奇异值分解中求解是 X T X X^TX XTX的特征值特征向量。
3). 对矩阵X’ 进行截断奇异值分解,得到
X ′ = U Σ V T X' = U\Sigma V^T X′=UΣVT
有k个奇异值、奇异向量。矩阵V 的前 k 列构成 k 个样本主成分。
4). 求 k * n 样本主成分矩阵
Y = V k T X Y = V_k^T X Y=VkTX
SVD分解协方差矩阵有两个优点:
有些SVD的实现算法可以先不求出协方差矩阵也能求出右奇异矩阵V。
也就是说,PCA算法可以不通过做特征分解而是通过SVD来完成,这个方法在样本量很大的时候很有效。实际是,scikit-learn的PCA算法的背后真正的实现就是用的SVD,而不是特征值分解。
注意到PCA仅仅使用了SVD的右奇异矩阵,没有使用的左奇异矩阵。
假设样本是 m ∗ n m*n m∗n 的矩阵 X, 如果我们通过了SVD找到了矩阵 X T X X^TX XTX 最大的 k 个特征向量组成的 k * n 的矩阵 V T V^T VT ,则可以做如下处理:可以得到一个 m * k 的矩阵 X m ∗ k ′ = X m ∗ n V n ∗ k T X'_{m*k} = X _{m*n}V_{n*k}^T Xm∗k′=Xm∗nVn∗kT
这个矩阵原来 m * n 的矩阵 X 相比,列数从 n 见到了 k,可见对列数进行了压缩,也就是说,左奇异矩阵可以用于对行数的压缩;右奇异矩阵可以用于对列(即特征维度)的压缩。这就是我们用SVD分解协方差矩阵实现PCA可以得到两个方向的 PCA 降维(即行和列两个方向)
总体主成分:在数据总体上进行的主成分分析
样本主成分: 在有限样本上进行的主成分分析
区别:
样本主成分用样本的均值向量 Z ‾ \overline{Z} Z 代替总体主成分均值向量 μ \mu μ。
用协方差矩阵 S 代替总体方差矩阵 Σ \Sigma Σ。
Z ‾ = 1 n ∑ j = 1 n z j = ( z ‾ 1 , z ‾ 2 , . . . , z ‾ m ) S = [ s i j ] s i j = 1 n − 1 ∑ k = 1 n ( z i k − z ‾ i ) ( z j k − z ‾ j ) , i , j = 1 , 2 , . . . m / \overline{Z} = \frac 1 n \sum_{j=1}^n z_j = (\overline{z}_1,\overline{z}_2,...,\overline{z}_m)\\ S = [s_{ij}]\\ s_{ij} = \frac 1 {n-1} \sum_{k=1}^n (z_{ik} - \overline{z}_i) (z_{jk} - \overline{z}_j), i,j = 1,2,...m/ Z=n1j=1∑nzj=(z1,z2,...,zm)S=[sij]sij=n−11k=1∑n(zik−zi)(zjk−zj),i,j=1,2,...m/