weka EuclideanDistance

У меня есть следующий код для расчета расстояния EuclideanDistance с использованием weka.core.EuclideanDistance, где оба экземпляра все пропущенные значения, как показано ниже

Во-первых, все пропущенные значения:?,?,?,?

во втором экземпляре отсутствуют все значения:?,?,?,?

EuclideanDistance distance = new EuclideanDistance();
distance.setInstances(test);
Instance first = test.get(0);
Instance second = test.get(1);
double d = distance.distance(first, second);

однако, когда я запускаю код, я получаю результат 4.0, я понятия не имею, откуда эта 4.0, может кто-нибудь сказать мне? Заранее спасибо!

1 ответ

Решение

Недостающие значения в алгоритме k-Nearest Neighbors обычно обрабатываются в соответствии со следующими критериями:

Для номинальных атрибутов:

if isMissingValue(a) or isMissingValue(b), then
    distance = 1

Для числовых атрибутов:

if isMissingValue(a) and isMissingValue(b), then
    distance = 1

if isMissingValue(a) and !isMissingValue(b), then
    distance = max(b, 1-b)

if !isMissingValue(a) and isMissingValue(b), then
    distance = max(a, 1-a)

Вы можете проверить реализацию в источнике (ссылка предоставлена Walter).

Другие вопросы по тегам