如何正确理解维度灾难
一、前言
博主最近在学习机器学习的PCA降维算法的时候,对于维度灾难和特征稀疏有了新的认识。这篇文章主要讲解什么是维度灾难,并从几何的角度来对其进行形象的解释。
二、维度灾难的概念
维度灾难(Curse of Dimensionality),什么是维度呢?在机器学习的表示中,我们常常用XXX表示数据集,xix_{i}xi表示其中的一个样本,xi(j)x_{i}^{(j)}xi(j)表示第i个样本汇总的第j个特征。==样本的特征个数也就是维度。==而维度灾难就是说,我们在训练样本的时候,在样本数目不变的情况下,随着维度的增高,我们的模型效果会随着维度的增高而降低。也就是说,如果想要达到相同的模型效果,在使用高维度时所需要的样本数量要比低维度的样本数量大的多。这个关系,一般会呈2的指数分布,即 i=2ji =2^ji=2j 。
而以上说的这种情况,实际上就是指的是机器学习的"过拟合"现象。我们通过离散化增加特征维度的同时引入很多非线性信息。虽然非线性信息能够增强拟合能力,但是这并不是完全正相关的。而根据 **奥卡姆剃刀定律,一个满足预测性能条件下尽量简单,才能够有比较好的泛化能力。**所以,增加特征维度和提高模型本身的复杂性效果是一致的,模型的复杂性可以使用正则化来自动控制,而特征维度只能通过人为方式来权衡调整。
三、从几何角度解释维度灾难
当我们试图去自己想象一个高维空间时,直觉的思维方式往往行不懂。我们甚至很难想象四维超立方体是什么样子的。
图:点、线段、正方形、立方体和网络(0维到四维超立方体)
我们画出下面这张二维平面下的图,边长为1.
假设这个正方形表示二维的特征空间,特征空间的平均值是这个正方形的中心,离这个圆点中心距离为1的样本分布在单位圆中,不在圆中的样本相对于中心更接近正方形的边角部分。如果样本都落在了元内,分类将会很简单;如果样本落到了圆外(边角部分),就会很难分类。我们来给出一个大致的公式证明:
假设此时维度为jjj维。不管维度是多少,超立方体的体积都是 1j=11^j = 11j=1。而对于j维度的超球面,其体积为 V(j)=k∗rjV(j) = k * r^j V(j)=k∗rj
其中k=πd/2Γ(d2+1)0.5d,r=0.5k = \frac{\pi^{d/2}}{\Gamma(\frac{d}{2} + 1 )} 0.5^d,r=0.5k=Γ(2d+1)πd/20.5d,r=0.5
那么,当维度jjj趋近于无穷大时,超球面的体积趋近于0**(也就是说,在高维度球面球体基本上是空的),然而超立方体体积没有变换。那么在分类的时候,大多数的样本都不在超球面内,都在超立方体内。这样就会导致样本更加的难以分类。此时样本是具有稀疏性的,也就是维度非常高,而样本少,且在高维度的空间中样本分布不均匀,导致其难以分类。*
除此之外,另外一个问题就是,如果我们在这个二维平面内随机挑两个点,这两个点的平均距离大约为0.52,如果在三维的单位立方体里随机挑两个点,两点之间的距离大约是0.66。但是,如果在一个100万维度的超立方体中随机挑两个点,它的距离大约为408((1000000/6)\sqrt{(1000000/6)}(1000000/6) )!!这个事实也说明了高维数据有很大可能是稀疏的。大多数训练的实例可能彼此之间距离很远。这也意味着新的实例很可能远离任何一个训练实例,导致跟低维度比起来,预测更加的不可靠,更容易过拟合。
四、维度灾难的解决方法
在处理维度灾难的时候,我们可以通过增加数据集、正则化、降低维度等方法来解决。
虽然增大数据集可以使训练实例达到足够的密度,可以解决维度灾难的问题。但是要达到给定密度,所需要的训练集数量随着维度的增加呈指数式的上升。比如100个特征,要让所有训练实例(假设在所有维度上平均分布)之间的距离小于0.1,这时需要的训练实例数量就比可观察的宇宙中的原子数量还要多…所以在解决维度灾难时,我们常常会采用降维。
对于降低维度,我们主要有三种方法:
- 直接降维 : 特征选择(人工或者自动。如Lasso方法)
- 线性降维 : PCA、MDS
- 非线性降维:流行学方法,包括Isomap 以及 LLE(局部线性嵌入)方法
五、不同算法维度权衡
当模型比较复杂时,不要选择太高的维度;当模型比较简单时,可以选择较高的维度。其实就是要去考虑:是否要去增加维度,提供非线性的问题。
非线性决策边界的分类器(例如神经网络、KNN分类器、决策树等)分类效果好但是泛化能力差且容易发生过拟合。因此,维度不能太高。
使用泛化能力好的分类器(例如贝叶斯分类器、线性分类器),可以使用更多的特征,因为分类器模型并不复杂。
因此,过拟合只在高维空间中预测相对少的参数和低维空间中预测多参数这两种情况下发生。
如何正确理解维度灾难相关推荐
- 02 聚类算法 - 相似度距离公式、维度灾难
聚类就是对__大量未知标注__的数据集,按照数据__内部存在的数据特征__将数据集划分为__多个不同的类别__,使__类别内的数据比较相似__,__类别之间的数据相似度比较小__. 聚类算法的重点是计 ...
- 机器学习中的维度灾难
红色石头的个人网站:redstonewill.com 一.介绍 本篇文章,我们将讨论所谓的"维度灾难",并解释在设计一个分类器时它为何如此重要.在下面几节中我将对这个概念进行直观的 ...
- 深度学习:维度灾难(Curse Of Dimensionality)
深度学习:维度灾难 维度灾难的几何意义 补充说明 (r 如果大于1) 维度灾难于过拟合的关系 缓解方法 维度灾难的几何意义 假设有一个正方形,边长为1,那么面积为1 * 1. 正方形的内接圆的边长为0 ...
- 维度灾难 维数灾难 暂记
距离度量问题 对于基于距离的模型KNN,K-means来说.需要有效的降维,或者大量数据的训练,发现数据的低维流形空间. Theorem[Beyer et al.99]:Fix ϵ\epsilonϵ ...
- 正确理解scipy中的coo_matrix函数
正确理解scipy中的coo_matrix函数 1. 构造一个空矩阵 2. 使用ijv(triplet)格式构造一个矩阵 3. 用重复的索引构造矩阵 1. 构造一个空矩阵 这种用法比较简单,直接生成一 ...
- ADSL的PPPOE拨号客户端上的ppp authentication pap “callin”的正确理解
ADSL的PPPOE拨号客户端上的ppp authentication pap "callin"的正确理解 对callin参数的理解一定要注意,很容易单让初学者通过"中国 ...
- Python数据集可视化:抽取数据集的两个特征进行二维可视化、主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用)
Python数据集可视化:抽取数据集的两个特征进行二维可视化.主成分分析PCA对数据集降维进行三维可视化(更好地理解维度之间的相互作用) 目录 Python数据集可视化:抽取数据集的两个特征进行二维可 ...
- PCA、碎石图、PCA+正确的维度个数、增量PCA(IncrementalPCA)、随机PCA(Randomized PCA)、KernelPCA
PCA.碎石图.PCA+正确的维度个数.增量PCA(IncrementalPCA).随机PCA(Randomized PCA).KernelPCA 目录 PCA
- 调整模型 与 提纯样本的关系过程有点类似EM算法过程,不知道这样理解是否是正确理解,固定A调B,B调到最优后,固定B再调A,循环往复,直至最优。
调整模型 与 提纯样本的关系过程有点类似EM算法过程,不知道这样理解是否是正确理解,固定A调B,B调到最优后,固定B再调A,循环往复,直至最优. 个人理解
最新文章
- 人工智能军事对抗技术发展趋势
- java中gson的简单使用
- 今日学习心得——装饰模式
- 温州大学《机器学习》课程课件(十、聚类)
- 关于玻璃体手术的最终建议
- Maven plugin - maven-dependency-plugin
- Mysql-索引的基础和类型
- kuangbin带你飞dp专题-基础dp
- ActiveMQ 持久化
- 基于C++和AStar算法求解八数码问题的方案
- SM951 NVMe 版本安装Win7 的正确方法
- 今天第一次来这里开博,大家多多指教
- Configured.java
- HDU4747 MEX(dp ,递推)
- html中如何设计圆形图案,纯CSS绘制漂亮的圆形图案效果
- UOJ#454. 【UER #8】打雪仗
- vue+elementui+html+css+js昵图网
- excel导出文件加密
- 利用Amber热力学积分计算相对自由能变化
- 好玩的程序,看大神如何玩转编程
热门文章
- 浅谈HTTP Adaptive Streaming技术及其前景
- python运行cmd命令和opencv搭建_Python让蔡徐坤在我的命令行里打篮球!
- 老罗的Android系统分析(三横三纵)
- 校招总结—FPGA从入门到放弃
- c语言运算符优先级 从右到左,c语言运算符优先级,结合性(左/右结合详解)
- (void (*Visit)(const ElemType ))
- Beam failure Recovery
- 获取手机唯一识别码IMEI
- 基于深度学习的视觉三维重建研究总结2进阶
- 腾讯运维专家的自我修养