Евклидово расстояние между двумя объектами - PullRequest
0 голосов
/ 25 января 2019

Прежде всего, я знаю, что такое евклидово расстояние и что оно делает или вычисляет между двумя векторами.

Но мой вопрос о , как вычислить расстояние между двумя объектами класса, например, в Java или любом другом языке ООП . Я много читал о машинном обучении, уже писал классификатор с использованием библиотек и т. Д., Но я хочу знать, как рассчитывается евклидово расстояние, когда у меня есть, например, этот объект:

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

То, что я уже знаю (если я не ошибаюсь!), Это то, что мне нужно преобразовать этот объект в (n) вектор / массив, представляющий свойства, или ' Features ' (называется в машинном обучении?)

Но как я могу это сделать? Мне нужен только этот кусочек головоломки, чтобы понять еще больше.

Нужно ли мне собирать все возможные значения для свойства, чтобы преобразовать его в число и записать в массив / вектор?

Пример :

Я полагаю, что вышеуказанный объект будет представлен 6-мерным массивом или меньше, основываясь на «признаках», которые необходимы для вычисления. Допустим, Color, Name и цена - это те необходимые характеристики массива / вектора, основанные на следующих данных:

  • color : green (допустим, перечисление с 5 возможными значениями, где green - третье)
  • name : "foo" (я не знаю, как конвертировать этот, возможно, используя добавление кода ascii?)
  • цена : 14 (просто взять целое число?)

будет выглядеть так?

[3,324,14]

И если я сделаю это с каждым Объектом из того же класса, я смогу вычислить евклидово расстояние. Я прав или я что-то не так понял, или это совершенно неправильно?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Для каждого типа данных вам нужно выбрать подходящий метод определения расстояния.Во многих случаях каждый тип данных также может рассматриваться как вектор.

Например, для цвета вы можете выразить цвет как значение RGB, а затем взять евклидово расстояние (взять 3 различия,квадрат их, сумма, а затем квадратный корень).Возможно, вы захотите выбрать другое цветовое пространство, чем RGB (например, HSI).Смотрите здесь: Разница в цвете .

Сравнение двух строк проще: общий метод - это расстояние Левенштейна.В Apache commons StringUtils class есть метод.

Numbers - просто возьмите разницу.

Каждый тип требует некоторого рассмотрения для лучшего способа генерациирасстояние или вычисление числового значения, которое затем можно вычесть, чтобы получить «расстояние».

Как только у вас есть вектор всех «значений» всех полей для каждого объекта, вы можете вычислитьЕвклидово расстояние (квадрат разности, сумма и квадратный корень из суммы).

В вашем случае, если у вас есть:

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

Евклидово расстояние равно:

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

Но в случае сравнения строк алгоритм Левенштейна дает вам расстояние напрямую без промежуточных чисел для полей.

0 голосов
/ 25 января 2019

Думайте об этой проблеме как о статистической проблеме. Классифицируйте все атрибуты на номинальные, порядковые и масштабные переменные. Как только вы это сделаете, это просто проблема многомерного вектора расстояния.

...