SMOTE genera un errore per un problema di squilibrio multi classe


10

Sto cercando di usare SMOTE per correggere lo squilibrio nel mio problema di classificazione multi-classe. Sebbene SMOTE funzioni perfettamente sul set di dati dell'iride secondo il documento della guida di SMOTE, non funziona su un set di dati simile. Ecco come appaiono i miei dati. Nota che ha tre classi con valori 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

È sotto forma di frame di dati, come l'iride:

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

Ecco il mio codice usando SMOTE e l'errore che genera:

> 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

prova a convertire la colonna target (ad es. "status") in fattore e considera la risposta contrassegnando il post di @ xing come risposta.
Verdastro

Risposte:


13

Ho riscontrato un problema simile e l'ho risolto trasferendo i valori di classe ("status" nel tuo caso) nel tipo di fattore. Dopo l'uso data$status=factor(data$status), newDatastampa come segue:

     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

Nessun errore!


È un peccato che non sia menzionato nella SMOTEdocumentazione che funziona solo se le etichette sono un fattore!
Pop

Questo è stato per me. la conversione in fattore risolto.
verdastro
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.