SMOTE выдает ошибку для мультиклассовой проблемы дисбаланса

10

Я пытаюсь использовать SMOTE для исправления дисбаланса в моей проблеме классификации нескольких классов. Хотя SMOTE отлично работает с набором данных iris согласно справочному документу SMOTE, он не работает с аналогичным набором данных. Вот как выглядят мои данные. Обратите внимание, что у него есть три класса со значениями 1, 2, 3.

> data
   looking risk every status
1        0    1     0      1
2        0    0     0      1
3        0    0     0      2
4        0    0     0      1
5        0    0     0      1
6        3    0     0      1
7        0    0     0      1
8        0    0     0      1
9        0    1     0      1
10       0    0     0      1
11       0    0     0      3
12       0    0     0      1
13       0    0     0      1
14       0    0     0      1
15       0    0     0      2

Он находится в форме фрейма данных, как и радужная оболочка:

> class(data)
[1] "data.frame"

Вот мой код с использованием SMOTE и ошибка, которую он выдает:

> newData <- SMOTE(status ~ ., data, perc.over = 600,perc.under=100)
Error in scale.default(T, T[i, ], ranges) : subscript out of bounds
In addition: Warning messages:
1: In FUN(newX[, i], ...) :
  no non-missing arguments to max; returning -Inf
2: In FUN(newX[, i], ...) :
  no non-missing arguments to max; returning -Inf
3: In FUN(newX[, i], ...) :
  no non-missing arguments to max; returning -Inf
4: In FUN(newX[, i], ...) : no non-missing arguments to min; returning Inf
5: In FUN(newX[, i], ...) : no non-missing arguments to min; returning Inf
6: In FUN(newX[, i], ...) : no non-missing arguments to min; returning Inf
загар
источник
пожалуйста, попробуйте преобразовать целевой столбец (т. е. "статус") в фактор и рассмотрите пометку поста @ xing ниже как ответ.
зеленовато

Ответы:

13

Я столкнулся с подобной проблемой, и я решил ее, переведя значения класса («status» в вашем случае) в тип фактора. После использования data$status=factor(data$status), newDataотпечатков следующим образом :

     looking risk every status
7          0    0     0      1
2          0    0     0      1
7.1        0    0     0      1
12         0    0     0      1
4          0    0     0      1
12.1       0    0     0      1
11         0    0     0      3
8         NA   NA    NA      3
9         NA   NA    NA      3
10        NA   NA    NA      3
111       NA   NA    NA      3
121       NA   NA    NA      3
13        NA   NA    NA      3

Нет ошибок!

син
источник
Жаль, что в SMOTEдокументации не упоминается, что это работает, только если метки являются факторами!
Pop
Это было для меня. преобразование в коэффициент исправил это.
зеленовато