Вам нужно немного поиграть с двумя параметрами, доступными из функции: perc.over
и perc.under
.
Согласно документу от SMOTE
:
Параметры perc.over и perc.under управляют количеством избыточной выборки класса меньшинства и недостаточной выборки классов большинства соответственно.
So:
perc.over обычно будет числом выше 100. С этим типом значений для каждого наблюдения в исходном наборе данных, принадлежащем классу меньшинства, будет создано perc.over/100 новых примеров этого класса.
Я не вижу ваших данных, но если ваш класс меньшинства имеет 100 случаев и perc.over=100
, алгоритм сгенерирует 100/100 = 1 новых случаев из этого класса.
Параметр perc.under управляет долей наблюдений мажоритарного класса, которые будут случайным образом выбраны для окончательного «сбалансированного» набора данных. Эта пропорция рассчитывается по отношению к количеству вновь созданных дел класса меньшинства.
Так, например, значение perc.under=100
будет выбирать из класса большинства исходных данных такое же количество наблюдений, которое было сгенерировано для класса меньшинства.
В нашем примере был сгенерирован только 1 новый случай, поэтому он добавит еще один, в результате чего будет создан новый набор данных с 2 наблюдениями.
Я предлагаю использовать значения выше 100 для perc.over
и даже более высокие значения для perc.under
(по умолчанию 100 и 200).
Имейте в виду, что вы добавляете новые наблюдения, которые не являются реальными в вашем классе меньшинства, я постараюсь держать их под контролем.
Числовой пример:
set.seed(123)
data <- data.frame(var1 = sample(50),
var2 = sample(50),
out = as.factor(rbinom(50, 1, prob=0.1)))
table(data$out)
# 0 1
# 43 7 # 50 rows total (original data)
smote_data <- DMwR::SMOTE(out ~ var1, data, perc.over = 200, perc.under = 400)
table(smote_data$out)
# 0 1
# 56 21 # 77 rows total (smote data)
person
RLave
schedule
11.02.2019
data_code
. Если я предлагаю решение, я не могу его проверить. Мне пришлось бы создать пример самому, но здесь предполагается, что это ваша часть работы. Создайте поддельный наборdata_code
, который воспроизводит проблему, и опубликуйте его в своем вопросе (избегайте внешней ссылки). - person denis   schedule 11.02.2019