维数诅咒

介绍

在这篇文章中,我们将讨论所谓的“维数的诅咒”,并解释为什么在设计分类器时它是很重要的。以下各节我会提供这个概念直观的解释,并用一个由于维数灾难导致的过拟合例子图解说明。

考虑这样一个例子,我们有一组图像,其中每个表示猫或狗。我们想创建一个分类器,它能够自动识别狗和猫。要做到这一点,我们首先需要考虑每个对象类的描述,该描述可以用数字来表示。这样的数学算法,即分类器,可以用这些数字来识别对象。例如,我们可以认为猫和狗有不同的颜色。区分这两个类的一种可能描述可以由三个数字组成:平均红色,平均绿色和平均蓝色。例如,一个简单的线性分类器可以线性地结合这些特征来决定的类标签:

但是,这三个描述颜色的数字(即特征)显然不足以获得完美的分类。因此,我们可以添加描述图像纹理的特征,例如计算X和Y方向上的平均边缘或梯度强度。我们现在有5个特征来区分狗和猫。

为了得到更为准确的分类,我们可以根据颜色或纹理直方图,统计矩等添加更多的特征。我们可以通过仔细定义几百种特征就得到完美的分类吗?这个问题的答案听起来有点违反直觉:不能!实际上,在某点后,通过加入新的特征来增加问题的维数实际上会降低我们分类的性能。通过图1展示,这通常被称为“维数的诅咒’。

在接下来的章节中,我们会评论为什么上面是真实,以及如何避免维数的诅咒。

维数的诅咒和过拟合

在前面介绍的猫狗例子中,假设有无限个猫和狗生活在我们这个星球上。然而,由于我们的时间和处理能力是有限的,我们只能得到10张图片。那么分类的最终目标就是基于这10个训练实例来训练分类器,使得在我们不提供任何信息的前提下,它能正确地区分任何狗和猫。现在让我们使用一个简单的线性分类器,并试图获得一个完美的分类。我们可以用一个特征开始,例如图像中的平均“红”色:

图2表明,如果只有一个特征那么无法获得完美的分类结果。因此,我们可能会决定增加特征,如图像中的平均“绿”色:

最后,我们决定增加第三个特征,例如图像中的平均’蓝’色,得到一个三维特征空间

在三维特征空间中,我们现在可以发现一个平面,它完全分离狗和猫。这意味着这三个特征的线性组合可以获得10个训练图像的完美分类结果:

上面的插图表明通过增加特征的数目直到得到完美的分类结果似乎是训练一个分类器的最佳方式,而在介绍中图1所示的,我们认为这种情况并非如此。但是,注意当我们增加问题维数的时候,训练样本的密度是如何呈指数下降的。

在一维情况下(图2),10个训练实例涵盖了完整的1D特征空间,其宽度为5个单元间隔。因此,在一维情况下,样本密度为10/5=2样本/间隔。在2D情况下(图3),我们仍然有10个训练实例,现在它用5×5= 25个单位正方形面积涵盖了2D的特征空间。因此,在二维情况下,样本密度为10/25= 0.4样本/间隔。最后,在3D的情况下,10个样本覆盖了5×5×5=125个单位立方体特征空间体积。因此,在3D的情况下,样本密度为10/125= 0.08样本/间隔。

如果我们不断增加特征,特征空间的维数也在增长,并变得越来越稀疏。由于这种稀疏性,找到一个可分离的超平面会变得非常容易,因为当特征的数目变得无限大时,训练样本位于最好超平面反面的可能性变得无限小。但是,如果我们将高维的分类结果映射到低维空间,与此方法相关联的严重问题就凸显出来:

图6展示了3D分类结果投影到二维特征空间的情况。在三维空间中数据是线性可分的,但在一个较低维的特征空间中情况并非如此。事实上,加入第三个维度来获得完美的分类结果,仅仅相当于在低维特征空间中使用复杂的非线性分类器。结果,分类器学习具体实例的外观和我们训练数据集的特例。正因为如此,所产生的分类将无法处理真实世界为看到的无数猫狗数据,他们往往不遵守这些特例。

这个概念被称过拟合,是维数诅咒的直接结果。图7示出了只用2个特征而不是3个来训练分类器得到的结果:

虽然图7所示的决策边界线性分类器似乎比图5中非线性分类要糟,但这个分类器对未看见的数据能产生更好的结果,因为它没有学习我们训练数据中的例外。换句话说,通过使用较少的特征,避免了维数诅咒,以至于分类器没有过度拟合训练数据。

图8用不同的方式图解上面的内容。比方说,我们只用一个特征(其取值范围为0到1)来训练分类器。训练这个特征对每个猫和狗是唯一的。如果我们希望我们的训练数据覆盖范围内的20%,则所需的训练数据量是猫,狗的完整量的20%。现在,如果我们添加另一个特征,从而产生二维特征空间,事情发生了变化;为了覆盖二维特征空间的20%,我们需要在每个维度(0.45^2=0.2)上获得猫狗完整量的45%。在3D情况下,这会变得更糟:为了覆盖三维特征范围的20%,在每个维度上(0.58^ 3= 0.2)就需要获得完整量的58%。

换句话说,如果可用训练数据量是固定的,那么如果我们不断增加维数过拟合就会发生。另一方面,如果我们继续增加维数,训练数据量需要成指数增长以保持相同的覆盖范围从而避免过拟合。

在上面的例子中,我们表明维数的诅咒引出了训练数据的稀疏。特征使用的越多,数据就会变得更稀疏,以至于分类器参数(即它的决策边界)的精确估计变得更加困难。另一个维数诅咒的影响是,这个稀疏在搜索空间上不是均匀分布的。事实上,围绕原点(该超立方体的中心)的数据比搜索空间角落的数据更稀疏。理解如下:

试想一下,一个单位正方形表示2D特征空间。特征空间的均值是这个单位正方形的中心,离中心单位长度的所有点是一个内接圆。不属于单位圆内的训练样本更接近搜索空间的角落。这些样品比较难分类,因为它们的特征值有很大不同(例如,单位正方形的互相对立的样本)。因此,如果大部分样本属于图9所示的单位圆内,那么分类是比较容易的:

现在一个有趣的问题是当我们增加特征空间的维数时,圆(超球面)的体积如何变化。维数d上单位超立方体的体积是1^ d=1。维数d上的半径为0.5的内接超球体积可以计算为:

图10显示了当维数增加时,这种超球体积如何变化

这表明,当维数趋于无限时超球面的体积趋于零,而周围超立方体的体积保持恒定。这令人惊讶和相当反直觉的观察部分解释了分类中和维度诅咒相关的问题:在高维空间中,大部分训练数据驻留超立方体(定义特征空间)角落。如前面所述,特征空间角落的实例比超球重心周围的实例更难分类。这示于图11,其中显示了一个二维单位正方形,一个三维单位立方体和8D超立方体(有2^8=256个角落)的可视化:

对于一个8维超立方体,约98%的数据集中在它256个角落。结果是,当特征空间的维数趋向无穷大时,从采样点到质心之间的最小和最大欧几里得距离的差别率趋于零,设置最小距离也都趋于零:

因此,距离测量开始失去其衡量高维空间相异的有效性。由于分类取决于这些距离测量(如欧氏距离,马氏距离,曼哈顿距离),所以分类在低维空间(即较少的特种来描述所关心的对象)更加容易。同样地,高斯似然变得在高维空间变得扁平,使得最小和最大似然之间的差距以及最小似然本身趋向于零。

如何避免维数诅咒?

图1表明,当问题的维数变得比较大时,分类器的性能降低。接下来的问题是“太大“指的是多大,如何避免过拟合。遗憾的是没有固定的规则来确定分类中应该有多少特征。事实上,这取决于可用训练数据的数量,决策边界的复杂性以及所使用分类器的类型。

如果可以获得训练样本的理论无限量,那么维数的诅咒将被终结,我们可以简单地用无限数量的特征来获得完美的分类。训练数据越少,使用的特征越少。如果N个训练样本足够覆盖一维特征空间,那么还需要N^2个样本来覆盖具有相同密度的二维特征空间,三维特征空间需要N^3个样本。换句话说,所需训练实例的数目与所用的维数呈指数增长。

此外,倾向于非常精确的非线性决策边界(例如神经网络,KNN分类器,决策树)的分类器泛化不是很好,很容易发生过拟合。因此,当实用这些分类器时,维数应该保持的比较低。如果一个分类器泛化比较容易(例如朴素贝叶斯,线性分类器),那么所用特征的数量可以更高,因为该分类器本身的表现力不够。图6表明,在高维空间中使用简单的分类器模型对应于低维空间中使用复杂的分类器模型。

因此,过拟合既在高度维空间中估计相对少的参数时发生,也在低维空间中估计很多参数时发生。作为一个例子,考虑一个高斯密度函数,它的均值和协方差矩阵需要参数化。比方说,我们在三维空间进行操作,这样的话协方差矩阵是一个3×3的对称矩阵,它由6个独特的元素组成(3个方差在对角线上,3个协方差)。连同分布的三维平均,这意味着我们需要估计基于训练数据的9个参数,以获得代表我们数据似然的高斯密度。在一维情况下,只有2个参数需要估计(均值和方差),而在二维的情况下需要5个参数(2D均值,两个方差和一个协方差)。我们再次看到,要估计的参数数量增长量是维数的数目平方。

在早期的文章中,我们发现如果要估计的参数数量增加(并且如果估计的偏置和训练数据的数量保持恒定)那么参数估计的方差随之增大。这意味着如果维数增加,我们参数估计的质量会由于方差的增加而下降。分类器方差的增加对应于过拟合。

另一个有趣的问题是应该使用那些特征。给定一组N个特征;我们该如何选择M个最优特征子集使得M

结论

在这篇文章中,我们讨论了特征选择,特征提取和交叉验证的重要性,以避免由于维数诅咒产生过拟合。用一个简单的例子,我们评价了分类器训练中维数诅咒的一个重要影响,即过度拟合。

时间: 2024-10-08 10:04:13

维数诅咒的相关文章

Objective-C 下用 NSArray 和 NSMutableArray 定义二维数组跟多维数

Objective-C 下用 NSArray 和 NSMutableArray 定义二维数组跟多维数组 目录 问题描述 Objective-C 中的数组对像 NSArray 和 NSMutableArray 简介 二维数组:嵌套两次的 NSMutableArray 多维数组:嵌套多次的 NSMutableArray 问题描述 说实话,不太习惯面向对象编程,所以在操作 Objective-C 中数组对象时,总是忍不住跟 C 中的数组做比较,正好要建立一个二维数组,需要根据二维数组的下标来做相应的设

Tensorflow描述张量的维度:阶,形状以及维数

张量 TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通. 阶 在TensorFlow系统中,张量的维数来被描述为阶.但是张量的阶和矩阵的阶并不是同一个概念.张量的阶(有时是关于如顺序或度数或者是n维)是张量维数的一个数量描述. 比如,下面的张量(使用Python中list定义的)就是2阶. t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]   你可以认

基、维数、子空间、维数下降

一.问题的提出 受到空间.平面.直线不同维数的影响,始终很难理解基(一组线性无关向量)的长短和维数的区别.基的长短=维数? 要知道空间的表示,基是三个自由度:平面则是两个自由度.在投影是维数下降... 看起来非常混沌!! 二.问题的分析 先分析几个结论: (1)子空间的维数≤原空间的维数 因为子空间的集合是原空间集合的子集,毫无疑问,子空间所需要的线性无关向量个数≤原空间所需要的线性无关向量个数,因此,结论得以证明. (2)基的长短≠维数 举个反例,显然(a1,a2,0),满足加法和数乘运算封闭

分类问题中的“维数灾难”

在看机器学习的论文时,经常会看到有作者提到“curse of dimensionality”,中文译为“维数灾难”,这到底是一个什么样的“灾难”?本文将通过一个例子来介绍这令人讨厌的“curse of dimensionality”以及它在分类问题中的重要性. 假设现在有一组照片,每一张照片里有一只猫或者一条狗.我们希望设计一个分类器可以自动地将照片中的动物辨别开来.为了实现这个目标,首先需要考虑如何将照片中的动物的特征用数字的形式表达出来.猫与狗的最大区别是什么?有人可能首先想到猫与狗的颜色不

HOG参数简介及Hog特征维数的计算(转)

HOG构造函数 CV_WRAP HOGDescriptor() :winSize(64,128), blockSize(16,16), blockStride(8,8),      cellSize(8,8),nbins(9), derivAperture(1), winSigma(-1), histogramNormType(HOGDescriptor::L2Hys),L2HysThreshold(0.2), gammaCorrection(true), nlevels(HOGDescript

【线性代数】线性相关性、基和维数

一.线性相关性 什么情况下,向量X1,X2,--,Xn是线性无关的? 答:当向量X1,X2,--,Xn的线性组合(线性组合时系数不能全为0)不为零向量时,它们是线性无关的.即方程 不存在非零解. 对于一个矩阵A来说,当A总各列向量是线性无关时,则Ax=0的解只有0向量,即矩阵A的零空间只有零向量. 如果各列向量是相关的,则矩阵A的零空间中还存在一些其他的向量. 当矩阵A各列是线性无关的,则矩阵A各列都有主元,自由变量的个数为0. 二.空间的基 我们知道,矩阵各列的线性组合生成矩阵的列向量.但是,

维数灾难

Content 1 引言 2 维数灾难与过拟和 3 怎样避免维数灾难 4 总结 1 引言 本文章讨论的话题是“curse of dimension”,即维数灾难,并解释在分类它的重要性,在下面的章节我会对这个概念做一个直观的解释,并清晰的描述一个由维数灾难引起的过度拟合的问题. 下面不如正题,考虑我们有一堆猫和狗的图片,现在要做一个分类器,它可以把猫和狗自动并且正确分类.所以对这个两个类别,首先需要一组描述符,使这两个类别可以被表示为数字,分类器可以使用数字来决定类别(如Logistic Reg

数学-线性代数导论-#10 线性相关性、向量空间的基和维数

线性代数导论-#10 线性相关性.向量空间的基和维数 这节课中,我们先讲了前面的课程中一直提及的线性相关性的具体定义,并以此为基础建立了向量空间的"基"和"维数"的定义,最后归纳为一种已知若干向量求其生成的空间的基和维数的系统方法. 首先是线性相关性的定义. 已知一个由n个向量构成的向量组[V1,V2,-,Vn],如果存在n个系数[C1,C2,-,Cn],使得各CiVi(i=1,2,3,-,n)的和为0,则称这组向量线性相关.反之,如不存在,则称其线性无关. 当然,

卷积、卷积核的维数、尺寸

最近看论文的时候,接触到了3-D卷积的知识,在找的过程中,发现"卷积.卷积核的维数.尺寸"这篇文章写的较详细,就搬运了过来,只是为了以后查找方便. 注:如果原作者看到,如果觉得不妥,我可以马上删掉这篇文章!!! 原文地址:https://www.cnblogs.com/Terrypython/p/10294684.html