两个物体之间的欧氏距离
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 基于以下数据的必要特征:
- color: green(假设一个枚举有 5 个可能的值,其中绿色是第三个)
- name: "foo"(我不知道如何转换这个可能使用
添加ascii码?)
- 价格:14(只取整数?)
看起来像这样?
[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 算法直接给你距离,没有字段的中间数字。
首先我知道欧氏距离是什么,它在两个向量之间做什么或计算什么。
但我的问题是关于如何计算两个 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 基于以下数据的必要特征:
- color: green(假设一个枚举有 5 个可能的值,其中绿色是第三个)
- name: "foo"(我不知道如何转换这个可能使用 添加ascii码?)
- 价格:14(只取整数?)
看起来像这样?
[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 算法直接给你距离,没有字段的中间数字。