java-两个对象之间的欧几里得距离
作者:互联网
首先,我知道欧几里得距离是什么,它在两个向量之间的作用或计算结果.
但是我的问题是关于如何计算两个类对象之间的距离,例如在Java或任何其他OOP语言中.我阅读了很多有关机器学习的东西,已经使用库等编写了一个分类器.但是我想知道当我拥有这个对象时如何计算欧几里得距离:
class Object{
String name;
Color color;
int price;
int anotherProperty;
double something;
List<AnotherObject> another;
}
我已经知道(如果我没有错!),我必须将该对象转换为表示属性或“功能”的(n)向量/数组(在机器学习中称为?).
但是我该怎么办呢?我需要了解的只是这个难题.
我是否必须收集属性的所有可能值以将其转换为数字并将其写入数组/向量中?
例:
我猜上面的对象将基于6维数组或更小,基于计算所需的“特征”.
假设颜色,名称和价格是基于以下数据的数组/矢量的必要特征:
>颜色:绿色(假设一个枚举有5个可能的值,其中绿色是第三个)
>名称:“ foo”(我可能不知道该如何使用
加上ASCII码?)
>价格:14(只取整数?)
会是这样吗?
[3,324,14]
而且,如果我对同一类中的每个对象执行此操作,则可以计算出欧几里得距离.我是对的还是我误会了某件事,还是完全错了?
解决方法:
对于每种数据类型,您需要选择一种确定距离的适当方法.在许多情况下,每种数据类型本身也可能必须视为向量.
例如,对于颜色,您可以将颜色表示为RGB值,然后求出Euclidian距离(取3个差异,将它们平方,求和,然后求平方根).您可能要选择与RGB不同的颜色空间(例如,HSI).看到这里:Colour Difference
比较两个字符串比较容易:通用的方法是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算法可以直接为您提供距离,而无需字段的中间数字.
标签:euclidean-distance,oop,java 来源: https://codeday.me/bug/20191108/2006861.html