两个对象之间的欧几里得距离

3

首先,我知道欧几里得距离是什么以及它在计算两个向量之间的距离时所起的作用。

但我的问题是关于如何计算两个类对象之间的距离,例如在Java或任何其他面向对象编程语言中。我已经阅读了很多关于机器学习的资料,使用库编写了分类器等,但我想知道当我有这样一个对象时如何计算欧几里得距离:

class Object{
    String name;
    Color color;
    int price;
    int anotherProperty;
    double something;
    List<AnotherObject> another;
}

我已经了解到的是,我需要将这个对象转换为一个表示属性或“特征”(在机器学习中称为)的向量/数组。但是我该怎么做呢?这只是我需要理解更多的拼图中的一部分。
我是否需要收集属性的所有可能值并将其转换为数字,然后将其写入数组/向量中?
例如:上面的对象将基于以下数据的颜色、名称和价格作为必要特征来计算,可能会被表示为一个6维数组或更小的数组/向量。
  • color: 绿色(假设枚举有5种可能的值,绿色是第三种)
  • name: "foo" (我不知道如何转换这个值,也许使用ascii码的加法?)
  • price: 14 (只需取整数?)
它看起来像这样:
[3,324,14]

如果我对同一类的每个对象执行此操作,那么我就能够计算欧几里德距离。我是否正确或者是否有什么误解,或者完全错误?


我不知道你想解决什么问题,但我无法想象在哪种情况下添加ASCII代码的解决方案会有用。对于字符串“22”和“d”,您将获得相同的值。 - NeplatnyUdaj
1
名称是否是一组类别之一,还是可以是任何东西?两个名称接近对其意义有何影响?这甚至有任何意义吗?类似的名称是否有关联? - kutschkem
我目前没有需要解决的问题,我想了解如何正确地将具有属性的对象转换为向量,然后应用欧几里得算法。你所说的“22”和“d”是什么意思? - Markus G.
@kutschkem 的名称可以是任何东西,但如果名称可以是任何东西,将其包含为功能是愚蠢的。这只是一个例子。 - Markus G.
你在机器学习中遇到了一个相当重要的问题。关于文本差异,请不要使用欧几里得距离函数,而是使用余弦相似度:https://towardsdatascience.com/3-basic-distance-measurement-in-text-mining-5852becff1d7 - Erik
2个回答

4
对于每种数据类型,您需要选择适当的距离确定方法。在许多情况下,每种数据类型本身也必须被视为向量。
例如,对于颜色,您可以将颜色表示为RGB值,然后采用欧几里得距离(取3个差异,平方,求和,然后平方根)。您可能想选择与RGB不同的颜色空间(例如HSI)。请参见此处:颜色差异
比较两个字符串更容易:常见的方法是Levenshtein距离。在Apache commons的StringUtils类中有一种方法。
数字-只需取差异即可。
每种类型都需要考虑最佳方式,以直接生成距离或计算一个数值,然后减去该数值以给出“距离”。
一旦您拥有每个对象所有字段的“值”的向量,就可以计算欧几里得距离(平方差异,求和并平方根)。
在您的情况下,如果您有:
object 1: [3,324,14]
object 2: [5,123,10]

欧几里得距离是:

公式

sqrt( (3-5)^2 + (324-123)^2 + (14-10)^2 )

但是在比较字符串的情况下,Levenshtein算法直接给出距离而不需要中间数字。


听起来不错。你所说的“平方差值,求和并开方”是什么意思?我很难理解。你能重新说明一下吗? - Markus G.
请确保距离度量满足三角不等式。这取决于算法,但通常期望距离度量具备此属性。 - kutschkem
这只是毕达哥拉斯定理。请参见https://en.wikipedia.org/wiki/Euclidean_distance。 - rghome
@MarkusG。这意味着,与其使用 distance = sqrt( (a1-b1)^2 + (a2-b2)^2) ) 这个公式,你可以采用 distance = sqrt( distance1(a1,b1)^2 + distance2(a2,b2)^2 ) 的方式计算距离。 - kutschkem
好的,谢谢,很难理解,这不是我的母语。听起来不错,我会尝试一下。 - Markus G.

0

把这个问题看作是一个统计学问题。将所有属性分类为名义、序数和比例变量。一旦完成了这一步,它就只是一个多维距离向量问题。


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