如何计算两个向量的标准化欧几里得距离?

3

假设有以下两个向量:

x = [(10-1).*rand(7,1) + 1; randi(10,1,1)];
y = [(10-1).*rand(7,1) + 1; randi(10,1,1)];

前七个元素是[1,10]范围内的连续值。最后一个元素是[1,10]范围内的整数。

现在我想计算x和y之间的欧几里得距离。我认为整数元素是一个问题,因为所有其他元素可能非常接近,但整数元素始终具有间隔为1的空间。因此,对整数元素有偏见。

我该如何计算类似于归一化欧几里得距离的东西?


相关链接:https://stats.stackexchange.com/questions/136232/definition-of-normalized-euclidean-distance - Charlie Parker
3个回答

10
根据Wolfram Alpha交叉验证中的以下答案, 归一化欧几里得距离的定义如下:

enter image description here

你可以使用MATLAB进行计算:

0.5*(std(x-y)^2) / (std(x)^2+std(y)^2)

或者,您可以使用:

0.5*((norm((x-mean(x))-(y-mean(y)))^2)/(norm(x-mean(x))^2+norm(y-mean(y))^2))

谢谢你的回答。所以我必须对每个维度进行归一化,但是我只有两个数据点,即每个维度只有两个值。这是否不太适合使用标准差(或平均值)? - machinery
顺便问一下,我能否使用z分数,即减去平均值并除以标准差,然后仅使用普通欧几里得距离吗? - machinery
关于您的第一条评论 - 这个定义在R^2向量空间中也很好地被定义了。至于第二个问题 - 它也可能有效,我会考虑一下并回复您。 - ibezito
那个方程式来自哪里? - Charlie Parker

2

在计算距离之前,我更希望将x和y标准化,然后使用基本的欧几里得距离即可。

以您的示例为例

x_norm = (x -1) / 9;          % normalised x
y_norm = (y -1) / 9;          % normalised y
dist = norm(x_norm - y_norm); % Euclidean distance between normalised x, y

然而,我不确定是否拥有整数元素会导致某种偏见,但我们已经偏离了stackoverflow的主题 :)


谢谢。你是如何标准化的(为什么要减1再除以9)?这个话题更适合哪个StackExchange? - machinery
我猜交叉验证会更适合这个主题。为了将区间[0,1]中的x归一化,您需要执行(x-min(x))/(max(x)-min(x))。 - Chris

1

来自欧几里得距离-原始、归一化和双缩放系数

SYSTATPrimer 5SPSS提供数据归一化选项,以便研究人员计算一个基本上是“无尺度”的距离系数。 Systat 10.2的归一化欧几里得距离通过将属性或个体之间的每个平方差异除以平方差异总数(或样本大小)来进行“归一化”。

normalised Euclidean distance

坦率地说,我认为这种标准化没有太大意义——因为最终系数仍然与比例有关。也就是说,仅从系数值无法确定该值表示高还是低的不相似性。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接