Dimensionality Reduction
降维将包含大量特征的数据映射到维度少得多的空间,同时保留其结构,常用方法包括 PCA、t-SNE、UMAP 和自编码器。
降维会将由许多特征描述的数据转换为特征数量少得多的表示,同时保留关键信息,例如数据方差、点之间的距离或邻近关系。一张 640x640 彩色图像包含超过 120 万个像素值,一个基因表达谱可能包含 20,000 个测量值,而图像嵌入通常有数百个维度。降维可以加速机器学习模型、降低过拟合风险、减少存储需求,并使人们能够将数据绘制在二维或三维图表中进行数据可视化。
为什么较少的维度更有帮助#
Richard Bellman 在研究动态规划时创造了“维数灾难”这一说法,用来描述随着维度增加,问题会变得更加困难。空间体积会随着每个新特征呈指数增长,因此固定数量的训练数据覆盖的空间会越来越稀疏;而在极高维度下,随机点之间的距离会变得几乎相同,从而削弱依赖距离的方法,例如近邻算法和 k-means 聚类。
真实数据很少会填满整个空间。手写数字图像的变化主要来自笔画粗细、倾斜程度和少数其他因素,因此它们在像素空间中靠近一个低得多维的曲面,也就是流形。降维可以找出这个曲面上的坐标;由于无需标签,大多数降维方法都属于无监督学习的一种形式。
线性与非线性方法#
主成分分析(PCA)由 Karl Pearson 于 1901 年提出,它将数据旋转到一组正交方向上,并按照各方向所能解释的方差从高到低排序,然后保留前几个方向。解释方差比可以显示数据集需要多少个主成分。Ronald Fisher 于 1936 年提出的线性判别分析会利用类别标签,寻找最能区分类别的方向。随机投影会将数据乘以一个随机矩阵;Johnson-Lindenstrauss 引理保证,只需使用随 n 的对数增长的维数,就能将 n 个点之间的距离保留在指定容差范围内。
非线性方法遵循弯曲的流形。Isomap 和局部线性嵌入均于 2000 年发表于 Science,它们会保留流形上的距离和局部线性邻域。t-SNE 和 UMAP 会在二维图中将相似的点放在一起,因此成为查看嵌入簇的标准工具,但这些图上相距较远的簇之间的距离意义不大。自编码器会学习一个编码器,将每个输入映射为较小的潜在空间编码,再由解码器重建输入。2006 年,Geoffrey Hinton 和 Ruslan Salakhutdinov 证明,对于图像和文档,深度自编码器生成的编码优于 PCA。
这个示例将 8x8 的数字图像从 64 个像素特征压缩到能保留 90% 方差的最少主成分,然后分别在压缩前后使用 k 近邻对数字进行分类:
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline
X, y = load_digits(return_X_y=True) # 1,797 images of 8x8 pixels = 64 features
# Keep the fewest principal components that explain 90% of the variance
pca = PCA(n_components=0.90).fit(X)
print(f"Features: {X.shape[1]} -> {pca.n_components_}")
# Classify with k-nearest neighbors on the raw pixels and on the reduced features
raw = cross_val_score(KNeighborsClassifier(), X, y).mean()
reduced = cross_val_score(make_pipeline(PCA(n_components=0.90), KNeighborsClassifier()), X, y).mean()
print(f"Accuracy: {raw:.3f} with 64 features, {reduced:.3f} with {pca.n_components_}")21 个主成分保留了 90% 的方差,而交叉验证准确率只从 0.963 降到 0.959,特征数量则减少到原来的三分之一。在流水线内部拟合 PCA,可确保投影仅从各个训练折中学习,因此不会从测试折泄漏信息。
特征选择与特征提取#
特征选择会保留原始列的一个子集,例如删除冗余的传感器通道,因此保留下来的特征仍保有原本的含义。狭义的降维指的是特征提取:它将旧特征组合成新特征,通常能实现更好的压缩,但也更难解释。两者都是数据预处理和特征工程的步骤。深度网络会在训练过程中执行特征提取,将像素压缩成嵌入;套娃式表示学习则会训练出只用前几维也能发挥作用的嵌入,因此向量数据库可以存储更短的向量。
在计算机视觉中的用途#
计算机视觉会在多个阶段使用降维后的表示。将图像嵌入投影到二维空间,并使用 t-SNE 或 UMAP 可视化,可以观察类别是否分离以及离群点的位置;PCA 或向量量化可以压缩向量搜索背后的嵌入,让数百万张图像都能放进内存。YOLO26实例分割模型将这一思路融入输出:检测头会针对每张图像,以输入分辨率的四分之一计算 32 个原型掩码,并为每个目标仅预测 32 个系数;每个目标的掩码都是这些原型的加权和。因此,对于 640 像素的输入,160x160 的掩码包含 25,600 个值,但可用 32 个数字编码。










