У меня есть набор данных с колонками a b c
(3 атрибута). a
является числовым и непрерывным в то время как b
и c
являются категориальными каждый с двумя уровнями. Я использую метод K-Nearest Neighbours для классификации a
и b
далее c
. Таким образом, чтобы иметь возможность измерять расстояния, я преобразовываю свой набор данных, удаляя b
и добавляя b.level1
и b.level2
. Если наблюдение i
имеет первый уровень в b
категориях, b.level1[i]=1
и b.level2[i]=0
.
Теперь я могу измерять расстояния в моем новом наборе данных: a b.level1 b.level2
С теоретической / математической точки зрения: Можете ли вы выполнить K-ближайший сосед (KNN) с двоичными и непрерывными данными?
Я использую FNN
пакет в R и функциюknn()
Ответы:
Это нормально, объединяя категориальные и непрерывные переменные (функции).
Каким-то образом, нет большого теоретического обоснования для такого метода, как k-NN. Эвристика заключается в том, что если две точки близки друг к другу (согласно некоторому расстоянию), то они имеют что-то общее с точки зрения выхода. Может быть да, а может быть и нет. И это зависит от расстояния, которое вы используете.
В вашем примере вы определяете расстояние между двумя точками и такими как:(a,b,c) (a′,b′,c′)
Это соответствует приданию весов неявно каждой функции.
Обратите внимание, что если принимает большие значения (например, 1000, 2000 ...) с большой дисперсией, то вес двоичных объектов будет незначительным по сравнению с весом . Только расстояние между и действительно будет иметь значение. И наоборот: если принимает небольшие значения, такие как 0,001: учитываются только двоичные объекты.a a a a′ a
Вы можете нормализовать поведение, взвесив: разделив каждую особенность на ее стандартное отклонение. Это относится как к непрерывным, так и к двоичным переменным. Вы также можете указать свои предпочтительные веса.
Обратите внимание, что функция R kNN () делает это за вас: https://www.rdocumentation.org/packages/DMwR/versions/0.4.1/topics/kNN
В качестве первой попытки просто используйте в основном norm = true (нормализация). Это позволит избежать большинства бессмысленных ситуаций, которые могут возникнуть при объединении непрерывных и категориальных функций.
источник
Да, вы, безусловно, можете использовать KNN как с двоичными, так и с непрерывными данными, но при этом следует учитывать ряд важных соображений.
Результаты будут в значительной степени проинформированы бинарными расщеплениями относительно дисперсии среди реальных значений (для масштабированных 0-1 невзвешенных векторов), как показано ниже:
В этом примере вы можете видеть, что ближайшие соседи отдельного наблюдения по расстоянию будут НАМНОГО более сильно информированы двоичной переменной, чем масштабированной переменной действительного значения.
Кроме того, это распространяется на несколько двоичных переменных - если мы заменим одну из вещественных переменных на двоичную, мы увидим, что расстояния будут гораздо более информированными при сопоставлении по всем задействованным двоичным переменным, чем при приближении к действительным значениям:
Вы захотите включить только критические двоичные переменные - фактически вы спрашиваете «обо всех наблюдениях, которые соответствуют этой конфигурации двоичных переменных (если таковые имеются), которые имеют ближайшие реальные значения?» Это разумная формулировка многих проблем, которые можно решить с помощью KNN, и очень плохая формулировка других проблем.
источник