维度灾难与过拟合

1、介绍

考虑一个例子,对图片分类为猫、狗两类,通过皮毛的颜色(rgb)设计一个简单的线性分类器:

If 0.5*red+0.3*green+0.2*blue>0.6: 
    return cat;
else:
    return dog;

发现增加更多特征后,分类器的效果并没有变的一直上升,反而特征数量超过一定值时分类器效果下降,即“维度灾难”。

维度灾难与过拟合_第1张图片

                                       fig1

2、原因

假设有无穷多的猫狗图片,但是由于能力限制只得到10张图片,最终目标是基于这10张图片构建一个分类器,能够对10个样本之外的无限多图片正确分类。

  • 单个特征对训练样本分类效果不佳

维度灾难与过拟合_第2张图片

                                 fig2

  • 增加第二个特征仍然不能线性分割

维度灾难与过拟合_第3张图片

                          fig3

  • 增加第三个特征实现了线性可分

维度灾难与过拟合_第4张图片

                   fig4

在1D空间中(fig2),10个样本完全覆盖率1D特征空间,特征空间宽度为5,此时样本密度是10/2=5。在2D空间中(fig3),特征空间面积为5*5-25,因此2D下的样本密度是10/25=0.4。在3D空间中(fig4),样本密度是10/125=0.08。如果我们继续增加特征,整个特征空间维度增加,并变得越来越稀疏。由于稀疏性,我们更加容易找到一个超平面来实现分类。这是因为随着特征数量变得无限大,训练样本在最佳超平面的错误侧的可能性将会变得无限小。然而,如果我们将高维的分类结果投影到低维空间中,将会出现一个严重的问题:使用太多特征导致过拟合。分类器学习了过多样本数据的异常特征(噪声),而对新数据的泛化能力不好。

维度灾难与过拟合_第5张图片

              fig5

fig5展示了3D的分类结果投影到2D特征空间的样子。样本数据在3D是线性可分的,但是在2D却并非如此。事实上,增加第三个维度来获得最佳的线性分类效果,等同于在低维特征空间中使用非线性分类器。其结果是,分类器学习了训练数据的噪声和异常,而对样本外的数据拟合效果并不理想,甚至很差。这个概念称为过拟合,是维度灾难的一个直接后果。fig6展示了一个只用2个特征进行分类的线性分类器的二维平面图。

维度灾难与过拟合_第6张图片

                        fig6

尽管fig6中的现行分类器比fig4中的非线性分类器的效果差,但是fig6的分类器泛化能力强。这是因为分类器没有把样本数据的噪声和异常也进行学习。另一方面说,使用更少的特征,维度灾难就能避免,就不会出现对训练样本过拟合的现象。

3、另一种解释

fig7用不同的方式解释上面的内容。假设我们只使用一个特征来训练分类器,1D特征值的范围限定在0到1之间,且每只猫和狗对应的特征值是唯一的。如果我们希望训练样本的特征值占特征值范围的20%,那么训练样本的数量就要达到总体样本数的20%。现在,如果增加第二个特征,也就是从直线变为平面2D特征空间,这种情况下,如果要覆盖特征值范围的20%,那么训练样本数量就要达到总体样本数的45%(0.45*0.45=0.2)。而在3D空间中,如果要覆盖特征值范围的20%,就需要训练样本数量达到总体样本数的58%(0.58*0.58*0.58=0.2)。
换句话说,如果可用的训练样本数量是固定的,那么如果增加特征维度的话,过拟合就会发生。另一方面,如果增加特征维度,为了覆盖同样的特征值范围、防止过拟合,那么所需的训练样本数量就会成指数型增长。

维度灾难与过拟合_第7张图片

在上面的例子中,我们展示了维度灾难会引起训练数据的稀疏化。使用的特征越多,数据就会变得越稀疏,从而导致分类器的分类效果就会越差。维度灾难还会造成搜索空间的数据稀疏程度分布不均。事实上,围绕原点的数据(在超立方体的中心)比在搜索空间的角落处的数据要稀疏得多。想象一个单位正方形代表了2D的特征空间,特征空间的平均值位于这个单位正方形的中心处,距中心处单位距离的所有点构成了正方形的内接圆。没有落在单位圆的训练样本距离搜索空间的角落处更距离中心处更近,而这些样本由于特征值差异很大(样本分布在正方形角落处),所有难以分类。因此,如果大部分样本落在单位内接圆里,就会更容易分类。

 

4、如何避免

  • 如果理论上训练样本时无限多的,那么维度灾难不会发生,我们可以使用无限多的特征来获得一个完美的分类器。训练数据越少,使用的特征就要越少。如果N个训练样本覆盖了1D特征空间的范围,那么在2D中,覆盖同样密度就需要N*N个数据,同样在3D中,就需要N*N*N个数据。也就是说,随着维度增加,训练样本的数量要求随指数增加。

  • 非线性决策边界的分类器(例如神经网络、KNN分类器、决策树等)分类效果好但是泛化能力差且容易发生过拟合。因此,当使用这些分类器的时候,维度不能太高。如果使用泛化能力好的分类器(例如贝叶斯分类器、线性分类器),可以使用更多的特征,因为分类器模型并不复杂。

  • 过拟合只在高维空间中预测相对少的参数和低维空间中预测多参数这两种情况下发生。举个例子,高斯密度函数有两类参数:均值和协方差矩阵。

  • 通过对原始特征进行优化的线性或非线性组合来减少问题维度的算法称为特征提取。一个著名的维度降低技术是主成分分析法(PCA),它去除不相关维度,对N个原始特征进行线性组合。PCA算法试着找到低维的线性子空间,保持原始数据的最大方差。然而,数据方差最大不一定代表数据最显著的分类信息。

  • 交叉验证。交叉验证将原始训练数据分成多个训练样本子集。在分类器进行训练过程中,一个样本子集被用来测试分类器的准确性,其他样本用来进行参数估计。如果交叉验证的结果与训练样本子集得到的结果不一致,那么就表示发生了过拟合。如果训练样本有限,那么可以使用k折法进行交叉验证。

你可能感兴趣的:(机器学习)