Передискретизация с категориальными переменными


9

Я хотел бы выполнить комбинацию передискретизации и недостаточной выборки, чтобы сбалансировать мой набор данных примерно с 4000 клиентами, разделенными на две группы, где доля одной из групп составляет примерно 15%.

Я изучил SMOTE ( http://www.inside-r.org/packages/cran/DMwR/docs/SMOTE ) и ROSE ( http://cran.r-project.org/web/packages/ROSE/ ROSE.pdf ), но оба они создают новые синтетические образцы с использованием существующих наблюдений и, например, кНН.

Однако, поскольку многие из атрибутов, связанных с клиентами, являются категоричными, я не думаю, что это правильный путь. Например, многие мои переменные, такие как Region_A и Region_B, являются взаимоисключающими, но с использованием kNN новые наблюдения могут быть размещены как в Region_A, так и в Region_B. Вы согласны с тем, что это проблема?

В этом случае - как можно выполнить передискретизацию в R, просто дублируя существующие наблюдения? Или это неправильный способ сделать это?


Зачем вам нужна субсэмплинг, если у вас всего 4000 наблюдений?
kjetil b halvorsen

Я хочу сбалансировать свой набор данных, чтобы иметь примерно равную долю классов. Если я буду использовать свои данные, как сейчас, модели просто предскажут все наблюдения как класс большинства.
пир

Ответы:


8

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

В вашем примере с двумя регионами вы создадите новую переменную региона с двумя уровнями: «A» и «B». Ваши записи будут принимать соответствующие значения, ссылаясь на исходные столбцы.

Теперь, если вы находитесь в ситуации, когда ваши новые синтетические наблюдения могут генерировать конфликтующие категории, потому что они распределены по нескольким, в противном случае несвязанным переменным (например ,eticObservation.isPig = 1 иeticObservation.hasWings = 1), вы всегда можете выполнить некоторые дополнительные операции по сбору данных. прежде чем делать оценку вашей модели, чтобы убрать такие аберрации.

Кроме того, поскольку у вас есть около 600 наблюдений за событиями в вашем наборе данных, возможно, рассмотрите потенциальные выгоды от использования синтетических наблюдений, полученных из-за недостаточной выборки большинства класса?

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.