Настройка Весов объектов для KNN

Я работаю с реализацией KNN sklearn. Хотя мои входные данные имеют около 20 функций, я считаю, что некоторые из них более важны, чем другие. Есть ли способ:

  1. установите вес функции для каждой функции при "обучении" ученика KNN.
  2. узнать, что оптимальные значения веса С или без предварительной обработки данных.

на соответствующей заметке я понимаю, что обычно KNN не требует обучения, но так как sklearn реализует его с помощью KDTrees, дерево должно быть сгенерировано из данных обучения. Однако это звучит как превращение KNN в проблему двоичного дерева. Это так?

спасибо.

2 ответов


kNN просто основан на функции расстояния. Когда вы говорите: "функция два важнее, чем другие", это обычно означает, что разница в функции два стоит, скажем, 10-кратной разницы в других координатах. Простой способ достичь этого-умножить coord #2 на его вес. Таким образом, вы помещаете в дерево не исходные координаты, а координаты, умноженные на их соответствующие веса.

Если ваши функции являются комбинациями координат, вам может потребоваться применить соответствующее преобразование матрицы на ваши координаты перед применением Весов см. В разделе PCA (анализ основных компонентов). PCA, вероятно, поможет вам с вопросом 2.


ответ на вопрос называется "метрическое обучение" и в настоящее время не реализован в Scikit-learn. Использование популярного расстояния Mahalanobis равнозначно масштабированию данных с помощью StandardScaler. В идеале вы хотели бы, чтобы ваша метрика учитывала метки.