Answers:
这取决于您的数据。实际上,它与层次聚类无关,而与距离函数本身有关。
问题是当您具有混合属性时。
假设您拥有有关人员的数据。重量(克)和鞋码。鞋子的大小差异很小,而体重(以克为单位)的差异则大得多。您可以举出许多示例。您只是无法比较1 g和1鞋子的大小差异。实际上,在此示例中,您计算出的物理单位为!
通常在这些情况下,欧几里得距离就没有意义。但是,在许多情况下,如果对数据进行规范化,它仍然可能起作用。即使实际上没有任何意义,对于您没有“经证明正确”的距离函数的情况(例如人类规模的物理世界中的欧几里得距离),它也是一种很好的启发方法。
如果您不对数据进行标准化,则以大价值单位衡量的变量将主导计算的相异性,而以小价值单位衡量的变量的贡献将很小。
我们可以通过以下方式在R中可视化它:
set.seed(42)
dat <- data.frame(var1 = rnorm(100, mean = 100000),
var2 = runif(100),
var3 = runif(100))
dist1 <- dist(dat)
dist2 <- dist(dat[,1, drop = FALSE])
dist1
包含基于所有三个变量的100个观测值的欧几里得距离,而dist2
包含var1
仅基于一个变量的欧几里得距离。
> summary(dist1)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.07351 0.77840 1.15200 1.36200 1.77000 5.30200
> summary(dist2)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000072 0.470000 0.963600 1.169000 1.663000 5.280000
注意多么相似距离的分布,从表示小的贡献var2
和var3
,与实际距离非常相似:
> head(dist1)
[1] 1.9707186 1.0936524 0.8745579 1.2724471 1.6054603 0.1870085
> head(dist2)
[1] 1.9356566 1.0078300 0.7380958 0.9666901 1.4770830 0.1405636
如果我们标准化数据
dist3 <- dist(scale(dat))
dist4 <- dist(scale(dat[,1, drop = FALSE]))
则仅基于var1
和基于所有三个变量的距离都有很大的变化:
> summary(dist3)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.09761 1.62400 2.25000 2.28200 2.93600 5.33100
> summary(dist4)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000069 0.451400 0.925400 1.123000 1.597000 5.070000
> head(dist3)
[1] 2.2636288 1.7272588 1.7791074 3.0129750 2.5821981 0.4434073
> head(dist4)
[1] 1.8587830 0.9678046 0.7087827 0.9282985 1.4184214 0.1349811
当分层聚类使用这些距离时,是否需要标准化将取决于您拥有的数据/变量的类型,以及您是否希望大型事物主导距离并因此主导聚类的形成。答案是特定于域和特定于数据集。