我相信这个问题的标题说明了一切。
我相信这个问题的标题说明了一切。
Answers:
这有助于思考什么是“维数的诅咒”。CV有几个非常好的线程值得阅读。这是一个开始的地方: 向孩子解释“维数的诅咒”。
我注意到您对这如何应用于均值聚类感兴趣。值得注意的是, -means是一种搜索策略,用于(仅)最小化平方的欧几里得距离。有鉴于此,值得思考欧几里得距离与维数诅咒的关系(请参阅:为什么欧几里得距离不是高维的好度量?)。
这些线程的简短答案是,空间的体积(大小)相对于尺寸数以惊人的速度增加。甚至维度(对我来说,这似乎都不是一个“高维度”)也可以带来诅咒。如果您的数据在整个空间中均匀分布,则所有对象之间的距离大约相等。但是,正如@ Anony-Mousse在回答该问题时指出的那样,这种现象取决于空间中数据的排列方式。如果它们不统一,则不一定有这个问题。这就产生了一个问题,即统一分布的高维数据是否非常普遍(请参阅:“维数的诅咒”是否确实存在于实际数据中?)。
我认为重要的不一定是变量的数量(数据的字面量纲),而是数据的有效量纲。在均值的维度“太高” 的假设下,最简单的策略是计算您具有的特征数。但是,如果要考虑有效维数,可以执行主成分分析(PCA)并查看特征值如何下降。通常,大多数变化都存在于几个维度中(通常跨越数据集的原始维度)。从有效维数实际上要小得多的意义上讲,这意味着您不太可能遇到均值问题。
一种更复杂的方法是检查数据集中成对距离的分布,沿着@ hxd1011在他的答案中建议的线。查看简单的边际分布将给您一些可能的均匀性的提示。如果将所有变量归一化为在区间内,则成对距离必须在区间内。高度集中的距离会引起问题;另一方面,多模式分布可能是有希望的(您可以在我的答案中看到一个示例:如何在聚类中同时使用二进制变量和连续变量?)。
然而,均值是否将“起作用”仍然是一个复杂的问题。在您的数据中存在有意义的潜在分组的假设下,它们不一定存在于您所有的维度或最大化变化的构造维度中(即,主成分)。聚类可能处于较低的变化维度(请参阅:PCA示例,其中低变化的PC是“有用的”)。也就是说,您可能会在几个维度上或在较低版本的PC上使群集的点紧靠在彼此之间,并在它们之间很好地分隔开,但在较高版本的PC上的群集却并非遥不可及,这会导致均值忽略您要寻找的群集,而是选择人造群集(可以在此处查看一些示例:如何理解K-means的缺点)。
我的答案不限于K均值,而是检查对于任何基于距离的方法,我们是否都有维数的诅咒。K均值基于距离量度(例如,欧几里得距离)
在运行算法之前,我们可以检查距离度量分布,即数据中所有对的所有距离度量。如果你有数据点,你应该有0.5 ⋅ Ñ ⋅ (ñ - 1 )的距离度量。如果数据太大,我们可以检查一个样本。
如果我们有维数问题的诅咒,那么您将看到的是,这些值彼此非常接近。这似乎很违反直觉,因为这意味着每个人都接近或远离每个人,并且距离度量基本上是无用的。
runif
rnorm
这是从1到500的尺寸模拟,特征是从0到1的均匀分布。
plot(0, type="n",xlim=c(0,0.5),ylim=c(0,50))
abline(v=1/6,lty=2,col=2)
grid()
n_data=1e3
for (p in c(1:5,10,15,20,25,50,100,250,500)){
x=matrix(runif(n_data*p),ncol=p)
all_dist=as.vector(dist(x))^2/p
lines(density(all_dist))
}