gpt4 book ai didi

java - 两个物体之间的欧氏距离

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:00:41 26 4
gpt4 key购买 nike

首先,我知道什么是欧氏距离,以及它在两个 vector 之间的作用或计算。

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

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

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

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

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

示例:

我猜上述对象将根据计算所需的“特征”由 6 维数组或更小的数组表示。假设颜色、名称和价格是基于以下数据的数组/vector 的必要特征:

  • 颜色:绿色(假设一个枚举有 5 个可能的值,其中绿色是第三个)
  • name: "foo"(我不知道如何转换这个可能使用添加ascii码?)
  • 价格:14(只取整数?)

看起来像这样?

[3,324,14]

如果我对同一类中的每个对象都这样做,我就能够计算出欧氏距离。我是对的还是我误解了什么,或者完全错了?

最佳答案

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

例如,对于颜色,您可以将颜色表示为 RGB 值,然后计算欧几里得距离(计算 3 个差值,对其求平方,求和,然后求平方根)。您可能希望选择与 RGB 不同的颜色空间(例如 HSI)。看这里:Colour Difference .

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

数字 - 取差。

每种类型都需要考虑最好的方法,要么直接生成距离,要么计算一个数值,然后减去该数值以给出“距离”。

一旦您拥有每个对象的所有字段的所有“值”的 vector ,您就可以计算欧几里得距离(差的平方、求和和求和的平方根)。

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

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

欧氏距离是:

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

但在比较字符串的情况下,Levenshtein 算法会直接为您提供距离,而无需字段的中间数字。

关于java - 两个物体之间的欧氏距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54366169/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com