SMOTE melempar kesalahan untuk masalah ketidakseimbangan multi-kelas

10

Saya mencoba menggunakan SMOTE untuk memperbaiki ketidakseimbangan dalam masalah klasifikasi multi-kelas saya. Meskipun SMOTE bekerja dengan sempurna pada dataset iris sesuai dengan dokumen bantuan SMOTE, ia tidak bekerja pada dataset yang sama. Inilah tampilan data saya. Catatan itu memiliki tiga kelas dengan nilai 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

Itu dalam bentuk bingkai data, sama seperti iris:

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

Ini kode saya menggunakan SMOTE dan kesalahan yang dilemparnya:

> 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
berjemur
sumber
coba konversi kolom target Anda (yaitu "status") menjadi faktor dan pertimbangkan untuk menandai posting @ xing di bawah ini sebagai jawabannya.
Hijau

Jawaban:

13

Saya telah mengalami masalah yang sama, dan saya menyelesaikannya dengan mentransfer nilai kelas ("status" dalam kasus Anda) ke dalam jenis faktor. Setelah menggunakan data$status=factor(data$status), newDatacetak sebagai berikut:

     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

Tidak ada kesalahan!

xing
sumber
Sayang sekali bahwa itu tidak disebutkan dalam SMOTEdokumentasi yang hanya berfungsi jika label adalah faktor!
Pop
Itu untuk saya. mengkonversi ke faktor memperbaikinya.
Hijau