Я работаю над проблемой двоичной классификации, для которой у меня несбалансированный набор данных. Я хочу создать новый более сбалансированный набор данных с 50% наблюдения в каждом классе. Для этого я использую алгоритм SMOTE в R, предоставляемый DMwR library
.
В новом наборе данных я хочу сохранить постоянными наблюдениями для большинства классов .
Однако я сталкиваюсь с двумя проблемами:
- SMOTE уменьшает или увеличивает количество наблюдений класса большинства (я хочу только увеличить количество класса меньшинства).
- Некоторые наблюдения сгенерированный SMOTE содержит значения NA.
Предположим, что у меня есть 20 наблюдений: 17 наблюдений в классе большинства и только 3 наблюдения в классе меньшинства. Вот мой код:
library(DMwR)
library(dplyr)
sample_data <- data.frame(matrix(rnorm(200), nrow=20))
sample_data[1:17,"X10"] <- 0
sample_data[18:20,"X10"] <- 1
sample_data[,ncol(sample_data)] <- factor(sample_data[,ncol(sample_data)], levels = c('1','0'), labels = c('Yes','No'))
newDataSet <- SMOTE(X10 ~., sample_data, perc.over = 400, perc.under = 100)
В моем коде я исправил perc.over = 400
, чтобы создать 12 новых наблюдений для класса меньшинства, и я исправил perc.under = 100
, чтобы не менять никаких изменений в классе большинства.
Однако, когда я проверяю newDataSet, я замечаю, что SMOTE уменьшает количество классов большинства с 17 до 12. Кроме того, некоторые сгенерированные наблюдения имеют значение NA.
На следующем изображении показано полученное результат:
введите описание изображения здесь