两个物体之间的欧氏距离

Euclidean distance between two objects

首先我知道欧氏距离是什么,它在两个向量之间做什么或计算什么。

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

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

我已经知道的(如果我没记错的话!)是我必须将此对象转换为表示属性或 'Features'(在机器学习中调用?)

但是我该怎么做呢?我需要的正是这块拼图,以了解更多。

我是否必须收集 属性 的所有可能值以将其转换为数字并将其写入 array/vector?

示例

我猜上面的对象将 表示为一个 6 维数组或更小的数组,基于需要 计算的 'Features'。 假设颜色、名称和价格是 array/vector 基于以下数据的必要特征:

看起来像这样?

[3,324,14]

如果我对同一 class 中的每个对象执行此操作,我就能计算出欧氏距离。我是对的还是我误解了什么,还是完全错了?

将此问题视为统计问题。将所有属性分类为名义变量、顺序变量和尺度变量。一旦你这样做了,它就是一个多维距离向量问题。

对于每种数据类型,您需要选择一种合适的方法来确定距离。在许多情况下,每种数据类型本身也可能必须被视为向量。

例如,对于颜色,您可以将颜色表示为 RGB 值,然后取欧几里德距离(取 3 个差值,求平方,求和,然后求平方根)。您可能想要选择与 RGB 不同的颜色-space(例如,HSI)。参见此处:Colour Difference.

比较两个字符串更容易:常用的方法是 Levenshtein 距离。 Apache commons StringUtils class.

中有一个方法

数字 - 取差。

每种类型都需要考虑直接生成距离或计算数值的最佳方法,然后减去数值得到 "distance"。

一旦你有了每个对象所有字段的所有 "values" 的矢量,你就可以计算欧几里得距离(差的平方,求和和求和的平方根)。

在你的情况下,如果你有:

object 1: [3,324,14]
object 2: [5,123,10]

欧氏距离为:

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

但是在比较字符串的情况下,Levenshtein 算法直接给你距离,没有字段的中间数字。