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).