如何理解维度灾难?
一、前言
博主最近在学习机器学习的PCA降维算法的时候,对于维度灾难和特征稀疏有了新的认识。这篇文章主要讲解什么是维度灾难,并从几何的角度来对其进行形象的解释。
二、维度灾难的概念
维度灾难(Curse of Dimensionality),什么是维度呢?在机器学习的表示中,我们常常用\(X\)表示数据集,\(x_{i}\)表示其中的一个样本,\(x_{i}^{(j)}\)表示第i个样本汇总的第j个特征。样本的特征个数也就是维度。而维度灾难就是说,我们在训练样本的时候,在样本数目不变的情况下,随着维度的增高,我们的模型效果会随着维度的增高而降低。也就是说,如果想要达到相同的模型效果,在使用高维度时所需要的样本数量要比低维度的样本数量大的多。这个关系,一般会呈2的指数分布,即 \(i =2^j\) 。
而以上说的这种情况,实际上就是指的是机器学习的"过拟合"现象。我们通过离散化增加特征维度的同时引入很多非线性信息。虽然非线性信息能够增强拟合能力,但是这并不是完全正相关的。而根据 奥卡姆剃刀定律,一个满足预测性能条件下尽量简单,才能够有比较好的泛化能力。所以,增加特征维度和提高模型本身的复杂性效果是一致的,模型的复杂性可以使用正则化来自动控制,而特征维度只能通过人为方式来权衡调整。
三、从几何角度解释维度灾难
当我们试图去自己想象一个高维空间时,直觉的思维方式往往行不懂。我们甚至很难想象四维超立方体是什么样子的。
![image-20210609222149498](/Users/huaiguowei/Library/Application Support/typora-user-images/image-20210609222149498.png)
图:点、线段、正方形、立方体和网络(0维到四维超立方体)
我们画出下面这张二维平面下的图,边长为1.
假设这个正方形表示二维的特征空间,特征空间的平均值是这个正方形的中心,离这个圆点中心距离为1的样本分布在单位圆中,不在圆中的样本相对于中心更接近正方形的边角部分。如果样本都落在了元内,分类将会很简单;如果样本落到了圆外(边角部分),就会很难分类。我们来给出一个大致的公式证明:
假设此时维度为\(j\)维。不管维度是多少,超立方体的体积都是 \(1^j = 1\)。而对于j维度的超球面,其体积为 $$V(j) = k * r^j $$
其中\(k = \frac{\pi^{d/2}}{\Gamma(\frac{d}{2} + 1 )} 0.5^d,r=0.5\)
那么,当维度\(j\)趋近于无穷大时,超球面的体积趋近于0(也就是说,在高维度球面球体基本上是空的),然而超立方体体积没有变换。那么在分类的时候,大多数的样本都不在超球面内,都在超立方体内。这样就会导致样本更加的难以分类。此时样本是具有稀疏性的,也就是维度非常高,而样本少,且在高维度的空间中样本分布不均匀,导致其难以分类。*
除此之外,另外一个问题就是,如果我们在这个二维平面内随机挑两个点,这两个点的平均距离大约为0.52,如果在三维的单位立方体里随机挑两个点,两点之间的距离大约是0.66。但是,如果在一个100万维度的超立方体中随机挑两个点,它的距离大约为408(\(\sqrt{(1000000/6)}\) )!!这个事实也说明了高维数据有很大可能是稀疏的。大多数训练的实例可能彼此之间距离很远。这也意味着新的实例很可能远离任何一个训练实例,导致跟低维度比起来,预测更加的不可靠,更容易过拟合。
四、维度灾难的解决方法
在处理维度灾难的时候,我们可以通过增加数据集、正则化、降低维度等方法来解决。
虽然增大数据集可以使训练实例达到足够的密度,可以解决维度灾难的问题。但是要达到给定密度,所需要的训练集数量随着维度的增加呈指数式的上升。比如100个特征,要让所有训练实例(假设在所有维度上平均分布)之间的距离小于0.1,这时需要的训练实例数量就比可观察的宇宙中的原子数量还要多.......所以在解决维度灾难时,我们常常会采用降维。
对于降低维度,我们主要有三种方法:
- 直接降维 : 特征选择(人工或者自动。如Lasso方法)
- 线性降维 : PCA、MDS
- 非线性降维:流行学方法,包括Isomap 以及 LLE(局部线性嵌入)方法
五、不同算法维度权衡
当模型比较复杂时,不要选择太高的维度;当模型比较简单时,可以选择较高的维度。其实就是要去考虑:是否要去增加维度,提供非线性的问题。
-
非线性决策边界的分类器(例如神经网络、KNN分类器、决策树等)分类效果好但是泛化能力差且容易发生过拟合。因此,维度不能太高。
-
使用泛化能力好的分类器(例如贝叶斯分类器、线性分类器),可以使用更多的特征,因为分类器模型并不复杂。
因此,过拟合只在高维空间中预测相对少的参数和低维空间中预测多参数这两种情况下发生。