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
r
classification
unbalanced-classes
oversampling
berjemur
sumber
sumber
Jawaban:
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)
,newData
cetak sebagai berikut:Tidak ada kesalahan!
sumber
SMOTE
dokumentasi yang hanya berfungsi jika label adalah faktor!