维数灾难:都是孤独惹的祸

    科技2024-10-19  28

    全文共2433字,预计学习时长7分钟

     

    图源:unsplash

    维数灾难究竟是什么?除了是机器学习术语中让人闻风丧胆的主要实例外,还包括特征数量的增加对数据集的影响。简言之,维数灾难全都与孤独有关。

     

    在具体解释维数灾难之前,让我们先来先解决一些基础术语问题。

     

    什么是特征?特征是机器学习中的一个词,在其他学科中可能称为预测器/(独立)变量/属性/信号。换句话说,它是关于每个数据点的信息。

     

    数据间保持距离非常容易:只需添加一个维度。但对某些算法来说,这可能是个灾难。如果一种机器学习算法对维数灾难非常敏感,该算法就只有在数据点被空间中的朋友围绕时才能有最好的运行效果。空间中,数据点周围的朋友越少,形势越容易恶化。

     

    一维

     

    想象自己坐在一个大教室里,周围都是好朋友。

     

    将自己想象成一个数据点,放置在一维空间中,房间一片漆黑,教室后面发出的亮光照射着你,影子投射在前面墙体的一条线上。在那条线上,你一点也不孤独,大家就像罐头中的沙丁鱼一样抱团取暖。一维空间真舒适,但可能有点儿舒适过头了。

     

    二维

     

    为了让你有呼吸的空间,现在增加一个维度。我们正处于二维空间,下面的平面是房间地板。在这一空间中,你和朋友们更加分散,每个人可以获得个人空间。

     

    如果想象成虚构的电子表格对你而言更容易,那就把添加/删除一个维度换成插入/删除一列数字。

     

    三维

     

    现在添加第三维度,把大家随机分配到原本所在的5层楼中的任意一层。

     

    突然,周围的朋友数骤减,孤独将你包围。如果你喜欢被朋友紧紧包围的感觉,可能如今你只能哀怨地盯着好几张空椅子,于是你泪眼朦胧,但至少周围可能还有一个朋友......

     

    四维

     

    现在再添加另一个维度——时间维度。

     

    学生们分散至60分钟的课堂的不同时段(不同楼层)——我们规定只有9节课,因为老师们也需要休息和生活。因此,如果你有幸在此之前仍然有同伴的情感支持,但现在,笔者可以明确告诉你,你已经与世隔绝了。

     

    如果你孤身一人时没有效率,那就麻烦了,维数灾难已经降临!

     

    MOAR维度

     

    随着维度增加,你的孤独感也增加得十分迅速。如果要确保每个同学都像在二维空间中被朋友环绕一样,就需要非常多的学生。

     

    这里最重要的是朋友数量必须呈指数增长,而非线性增长,这样才能防止“抑郁”。

     

    如果添加两个维度,那么甚至两个教室的学生都远远不够。起初如果教室有50名学生,添加5层楼和9堂课后则需要原来学生数的5x9=45倍才能达到原来只需50个人就能达到的效果。因此,我们需要45x50=2250个学生才能避免孤独。每个维度增加一个学生远远不够!数据需求飞速上升。

     

    如果添加维度,则最小的数据需求也会快速增长。每上升一个维度就要招收更多的学生(数据点)。如对你来说数据十分昂贵,那么维数灾难可不是闹着玩的。

     

    维度佼佼者

     

    并非所有的机器学习算法在面对一些独处时光时都会失控,k-NN之类的方法就是种子选手。k-NN是k-最近邻(Nearest Neighbors)的简称——该方法被用来计算临近数据点,因而数据点们“睦邻友好”相当重要。

     

    当涉及到维度时,其他方法则稳健地多。上一节线性回归课,你就会知道拥有可观数量的数据点,增加或去除一个维度并不会造成灾难性破坏。虽然依然会承担代价,但承担得起了。

     

    这并非意味着它能适应所有变更,没有万全之策,神经网络也是如此。如果你不知道最小二乘法会引起混乱,比如包含一个单个异常值或增加一个几乎完全一样的特征(多重共线性,又称犯罪的拿破仑,会卷土重来),那么你需要警惕起来。

     

    你该如何应对?

     

    如果实践中遇到维数灾难应该怎么办?如果你是机器学习研究人员,最好确认一下自己的算法是否有这个问题……但你肯定已经确认过了。

     

    笔者大胆揣测一下你的想法——你可能会想有没有可能设计出一种对维度不那么敏感的算法。在事物趋向于文本化的情况下,许多用户更喜欢高大的矩阵。(通常,在矩阵中行代表实例,而列代表特征,这样的话,高瘦的矩阵中就有许多实例分布在少数维度中。)

     

    如果你是应用数据科学爱好者,你会按照一直以来的方法处理,即在尝试所有可能的方法之前,只用一个或几个可能的特征获取算法的基准。

     

    一些方法只适用于高瘦数据集,因此,如果感觉算法处于维数灾难,你需要对数据集进行瘦身。

     

    如果你的方法在有限数量的特征上运行良好,而在你增加维度时却连连罢工,这就暗示你要么坚持自己选择的特征(或者你留了一手逐步选择),要么首先用一些特征工程技术把几个超级特征排除出去。可以试试保守办法,如主成分分析——时至今日,向量分析仍很重要,它永不过时——也可以尝试新派做法,如自编码器或其他神经网络方法。

     

    无需了解维数灾难这一术语就可完成任务,因为过程(从小处着手并逐步建立复杂度)本应该为用户服务,但是如果它给你带来困扰,那么现在就可以摆脱

     

    总结一下,增加越来越多的特征(列)需要以指数增长的实例(行)数来解决数据点在空间中的分散问题。一些方法只适用于高瘦数据集,所以如感觉发生维数灾难则需要对数据集瘦身。

    图源:SOURCE

    最后,为了防止大家把“空间封闭性”与规模关联起来,笔者需要解释一下,因为这与用英里还是厘米测量产生的影响无关,所以这种困境不能怪不断扩张的宇宙空间。

     

    简单的乘法运算也不能避免维数灾难。相反,也许这张图能帮你以3D形式感知它:这只球形奶牛……这只猫咪有多大并不重要,重要的是,它身上覆盖着多少塑料泡沫。

    一起分享AI学习与发展的干货

    欢迎关注全平台AI垂类自媒体 “读芯术”

    (添加小编微信:dxsxbb,加入读者圈,一起讨论最新鲜的人工智能科技哦~)

    Processed: 0.013, SQL: 8