正如我们所见,降维旨在通过减少特征或维度的数量,同时保持数据的重要特性,来简化复杂数据集。减少这些维度的具体方法,会很大程度上影响所保留的信息种类以及可有效构建模型的数据结构类型。大体上,这些技术分为两大类:线性和非线性降维。理解它们的区别,对于为您的数据选择合适的工具,以及理解为什么作为非线性方法的自编码器在许多现代特征提取任务中表现出色,都很有必要。线性降维:直线路径线性降维方法通过线性操作来转换数据。可以将其视作将数据投影到一个新的、低维空间,新特征(维度)是原始特征的线性组合。这些变换类似于数据点云的旋转、缩放和剪切,但从根本上说,它们沿直线或平面进行操作。主成分分析 (PCA) 是线性降维最常见的例子。 从其根本看,PCA 会找出数据中包含最大方差的方向(主成分)。设想您的数据是一团点云;PCA 会找到点云延展最开的轴线。这便成为第一主成分。第二主成分是与第一主成分正交的下一条轴线,它包含剩余最多的方差,依此类推。通过选择前 $k$ 个主成分,您可以将数据降至 $k$ 个维度。线性方法(如 PCA)的优势:简单和高效: 相比非线性方法,线性方法通常计算量更小,训练速度更快。可解释性(某种程度上): 新维度(主成分)是原始特征的加权组合。这意味着您有时可以理解这些新维度在原始数据中体现的是什么。例如,一个主成分可能是“70% 特征 A + 30% 特征 B”。全局结构保持: 它们倾向于保持数据的全局协方差结构。线性方法的局限:线性假设: 它们最大的优势也是其主要缺点。如果数据的内在结构是高度非线性的(例如,像螺旋或折叠的纸张那样弯曲或扭曲的数据),线性方法将难以找到良好的低维表示。将此类数据投影到平面上可能会使不同的结构混杂在一起,或损失重要信息。侧重方差: PCA 优先处理方差。如果数据中重要的区别特征与高方差不一致,PCA 可能会遗漏它们。设想试图通过将一个卷曲的弹簧(一个三维物体)的影子投射到二维墙壁上来表示它。如果您从侧面打光,可能会很好地表示其长度和卷曲。但如果您从末端打光,影子可能只像一个圆形,从而失去弹簧的大部分结构。如果数据的实际结构与线性方法的假设不“对齐”,它们有时就会像那种信息较少的投影。非线性降维:顺应曲线许多数据集,特别是那些涉及图像、文本或复杂生物体系的数据集,不符合简单的线性结构。相反,数据点可能位于或接近一个低维的流形上,这是一种嵌入在高维空间中的弯曲表面或复杂形状。例如,手写数字“3”的图像可能在倾斜度、粗细和风格上有所不同,但它们根本上都属于一个“3的特性”流形,其维度远低于原始像素空间。非线性降维 (NLDR) 技术旨在识别并“展开”或“展平”这些流形,以寻找更忠实的低维表示。它们旨在保持数据的固有结构,这通常意味着原始高维空间中相邻的点在低维表示中也彼此靠近。{"data": [{"type": "scatter3d", "x": [1, 1.2, 1.4, 1.6, 1.8, 2, 2.2, 2.4, 2.6, 2.8, 3, 1.1, 1.3, 1.5, 1.7, 1.9, 2.1, 2.3, 2.5, 2.7, 2.9, 3.1], "y": [5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9, 9.5, 10, 5.2, 5.7, 6.2, 6.7, 7.2, 7.7, 8.2, 8.7, 9.2, 9.7, 10.2], "z": [1, 1.2, 1.4, 1.6, 1.8, 2, 1.8, 1.6, 1.4, 1.2, 1, 3, 3.2, 3.4, 3.6, 3.8, 4, 3.8, 3.6, 3.4, 3.2, 3], "mode": "markers", "marker": {"color": [0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1,0.05,0.15,0.25,0.35,0.45,0.55,0.65,0.75,0.85,0.95,1.05], "colorscale": [[0, "#4263eb"], [0.5, "#74c0fc"], [1, "#fcc419"]], "size": 6, "colorbar": {"title": "进程", "tickvals": [0, 1], "ticktext": ["开始", "结束"]}}, "name": "瑞士卷数据"}], "layout": {"scene": {"xaxis":{"title":"特征 1", "backgroundcolor":"#f8f9fa", "gridcolor":"#dee2e6"},"yaxis":{"title":"特征 2", "backgroundcolor":"#f8f9fa", "gridcolor":"#dee2e6"},"zaxis":{"title":"特征 3", "backgroundcolor":"#f8f9fa", "gridcolor":"#dee2e6"}}, "margin": {"l":0,"r":0,"b":0,"t":0}, "paper_bgcolor":"#ffffff"}}数据点呈“瑞士卷”模式排列,这是一个演示非线性流形的典型示例。线性方法将难以有效“展开”这些数据。流行的非线性降维方法包括:流形学习算法: 像 t-分布随机邻近嵌入 (t-SNE) 和统一流形近似与投影 (UMAP) 等技术,因其侧重于保持局部邻近结构,在生成高维数据的二维或三维可视化结果方面而闻名。自编码器: 这是本课程的重点!自编码器是经过训练以重建其输入的神经网络。巧妙之处在于中间的“瓶颈”层,它迫使网络学习输入的压缩、低维表示(潜在空间)。由于神经网络可以学习非常复杂的非线性函数,因此自编码器在非线性降维方面非常擅长。非线性方法的优势:处理复杂性: 它们能够捕捉到线性方法会遗漏的复杂模式和关联。流形展开: 能有效表示位于弯曲流形上的数据。有力的特征学习: 特别是自编码器,可以自动从数据中学习到极为丰富且有用的特征。非线性方法的缺点:计算开销: 非线性降维技术,特别是涉及迭代优化或复杂神经网络的那些,其计算量和训练时间都明显更多。可解释性: 非线性降维方法学到的维度通常抽象程度高,不易直接解释为原始特征的组合。理解这些新特征代表什么可能具有挑战性。超参数敏感度: 许多非线性降维方法有多个超参数,这些参数可能对结果有很大影响。找到合适的设置通常需要试错。局部最小值 / 过拟合: 对于自编码器之类的方法,如果在训练过程中没有适当的正则化,存在陷入较差局部最小值或对训练数据过拟合的风险。选择您的方法:线性还是非线性?那么,何时应该选择线性方法而非非线性方法呢?没有唯一的答案,但这里有一些指导原则:方面线性方法(例如 PCA)非线性方法(例如自编码器、t-SNE)数据结构假设线性关系,侧重全局结构处理复杂、弯曲结构,侧重局部/流形变换方式原始特征的线性组合复杂、非线性映射可解释性通常更高;分量可与输入关联通常更低;潜在特征更抽象计算开销更低更高应用场景基准,快速分析,线性合理时复杂数据(图像、文本),线性方法失效时主要目标最大化方差,正交分量保持邻近结构,重建输入实用建议:从简开始: 通常建议从 PCA 开始。它速度快,能提供基准,有时能快速给出有帮助的见解。如果结果足以满足您的后续任务(如分类或聚类),您可能无需使用更复杂的任何东西。检查您的数据(如果可能): 如果您能将数据可视化(或许先应用 PCA 降至二维或三维),并看到明显的非线性模式(如非线性可分离的簇、螺旋等),那么非线性降维很可能是更好的选择。考虑您的后续任务: 最终检验是您的最终目标上的表现。如果 PCA 提取的特征导致您的机器学习模型性能不佳,那么尝试自编码器之类的非线性降维技术是合理的下一步。计算资源: 如果您的时间或计算能力受到严重限制,线性方法可能更实用,至少在初始阶段是这样。自编码器:学习非线性表示这便引出了本课程的重点。自编码器是一种神经网络,它学习将高维输入数据映射到低维潜在空间的非线性变换,然后再从潜在空间映射回来以重建原始输入。这种直接从数据中学习恰当非线性变换的能力,使它们在特征提取方面具备多用性和强效性。它们不依赖于网络架构和训练过程所能学习范围之外的预设数据结构假设。通过理解线性和非线性方法的差异,您现在能更好地体会为什么以及自编码器如何能够找出丰富、压缩的特征,这些特征在后续机器学习任务中常带来更优表现,尤其是在处理当今应用中常见的复杂、高维数据时。下一章中,我们将更详细地审视自编码器的基础架构。