真实数据中是否确实存在“维数诅咒”?


17

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

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

我们可以收集具有数千个要素的数据,但是即使要素不可能完全跨越具有数千个维度的空间,这种可能性也很小。这就是为什么降维技术如此流行的原因。

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

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

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

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


1
由于您专门排除了图像和图像分析功能,因此我将在此插入一些注释,说此字段确实定期处理维数的诅咒。获得过度拟合的解决方案非常容易。
阿什

7
二进制/虚拟/单热编码的分类特征可以轻松炸毁基于距离的模型
shadowtalker,2016年

2
我的一位同事从事太阳镜的销售。相当多的功能分类具有大量可能的级别(例如,品牌,眼镜不同部分的材料等)。我绝对害怕CoD,但始终很难说它是否存在于特定的数据集中,而且我们很可能没有做很多标准的技巧,不是这种特定分析类型的专家。
S. Kolassa-恢复莫妮卡

@StephanKolassa那么,基于距离的方法在太阳眼镜用例中是否可行?
海涛杜

不太好。这不是一个非常成功的项目。
S. Kolassa-恢复莫妮卡

Answers:


15

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

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


7

机器学习中的维度诅咒通常是在您拥有的几个数据点之间爆炸空白的问题。低歧管数据会使情况更糟。这是一个具有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()

您不喜欢完全均匀的分布,因此我将其制作为二维流形,其尺寸较小(减小了scale),并散布在前两个坐标的2D平面周围。碰巧的是,较小的维度之一是可预测的(当该维度为正数时,标签为1)。

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

当然,precision = 0.5将是随机猜测。如果决策面比飞机复杂,它将变得更糟。

就像kNN球太稀疏,不足以帮助探测光滑的超平面。有了更高的尺寸,他们会感到越来越孤独。

另一方面,诸如SVM之类的方法具有全局性,并且效果更好。


5

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

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

问题在于,许多人只是避免了对真实数据的这些挑战,而一次又一次地使用相同的经过反复挑选的UCI数据集。


PX=PX1个ñ=2ñPXñ|Xñ-1个

1
也许大多数现实世界的数据来自图像,视频和时间序列等传感器?
Anony-Mousse-恢复莫妮卡

2
@ hxd1011 markov属性是一个抽象,可能与真实数据无关!
Sycorax说恢复莫妮卡

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.