SMOTE викидає помилку для багатокласової проблеми дисбалансу


10

Я намагаюся використовувати SMOTE для виправлення дисбалансу в моїй проблемі класифікації класів. Хоча SMOTE чудово працює на наборі даних райдужної оболонки відповідно до довідкового документа 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

Я зіткнувся з подібною проблемою, і вирішив її, перенісши значення класу ("статус" у вашому випадку) у тип фактора. Після використання 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документації не згадується, що вона працює лише в тому випадку, якщо мітки є фактором!
Поп

Це було для мене. перетворюючи на фактор, зафіксовано його.
Зеленуватий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.