机器学习中的维度、过拟合、降维

news2025/5/30 14:06:09

1. 维度灾难

当我们谈论机器学习模型在处理数据时遇到的困难,一个常常被提及的词便是“维度灾难”(Curse of Dimensionality)。这不是科幻小说里的情节,而是数学和计算世界里真实存在的困境。它指的正是:当数据集的特征数量(即维度)增加时,分析、组织和处理数据会变得异常困难,甚至在某些情况下,根本不可能。

1.1. 灾难一:数据稀疏性

想象一下。你在一根一米长的绳子上,每10厘米放一颗珠子,一共需要 10 颗。如果将这颗珠子放在一个一平米的正方形里,每边都保持10厘米的间隔,那你就需要 10 × 10 = 100 10 \times 10 = 100 10×10=100 颗珠子。进一步,在一个一立方米的房间里,同样间隔就需要 10 × 10 × 10 = 1000 10 \times 10 \times 10 = 1000 10×10×10=1000 颗。

Figure 1

现在,把这个概念推广到 D D D 维空间。在一个边长为1的 D D D 维超立方体中,若我们希望每个维度上都能被划分成10个区间,那么总共需要 10 D 10^D 10D 个单元格来覆盖整个空间。

  • D = 10 D=10 D=10 时,就是 10 10 10^{10} 1010 个单元格。
  • D = 100 D=100 D=100 时,便是 10 100 10^{100} 10100 个单元格。

这个数字是天文量级的。这意味着,即使我们拥有再多的训练样本,在高维空间中,它们也仅仅是散落在浩瀚宇宙中的几粒尘埃,数据会变得极其稀疏

1.2. 灾难二:距离度量失效

这种极端稀疏性,带来了一个反直觉的现象:在高维空间里,任意两个随机数据点之间的距离,其差异会变得非常小,几乎所有点之间的距离都会趋于相等。这并不是说所有点都“挨得很近”,恰恰相反,它们都很“远”,但它们“远”的程度却彼此非常接近。

举个不那么严谨的例子, 假设我们在1000维空间里有两个点 A A A B B B。它们的欧氏距离是它们在1000个维度上的坐标差的平方和的平方根:

D i s t a n c e ( A , B ) = ( a 1 − b 1 ) 2 + ( a 2 − b 2 ) 2 + . . . + ( a 1000 − b 1000 ) 2 Distance(A, B) = \sqrt{(a_1-b_1)^2 + (a_2-b_2)^2 + ... + (a_{1000}-b_{1000})^2} Distance(A,B)=(a1b1)2+(a2b2)2+...+(a1000b1000)2

如果我们在低维空间里,某几个维度上的差异很大,就能显著影响总距离。但在高维空间里,即使在某个维度上的差异很大,这个差异的平方只占总的1000项中的一项。总的距离更多地取决于在大多数维度上微小的差异累积起来

这种累积效应导致的结果是:

  • 即使两个点在某个或几个维度上看起来很不同,但在其他绝大多数维度上它们的差异可能很随机,总的距离也就趋于一个平均值。
  • 任意两个随机点,它们在大部分维度上的差异累积起来,最终得到的总距离往往差异不大。

因此,这种在多维度上差异的随机累积,使得任意两个数据点之间的总距离趋于一个平均值,距离的最小值和最大值之间的差距在高维下变得微乎其微。用数学语言说,最小距离与最大距离的比率会趋近于1。

这意味着,原本在低维空间中能够清晰区分的“近”和“远”的概念,在高维下变得模糊不清,所有点从距离上看都变得“差不多远”。这种由高维稀疏性导致的“距离相似”现象,严重削弱了许多依赖于判断数据点之间邻近关系的算法性能,例如K近邻和聚类等。

1.3. 灾难三:复杂的模型

当我们尝试用模型拟合这些高维数据时,会让模型设计变得困难。

  • 参数爆炸: 很多机器学习模型,其参数数量与特征维度密切相关。例如,一个简单的线性模型,其参数数量与维度呈线性关系。但一旦我们转向非线性模型,如多项式回归,参数数量可能呈指数级增长。
  • 泛化能力下降: 在高维空间中,由于数据样本的稀疏性,模型很容易“记住”训练数据中的每一个细节,包括那些无关紧要的噪声和偶然模式,而非数据的真实规律。这导致模型在训练集上表现完美,但在面对未见过的新数据时,性能却一落千丈,这就是过拟合。一个高维模型,就像一个记性太好的学生,把教科书上的错别字也当成了知识点。

1.4. 灾难四:计算成本飙升

最后,维度灾难也直接转化为实际的计算负担。

  • 存储: 高维数据需要巨大的存储空间。

  • 计算: 许多机器学习算法的计算复杂度随维度呈指数级增长。例如,矩阵运算、特征选择等都变得异常耗时。在处理海量高维数据时,计算资源往往成为瓶颈。

2. 维度失衡的表象

在机器学习中,我们常常用偏差(Bias)方差(Variance) 来诊断模型的问题。它们是理解模型性能的两把尺子,其实它们也反映了维度处理上的失衡。

Figure 2

2.1. 欠拟合:高偏差 (Bias)

想象你试图用一条直线去拟合一个明显是弯曲的数据点集合,比如一个抛物线。无论你如何调整直线的斜率和截距,它都无法完美贴合那些弯曲的点。这就是欠拟合,模型连训练数据都无法学好。

  • 模型过于简单: 欠拟合的本质是模型过于简单,其学习能力(或称模型容量)不足以捕捉数据中真实存在的复杂模式。
  • 维度过少: 当我们提供的特征维度过少时,模型可能根本没有足够的信息来识别数据中的真实关系。在一个低维空间中,复杂、非线性的模式可能被“压缩”得无法被简单模型所理解。这表现为高偏差:模型在训练数据上就存在较大误差,因为它从一开始就没能“看懂”数据的真实结构。

2.2. 过拟合:高方差 (Var)

与欠拟合相反,过拟合是模型学得“太好”了,好到它把训练数据里的噪声和偶然的波动也当成了规律。

  • 模型过于复杂: 过拟合的根源是模型学习能力过强,其自由度远超数据本身的内在复杂度。它像一个模仿能力超群的演员,不仅模仿了角色的一举一动,连口音、习惯动作里偶然的颤抖都学得惟妙惟肖。
  • 维度过多与过拟合:
    • 高维空间中的稀疏性: 回顾第一节的“维度灾难”。在高维空间中,数据本身就极其稀疏。这意味着模型看到的每个训练样本都是茫茫宇宙中的一个孤立点。即使模型的参数数量看起来“不多”,但相对于这些稀疏的样本而言,模型仍然拥有过多的“自由度”去精确地拟合每一个点,包括其中的噪声。它会试图在这些孤立点之间画出扭曲的、毫无意义的线条,从而导致高方差:模型对训练数据的微小变化极其敏感,泛化到新数据时,性能会大幅波动。
    • 参数量与信息量不匹配: 在低维空间中,如果模型参数量(模型复杂度)依然非常大,远超数据所能提供的有效信息,同样会导致过拟合。这相当于给一个简单的任务配置了一个过于强大的工具,它在完成任务的同时,也把周边无关紧要的东西都处理了一遍。

2.3. 误差:维度失衡的表象

我们可以将误差 (MSE) 分解为 :
E r r o r = B i a s 2 + V a r 2 + σ 2 \mathrm{Error=Bias^2+Var^2+\sigma^2} Error=Bias2+Var2+σ2
​ 其中 σ 2 \sigma^2 σ2 是噪声的方差, 可以看作是常数。

所以,无论是欠拟合还是过拟合,其根本都指向一个问题:模型复杂度训练数据中包含的有效信息量之间的不匹配。(在充足训练的情况下)

  • 模型过于简单(低复杂度),无法捕捉数据中复杂的模式,导致欠拟合(高偏差)。这可能源于特征维度不足,或模型本身表达能力有限。

  • 模型过于复杂(高复杂度),过度学习噪声,导致过拟合(高方差)。这在高维数据稀疏的环境中尤为突出,因为即使参数量看起来适中,在高维的空旷下,模型依然显得过于强大。

3. 妙用数据维度

3.1. 降维

既然维度太高不行,在不人为操作的情况,能否让算法自行减少特征维度呢?

当然可以,这就是降维技术。它通常是应对维度灾难最直观的策略。

降维技术可以削减特征数量,在尽可能保留数据核心信息的前提下,将高维数据映射到低维空间。降维的核心思想就像从一堆行李中,直接挑出最有价值的几件 (也可以是特征的组合, 比如PCA降维)。我们从原始特征集中筛选出与目标最相关、最具区分度的子集,直接剔除不必要或带噪声的维度。

我们可以将特征维度类比为方程的变量数量,而训练样本数量类比为方程的数量。当特征维度过高(变量多)而训练样本不足(方程少)时,模型难以找到一个稳定的解,很容易“过度拟合”训练数据中的噪声。降维的作用,就是减少这些“变量数量”。方程越少,意味着我们给模型的先验假设越多,这引导模型在简化的维度空间中,更容易发现数据固有的更普遍的规律,进而显著提升其泛化能力。

3.2. 随机投影

在降维技术中,有一种优雅巧妙又有点反直觉的方法: 随机投影,它的有效性巧妙利用了高维空间的一个奇特特性:高维空间中,随机选择的两个向量大概率是正交的。

这听起来很玄乎。在二维平面上,两条随机线正交的概率微乎其微。但在 D D D 维空间中,当 D D D 足够大时,情况截然不同。你可以想象,在极端广阔的空间中,两个随机选择的方向彼此“正对着”或“平行”的概率几乎为零,它们有无数种方式可以彼此垂直。

正是利用了这一点,随机投影通过一个随机生成的矩阵,将高维数据投影到低维空间。由于随机投影方向的这种近似正交性,它能够以高概率近似地保留原始数据点之间的相对距离和结构(这被称为 Johnson-Lindenstrauss 引理)。这意味着,我们无需付出高昂的计算代价去寻找“最佳”投影(如PCA),只需随机一投,就能达到不错的效果。

这种随机正交的特性,恰恰是维度灾难的推论。正是因为高维空间如此“空旷”和“广阔”,以至于随机生成的向量能够彼此“不重叠”,从而倾向于正交。随机投影正是巧妙地利用了维度灾难所揭示的高维空间特性,提供了一种高效、简便的降维手段。

3.3. 升维

还可以有更令人惊奇的升维操作。既然维度灾难如此可怕,我们为何还要“增加”维度?这里的升维并非简单地增加特征,而是一种策略性的非线性映射,其核心目的在于:将低维空间中非线性可分的数据,通过某种非线性变换,映射到更高维空间,使其在高维空间中变得线性可分。

  • 核函数:支持向量机(SVM)中,核函数(如高斯核、多项式核)则更巧妙地实现了升维。它无需显式地将数据点映射到那个可能极其高维的特征空间,而是通过计算在那个高维空间中的点积。这意味着我们可以在原始低维空间中进行计算,却能享受到高维空间中线性可分所带来的分类优势。这种核技巧,它避开了显式升维带来的计算和存储难题,从而化解了部分维度灾难的冲击。

  • 非线性函数升维: 最简单的例子便是多项式特征。如果我们有 x 1 , x 2 x_1, x_2 x1,x2 两个特征,我们可以通过添加 x 1 2 , x 2 2 , x 1 x 2 x_1^2, x_2^2, x_1x_2 x12,x22,x1x2 等项,将其升维到更高维空间。原来在二维平面上需要曲线才能分开的数据,在新的高维空间中,可能只需一个平面即可完成分离。
    Figure 3

深度学习中的神经网络正是如此。每一层的隐藏神经元,都通过非线性激活函数(类似于核函数)对前一层特征进行非线性变换,将数据从一个特征空间映射到另一个更高维(或至少是不同维度)的“隐式特征空间”。同时,增加隐藏层的维度则相当于有意地增加这个“隐式特征空间”的维度(类似于非线性函数升维),旨在让模型能够学习到原始特征之间更抽象、更复杂的非线性关系和组合。

这种“升维”本质上是为了增加数据的“表现力”。它让数据具备了在更高层次上被线性模型理解的能力,从而能够捕捉到低维中隐藏的复杂非线性模式。

4. 平衡的艺术

我们已经遍历了维度的凶险与神奇。从“维度灾难”带来的数据稀疏和计算困境,到“偏差与方差”所揭示的模型失衡,再到“降维”的精准提炼和“升维”的巧妙拓展。至此,一个清晰的结论浮出水面:维度管理的核心,是一门寻求平衡的艺术。

4.1. 升维与降维的平衡

你可以把模型看作一个信息处理的通道。如果这个通道的“瓶颈”太宽,信息自由流淌,连噪声都一并灌入,那就会导致过拟合。反之,如果瓶颈太窄,关键信息都堵在外面,无法进入,那就会导致欠拟合。这里的“瓶颈”既可以理解为模型的参数量,也可以理解为数据经过处理后的有效信息维度

  • 升维与信息“扩容”: 我们通过非线性升维,就像是为这个信息通道 “扩容” ,增加了更多的管道和弯道,让原本纠缠不清的数据在高维空间中得以“舒展”,从而能学习到更深层次、更抽象的特征表示。这为模型提供了强大的 “表现力” ,让它能理解更复杂的模式。
  • 降维与信息“精炼”: 而降维,则是在这种扩容之后,对信息进行 “精炼”和“压缩” 。它剔除冗余和噪声,将最有价值的、最本质的信息汇聚到更少的维度中。这提升了数据的 “精准表达” ,让模型在更高效、更稳定的环境中进行学习,从而避免过拟合,并提高泛化能力。

所以,我们并非一味地增大参数量或信息维度,也不是盲目地进行信息压缩。真正的智慧在于:先通过策略性的升维,赋予模型足够的“感知”复杂模式的能力;再通过智慧的降维,将这些复杂模式提炼为简洁、鲁棒的“表达”。

4.2. 结语

维度,既是机器学习的挑战,亦是它的机遇。理解并娴熟运用“升维”与“降维”的艺术,是我们驾驭数据复杂性、构建强大泛化模型的核心所在。它要求我们不仅能看到数据的表象,更能洞察其内在的结构与信息流转。

你的模型,是否也正面临着维度的挑战?或许,是时候重新审视你与维度之间的关系了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2387900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于git的使用

下载git 可以去git的官网下载https://git-scm.com/downloads 也可以去找第三方的资源下载,下载后是一个exe应用程序,直接点开一直下一步就可以安装了 右键任意位置显示这两个就代表成功,第一个是git官方的图形化界面,第二个是用…

预约按摩小程序源码介绍

基于ThinkPHP、FastAdmin和UniApp开发的预约按摩小程序源码,ThinkPHP作为后端框架,以其高效稳定著称,能妥善处理数据逻辑与业务规则。FastAdmin作为后台管理框架,极大简化了后台管理系统的搭建与维护。UniApp则让小程序具备跨平台…

Elasticsearch创建快照仓库报错处理

创建快照仓库报错: 根据报错提示的信息,问题可能出在 Elasticsearch 的配置中。当你尝试创建一个文件系统(fs)类型的快照仓库时,虽然已经指定了 location 参数,但 Elasticsearch 仍然报错,这通…

使用DDR4控制器实现多通道数据读写(十三)

一、概述 在上一章节中使用仿真简单验证了interconnect的功能,使用四个axi4的主端口同时发起读写命令,经过interconnect后,将这些读写指令依次发给ddr4控制器。Ddr4控制器响应后再依次将响应发送到各个通道。从而实现多通道读写ddr4控制器的功…

谷歌Veo vs Sora:AI视频生成技术的巅峰对决

🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——从架构到实践,解析音画同步、物理模拟与长视频生成的破局之战 一、技术架构:双雄对垒,殊途同归? 谷歌…

基于Spring boot+vue的中医养生系统的设计与实现(源码+论文+部署+安装+调试+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统背景 在健康中国战略持续推进与全民健康意识显著提升的时代背景下,中医养生作为中…

31.第二阶段x64游戏实战-封包-线程发包

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:30.第二阶段x64游戏实战-认识网络数据包发送流程 代码跳转 ws2_32.send跳转sen…

Unity数字人开发笔记

开源工程地址:https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit 先致敬zhangliwei7758,开放这个源码 一、建立工程 建立Unity工程(UnityAiChat)拖入Unity-AI-Chat-Toolkit.unitypackage打开chatSample工程,可…

嵌入式开发--STM32G431无法正常运行程序,BOOT0与CAN冲突

故障现象 今天开发STM32G431时遇到一个问题,板子打样回来后,焊接完成,可以烧程序,可以读FLASH,却死活不能运行,也不能进仿真调试。 故障定位 经过排查,发现将隔离芯片π121M31拆除&#xff0…

程序环境与预处理

一、程序的翻译环境和执行环境 翻译环境:将源代码转化为可执行的机器指令 执行环境:执行代码 1、翻译环境 流程: 二、运行环境 程序执行过程: 三、预编译阶段 1、预定义符号 __FILE__ //进行编译的原文件名 __LINE__ //文…

《Java 单例模式:从类加载机制到高并发设计的深度技术剖析》

【作者简介】“琢磨先生”--资深系统架构师、985高校计算机硕士,长期从事大中型软件开发和技术研究,每天分享Java硬核知识和主流工程技术,欢迎点赞收藏! 一、单例模式的核心概念与设计目标 在软件开发中,我们经常会遇…

全志F1c200开发笔记——移植根文件系统

1.下载buildroot Index of /downloads/ 使用2018.02.11版本 直链下载 https://buildroot.org/downloads/buildroot-2018.02.11.tar.gz 2.配置 进入buildroot压缩包目录下,使用命令解压并进入工作目录 tar -xf buildroot-2018.02.11.tar.gz cd buildroot-2018.…

[yolov11改进系列]基于yolov11引入自注意力与卷积混合模块ACmix提高FPS+检测效率python源码+训练源码

[ACmix的框架原理] 1.1 ACMix的基本原理 ACmix是一种混合模型,结合了自注意力机制和卷积运算的优势。它的核心思想是,传统卷积操作和自注意力模块的大部分计算都可以通过1x1的卷积来实现。ACmix首先使用1x1卷积对输入特征图进行投影,生成一组…

Java NIO编程:构建高性能网络应用

1.Java NIO 核心概念与架构 1. 传统 BIO 与 NIO 的对比 特性 BIO (Blocking I/O) NIO (Non-blocking I/O) I/O 模型 阻塞 非阻塞 / 异步 线程模式 每个连接一个线程 单线程管理多个连接 数据处理单位 字节流 / 字符流 缓冲区 (Buffer) 核心组件 Socket, ServerSoc…

如何实现高性能超低延迟的RTSP或RTMP播放器

随着直播行业的快速发展,RTSP和RTMP协议成为了广泛使用的流媒体传输协议,尤其是在实时视频直播领域,如何构建一个高性能超低延迟的直播播放器,已经成为了决定直播平台成功与否的关键因素之一。作为音视频直播SDK技术老兵&#xff…

C语言数据结构-单向链表

头文件&#xff1a;link.h #ifndef __LINK_H__ #define __LINK_H__ #include <stdio.h> #include <stdlib.h> typedef int DataType; /*节点数据类型*/ typedef struct node { DataType data; //数据域 struct node *pNext; //指…

小样本分类新突破:QPT技术详解

问题导向式提示调优(QPT) 这篇论文主要讲了一个针对小样本(数据量少)文本分类问题的新方法,叫问题导向式提示调优(QPT)。 核心思路是让预训练语言模型(比如BERT的升级版RoBERTa)在少量标注数据下,通过设计特定的“提问式模板”和“标签词扩展技术”来提升分类效果。…

Excel常用公式全解析(1):从基础计算到高级应用

Excel常用公式全解析&#xff1a;从基础计算到高级应用 目录 Excel常用公式全解析&#xff1a;从基础计算到高级应用[toc](目录)一、基础计算类&#xff1a;数据运算的基石1. 求和公式&#xff08;SUM&#xff09;2. 平均值公式&#xff08;AVERAGE&#xff09;3. 最值与计数公…

与 PyCharm 官方沟通解决开发环境问题记录(进展:官方已推出2个新的修复版本)

​​​​​​主题&#xff1a;有关 PyCharm 中终端和环境激活问题的反馈&#xff1a;PY-81233 前言 目前进展&#xff1a; 官方已有2个修复版本推出测试。 更新方法&#xff1a; 使用JetBrains Toolbox App&#xff0c;如下图所示&#xff0c;从“其他版本”进入查看更新。…

taro + vue3 实现小程序sse长连接实时对话

前言 taro.request是可以实现sse长连接的&#xff0c;但是呢其中有俩大坑&#xff0c;找了许多资料也没解决&#xff0c;后续解决办法也与后端商量改用WebSocket来实现。 代码实现 SSEManager.js: import { getAccessToken } from "../xx/xx"; import { TextDecode…