Предположим, что x i и x j - векторы наблюдаемых признаков в случаях i и j. Тогда, как вы, наверное, знаете, kNN основан на расстояниях || x i - x j ||, таких как евклидово один.
Теперь, если x i и x j содержат только одну особенность, рост человека в метрах, у нас все хорошо, как других «конкурирующих» функций нет. Предположим, что затем мы добавим годовой оклад в тысячах. Следовательно, мы смотрим на расстояния между векторами, такими как (1.7, 50000) и (1.8, 100000).
Тогда, в случае евклидова расстояния, ясно, что функция зарплаты доминирует над высотой, и это почти как если бы мы использовали только функцию зарплаты. То есть
|| x i - x j || 2 ≈ | 50000-100000 |.
Однако, если две функции на самом деле имеют одинаковое значение, то мы плохо справляемся. Еще хуже, если зарплата на самом деле не имеет значения, и мы должны использовать только рост. Интересно, что в слабых условиях наш классификатор по-прежнему обладает хорошими свойствами, такими как универсальная согласованность, даже в таких плохих ситуациях. Проблема в том, что в конечных выборках производительность нашего классификатора очень плохая, поэтому сходимость очень медленная.
Итак, чтобы иметь дело с этим, можно рассмотреть различные расстояния, например, что-то делать с масштабом. Обычно люди стандартизируют (устанавливают среднее значение на ноль и дисперсию на 1) каждую функцию, но это также не полное решение. Существуют различные предложения о том, что можно сделать (см., Например, здесь ).
С другой стороны, алгоритмы, основанные на деревьях решений, от этого не страдают. В этих случаях мы просто ищем точку, где нужно разделить переменную. Например, если заработная плата принимает значения в [0,100000], а разделение составляет 40000, то Salary / 10 будет разделено на 4000, чтобы результаты не изменились.