Классификация KNN с категориальными данными

Я занят работой над проектом, связанным с регрессией K-ближайшего соседа. Я смешал числовые и категориальные поля. Категориальные значения являются порядковыми (например, название банка, тип счета). Числовыми типами являются, например, заработная плата и возраст. Есть также некоторые двоичные типы (например, мужской, женский).

Как я могу включить категориальные значения в анализ KNN?

насколько мне известно, нельзя просто сопоставить каждое категориальное поле с цифровыми ключами (например, банк 1 = 1; банк 2 = 2 и т. д.), поэтому мне нужен лучший подход для использования категориальных полей. Я слышал, что можно использовать двоичные числа - это действенный метод? Совет был бы очень признателен.

3 ответов


вам нужно найти функция это работает для ваших данных. Использование бинарных индикаторных переменных неявно решает эту проблему. Это позволяет вам продолжить реализацию, вероятно, на основе матрицы, с такими данными, но гораздо более простой способ - и подходит для большинства методов на основе расстояния - просто использовать модифицированную функцию расстояния.

существует бесконечное количество таких комбинаций. Вам нужно поэкспериментировать, что работает подходящий для вас. По сути, вы можете использовать некоторую классическую метрику для числовых значений (обычно с нормализацией; но может иметь смысл также переместить эту нормализацию в функцию расстояния), а также расстояние по другим атрибутам, масштабируемым соответствующим образом.

в большинстве реальных областей применения алгоритмов, основанных на расстоянии, это самая сложная часть, оптимизирующая вашу доменную функцию расстояния. Вы можете увидеть это как часть предварительной обработки: определение сходство.

здесь много больше, чем просто Евклидово расстояние. Существуют различные теоретико-множественные меры, которые могут быть гораздо более подходящими в вашем случае. Например, коэффициент Танимото, сходство Джаккарда, коэффициент кости и так далее. Косинус тоже может быть вариантом.

есть целые конференции, посвященные темам поиска подобия-никто не утверждал, что это тривиально ни в чем, кроме евклидовых векторных пространств (и на самом деле, даже не там): http://www.sisap.org/2012


самый прямой способ преобразования категориальных данных в числовые-использование векторов индикаторов. См. ссылку, которую я опубликовал в своем предыдущем комментарии.


можем ли мы использовать локальное чувствительное хеширование ( LSH) + редактировать расстояние и предположить, что каждый бин представляет другую категорию? Я понимаю, что категориальные данные не показывают никакого порядка, и бункеры в LSH расположены в соответствии с хэш-функцией. Поиск хэш-функции, которая дает значимое количество бункеров, звучит для меня как изучение метрического пространства.