真实数据中真的存在“维度灾难”吗?

机器算法验证 聚类 降维 高维
2022-02-08 10:05:24

我了解什么是“维度诅咒”,并且我已经完成了一些高维优化问题并且知道指数可能性的挑战。

但是,我怀疑大多数现实世界的数据中是否存在“维度诅咒” (好吧,让我们暂时将图像或视频放在一边,我正在考虑诸如客户人口统计和购买行为数据之类的数据)。

我们可以收集具有数千个特征的数据,但这些特征几乎不可能完全跨越数千个维度的空间。这就是降维技术如此受欢迎的原因。

换句话说,数据很可能不包含指数级的信息,即许多特征高度相关,许多特征满足80-20条规则(许多实例具有相同的值)。

在这种情况下,我认为像 KNN 这样的方法仍然可以很好地工作。(在大多数书中,“维度的诅咒”说维度 > 10 可能会有问题。在他们的演示中,他们在所有维度上使用均匀分布,其中熵非常高。我怀疑这在现实世界中是否会发生。)

我对真实数据的个人经验是,“维度诅咒”不会过多地影响模板方法(例如 KNN),并且在大多数情况下,大约 100 的维度仍然可以工作。

这对其他人来说是真的吗?(我在不同行业使用了 5 年的真实数据,从未观察到书中描述的“所有距离对都有相似的值”。)

4个回答

本文(1)讨论了非均匀性的祝福作为对维数诅咒的对立面。主要思想是数据在特征空间中并不是均匀分布的,因此可以通过识别数据的组织方式来获得牵引力。

(1) Pedro Domingos,“关于机器学习的一些有用的知识”

机器学习中的维度诅咒通常是在您拥有的几个数据点之间爆炸空白空间的问题。低流形数据会使情况变得更糟。这是一个包含 10000 个样本的示例设置,我尝试使用 1 个邻居进行 kNN。

from numpy.random import normal
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import precision_score
import matplotlib.pyplot as plt
import numpy as np
from math import sqrt
from scipy.special import gamma

N=10000
N_broad=2
scale=20

dims=[]
precs=[]


def avg_distance(k):
    return sqrt(2)*gamma((k+1)/2)/gamma(k/2)

for dim in range(N_broad+1,30):
    clf = KNeighborsClassifier(1, n_jobs=-1)

    X_train=np.hstack([normal(size=(N,N_broad)), normal(size=(N,dim-N_broad))/avg_distance(dim-N_broad)/scale])
    y_train=(X_train[:,N_broad]>0).astype(int)
    clf.fit(X_train, y_train)

    X_test=np.hstack([normal(size=(N,N_broad)), normal(size=(N,dim-N_broad))/avg_distance(dim-N_broad)/scale])
    y_test=(X_test[:,N_broad]>0).astype(int)
    y_test_pred=clf.predict(X_test)

    prec=precision_score(y_test, y_test_pred)
    dims.append(dim)
    precs.append(prec)
    print(dim, prec)

plt.plot(dims, precs)
plt.ylim([0.5,1])
plt.xlabel("Dimension")
plt.ylabel("Precision")
plt.title("kNN(1) on {} samples".format(N))
plt.show()

你不喜欢完全均匀的分布,所以我把它做成了一个 2D 流形,尺寸更小(由 减少scale)散布在前两个坐标的 2D 平面周围。碰巧的是,较小的维度之一是可预测的(当该维度为正时,标签为 1)。

精度随着尺寸的增加而迅速下降。kNN 精度

当然,precision=0.5 将是随机猜测。有了比飞机更复杂的决策面,情况会变得更糟。

就像 kNN 球太稀疏,无法帮助探测光滑的超平面。随着更高的维度,他们感到越来越孤独。

另一方面,像 SVM 这样的方法具有全局视图并且做得更好。

例如考虑时间序列(以及图像和音频)。传感器读数(物联网)非常普遍。

维度灾难比你想象的要普遍得多。那里有很大的冗余,但也有很多噪音。

问题在于,许多人只是简单地避免了真实数据的这些挑战,而只是一遍又一遍地使用相同的精心挑选的 UCI 数据集。

Breiman有一篇精彩的文章“统计建模:两种文化”他解释了处理数据的两组科学家以及他们每个人如何看待“维度”。您的问题的答案是“这取决于”您属于哪个组。检查纸张。