降维#
1. PCA#
主成分分析(Principal Component Analysis,PCA)是当前最流行的降维算法。首先,它确定最靠近数据的超平面,然后将数据投影到其上。
上图中
实线保留最大方差,反映数据结构
点线的投影保留中等方差(由测定误差导致)
证明该选择的一种方法是,该轴使原始数据集与其在该轴上的投影之间的均方距离最小 [1]。
优化目标
降维后方差最大
不同维度间相关性为 0
步骤
数据:数组\(X\),大小为\(p× n\)。
结果:数组\(Z\),大小为\(k× n, k<d\)
开始
计算协方差矩阵\(𝑨\)
特征值分解\(𝑸𝜮𝑸^{-1}\)
将特征值按递增顺序排序
选择\(𝑽 = 𝑸_{p-k:p-1}\),计算\(Z= 𝑽^{⊤} X\)
结束
def pca(X):
cov_matrix = np.cov(X, rowvar=False)
l, e = np.linalg.eig(cov_matrix)
return l, e
x_0 = np.random.normal(0, 100, N)
x_1 = 2 * x_0 + np.random.normal(0, 20, N)
X = np.column_stack((x_0, x_1))
principal_val, principal_vec = pca(X)
X_proj = np.dot(X, first_princpal_vec)
1.1. 主成分#
一组变量\(X_1, X_2, …, X_p\)的第一主成分(first principal component,1st PC)是标准化线性组合中方差最大的组合,记为:
这里,归一化的含义是:
其中,\(ϕ_{ji}\)被称为第一主 PC 的载荷(loading),其构成了 PC 的载荷向量\(ϕ_1 = \begin{bmatrix} ϕ_{11} & ϕ_{21} & … & ϕ_{p 1} \end{bmatrix}^{⊤}\)。为防止载荷的绝对值过大而导致方差过大,故限定这些载荷的平方和为 1。
设有一个\(n × p\)维度据集\(X\),
经过中心化处理(这是 PCA 的基本设之一),均值为 0,然后寻求具有如下形式的样本特征值的线性组合:
该线性组合在限定条件\(∑_{j=1}^p ϕ_{j 1}^2 = 1\)下有最大的样本方差,此时,此前的问题转化为优化问题:
由于
则
这里,称\(z_{11}, …, z_{n 1}\)为第一 PC 的得分。从几何角度来看,载荷向量\(ϕ_1 = \begin{bmatrix}ϕ_{11} & ϕ_{21} & … & ϕ_{p 1} \end{bmatrix}^{⊤}\)定义了一个在向量空间上数据最大变异的方向。若将\(n\)个数据点投影到这个方向上,这些投影的值即为 PC 的得分\(z_{11}, …, z_{n 1}\)。
当第一主成分\(Z_1\)确定后,继续寻找第二主成分\(Z_2\)。后者亦为\(X_1, X_2, …, X_p\)的线性组合,且为与\(Z_1\)不相关的各种线性组合中方差最大的一个,其得分有如下形式:
同时,第二主成分的载荷向量\(ϕ_2 ⊥ ϕ_1\)。
1.2. 模型细节#
对于每个 PC,PCA 都找到一个指向 PC 方向的零中心单位向量。由于两个相对的单位向量位于同一轴上,因此 PCA 返回的单位向量的方向不稳定:若稍微扰动训练集并再次运行 PCA,则单位向量可能指向与原始向量相反的方向。但,它们通常仍将位于相同的轴上。在某些情况下,一对单位向量甚至可旋转或交换(若沿这两个轴的方差接近),但,它们定义的平面通常保持不变。
实际上,通过奇异值分解(SVD),可轻松通过数据集找到 PC 所在的矩阵,即\(U𝜮𝑽^{⊤}\)中的\(V\)。
一旦确定了所有主成分,就可通过将数据集投影到前\(d\)个主成分定义的超平面上,将数据集的维度降低到\(d\)维。选择此超平面可确保投影将保留尽可能多的方差。
其中,\(β_d\)定义为包含\(V\)的前\(d\)列的矩阵。
1.3. 方差与维度#
选取的 2 个主成分构成一个空间平面,其使得每个数据点到达这个平面的距离的平方和最小。其中,第\(m\)个主成分的可解释方差为:
由数据集的总方差:
于是,第\(m\)个主成分的方差解释率(proportion of variance explained,PVE)可表示为:
为计算前\(M\)个主成分的累积 PVE,可简单地对前\(M\)个 PVE 求和,一共有\(\min(n - 1, p)\)个主成分,其和为 1。
实践中,与其任意选择要减小到的维度,不如选择相加足够大的方差(例如 95%)的维度。当然,除非要降低数据可视化的维度,这种情况下,通常需要将维度降低到 2 或 3。另一个选择是将方差解释率绘制为维度的函数来判断。
2. PCA 变体#
2.1. RPCA, IPCA#
RPCA(Randomized PCA,RPCA)就是在使用 SVD 求解时使用随机方法,其运算复杂度为\(O(m × d^2) + O(d^3)\),故,当\(d < n × 80\%\)
常规 PCA 实现的一个问题是,它们要求整个训练集都适合内存,才能运行算法。幸运的是,递增 PCA(Incremental PCA,IPCA)可将训练集划分为多个小批,并一次小批量输入。但速度慢于常规 PCA。
2.2. kPCA#
核 PCA(Kernel PCA,kPCA)用于复杂非线性投影,它通常擅长于在投影后保留实例簇,有时甚至可展开位于扭曲流形附近的数据集。内核技巧可将实例隐式映射到一个非常高维的空间,称特征空间(feature space),从而实现非线性分类和回归。高维特征空间中的线性决策边界对应于原始空间(original space)中的复杂非线性决策边界。
通过应用 PCA 投影的逆变换,还可将缩小的数据集解压缩回原来的维度。虽然投影会丢失一些信息(5%偏差之内),但,很可能接近原始数据。原始数据和重构数据(压缩后再解压缩)之间的均方距离称为重构误差(reconstruction error)。选择内核和超参数可找到最低重构误差(重建并不像使用线性 PCA 那样容易)。多亏了内核技巧,此变换在数学上等效于使用特征映射(feature map)φ 将训练集映射到无限维特征空间,然后使用线性 PCA 将变换后的训练集投影到 2D。
注意,若给定实例的线性 PCA 可在缩小的空间中反转,则重构点将位于特征空间中,而不是原始空间中。由于特征空间是无限维的,因此无法计算真实的重构误差。幸运的是,可在原始空间中找到一个点,该点将映射到重建点附近。这一点称为重建原像(pre-image)。获得该原像后,可测量其与原始实例的平方距离。然后,选择内核和超参数,以最大程度地减少此重构前图像错误。简言之,并非所有降维算法都可通过计算重构误差评估性能。
一种常用重构方案是训练有监督的回归模型,其中将投影实例作为训练集,而将原始实例作为目标。
2.3. 主成分回归#
将一个点投影到一条线,可简单理解成为这条线寻找离这个点最近的位置。
3. 流形学习#
3.1. 流形#
在大多数实际问题中,训练实例并不能均匀地分布在所有维度上。许多特征几乎是恒定不变的,而其他特征则是高度相关的。结果,所有训练实例都位于(或接近于)高维空间的低维子空间内。这时,可考虑投影(projection)。但,投影并不总是降维的最佳方法。在许多情况下,子空间可能会扭曲和旋转,如在著名的瑞士卷(Swiss roll)玩具数据集中。
Swiss Roll 是 2D 流形(manifold)的一个示例。简而言之,2D 流形是可在更高维度的空间中弯曲和扭曲的二维形状。更一般而言,\(d\)维流形是\(n\)维空间(其中\(d < n\)
许多降维算法通过对训练实例所在的流形进行建模来工作。这称为流形学习(Manifold Learning,MfL)。它依赖于流形假设,该设认为大多数现实世界的高维度据集都接近于低维流形。通常根据经验可观察到这种设。
考虑一下”MNIST”数据集:所有手写数字图像都有一些相似之处。它们由连接的线组成,边界为白色,且或多或少居中。若尝试随机创建数字图像,则可用的自由度大大低于若允许生成所需图像的自由度。这些约束倾向于将数据集压缩为低维流形。
流形设通常还伴随着另一个隐式设:手头的任务若用流形的低维空间表示,将更加简单。如下图上半部分。但,这种隐含设并不总是成立,如下图下半部分。简而言之,在训练模型之前减小训练集的维度通常可加快训练速度,但不一定总能带来更好或更简单的解决方案。这一切都取决于数据集。
3.2. LLE#
局部线性嵌入(Locally Linear Embedding,LLE)是另一种强大的非线性降维技术。它是一种流形学习技术,它不像以前的算法那样依赖投影。简而言之,LLE 的工作方式是:首先测量每个训练实例与其最近邻(c.n.)的线性相关程度,然后寻找最能保留这些局部关系的训练集的低维表示形式。这种方法特别适用于展开扭曲的流形,尤其是在没有太多噪音的情况下。
对实例\(x_i\),找到\(k\)个最近邻,然后尝试将\(x\)重建为这些邻居的线性函数:
随后将训练实例映射到\(d\)维(\(d<n\))空间
其中,\(z_i\)是\(x_i\)映射后的图像,\(Z\)是包含所有\(z_i\)的矩阵。由此。整个算法的运算复杂度为:\(O(m\log(m)n\log(k))\)用于找到\(k\)个最近的邻居,\(O(mnk^3)\)用于优化权重,\(O(dm^2)\)用于构建低维表示。不幸的是,最后一项中的\(m\)使该算法很难扩展到非常大的数据集。
实践中会选择串联战略:先使用 PCA 快速消除大量无用的维度,然后应用 LLE 等进行微调。