Cara menggunakan smote untuk data tidak seimbang di r (dengan contoh)
Seringkali saat bekerja dengan algoritme klasifikasi pembelajaran mesin, kelas dalam kumpulan data menjadi tidak seimbang.
Misalnya:
- Kumpulan data yang berisi informasi tentang apakah pemain perguruan tinggi direkrut ke NBA atau tidak mungkin memiliki 98% pemain yang belum direkrut dan 2% sedang direkrut.
- Kumpulan data yang berisi informasi apakah pasien menderita kanker atau tidak mungkin berisi 99% pasien tanpa kanker dan hanya 1% yang mengidap kanker.
- Kumpulan data yang berisi informasi penipuan bank mungkin berisi 96% transaksi sah dan 4% transaksi penipuan.
Karena kelas-kelas yang tidak seimbang ini, model prediktif yang Anda buat mungkin tidak berfungsi dengan baik pada kelas minoritas.
Parahnya lagi, kelas minoritas sering kali menjadi kelas yang paling ingin kita prediksi.
Salah satu cara untuk mengatasi masalah ketidakseimbangan ini adalah dengan menggunakan teknik pengambilan sampel berlebihan minoritas sintetik , yang sering disingkat SMOTE .
Teknik ini melibatkan pembuatan dataset baru dengan melakukan oversampling observasi dari kelas minoritas, sehingga menghasilkan dataset dengan kelas yang lebih seimbang.
Cara termudah untuk menggunakan SMOTE di R adalah dengan menggunakan fungsi SMOTE() dari paket DMwR .
Fungsi ini menggunakan sintaks dasar berikut:
SMOTE(form, data, perc. over = 200 , perc. under = 200 , ...)
Emas:
- form : Rumus yang menjelaskan model yang ingin Anda adaptasi
- data : Nama bingkai data
- perc.over : Angka yang menentukan berapa banyak kasus tambahan dari kelas minoritas yang dihasilkan
- perc.under : Angka yang menentukan berapa banyak kasus tambahan dari kelas mayoritas yang dihasilkan
Contoh berikut menunjukkan cara menggunakan fungsi ini dalam praktiknya.
Contoh: Cara menggunakan SMOTE di R
Misalkan kita memiliki kumpulan data berikut dengan 100 observasi di R dimana 90 memiliki kelas “Ya” dan 10 memiliki kelas “Tidak” untuk variabel respon:
#make this example reproducible set. seed ( 0 ) #create data frame with one response variable and two predictor variables df <- data. frame (y=rep(as. factor (c(' Yes ', ' No ')), times=c( 90 , 10 )), x1=rnorm( 100 ), x2=rnorm( 100 )) #view first six rows of data frame head(df) y x1 x2 1 Yes 1.2629543 0.7818592 2 Yes -0.3262334 -0.7767766 3 Yes 1.3297993 -0.6159899 4 Yes 1.2724293 0.0465803 5 Yes 0.4146414 -1.1303858 6 Yes -1.5399500 0.5767188 #view distribution of response variable table(df$y) Drowned 10 90
Ini adalah contoh klasik dari dataset yang tidak seimbang karena variabel respon yang kita prediksi memiliki 90 observasi dengan kelas “Ya” dan hanya 10 observasi dengan kelas “Tidak”.
Untuk membuat dataset yang lebih seimbang, kita dapat menggunakan fungsi SMOTE() dari paket DMwR :
library ( DMwR) #use SMOTE to create new dataset that is more balanced new_df <- SMOTE(y ~ ., df, perc. over = 2000 , perc. under = 400 ) #view distribution of response variable in new dataset table(new_df$y) Drowned 210,800
Dataset yang dihasilkan berisi 210 observasi dengan kelas “Tidak” dan 800 observasi dengan kelas “Ya”.
Inilah tepatnya bagaimana fungsi SMOTE menghasilkan kumpulan data baru ini:
- Argumen perc.over menetapkan bahwa kami ingin menambahkan 2000/100 (atau 20) kali jumlah observasi minoritas yang ada ke kumpulan data. Karena ada 10 observasi di kumpulan data asli, kami menambahkan 20*10 = 200 observasi minoritas tambahan .
- Argumen perc.under menetapkan bahwa kami ingin membuat jumlah observasi mayoritas sama dengan 400/100 (atau 4) kali jumlah observasi minoritas yang ditambahkan ke observasi minoritas yang ada. Karena 200 observasi minoritas tambahan ditambahkan, kami membuat jumlah observasi mayoritas sama dengan 200 * 4 = 800 observasi mayoritas .
Hasil akhirnya adalah dataset yang masih berisi lebih banyak kelas mayoritas, namun masih lebih seimbang dibandingkan dataset aslinya.
Anda sekarang dapat mengadaptasi algoritma klasifikasi pilihan Anda ke kumpulan data baru ini, yang seharusnya memiliki kinerja lebih baik pada kelas minoritas karena terdapat lebih banyak observasi dari kelas minoritas dalam kumpulan data baru ini.
Catatan : Silakan bermain-main dengan argumen perc.over dan perc.under di fungsi SMOTE untuk mendapatkan kumpulan data yang sesuai dengan kebutuhan Anda.
Sumber daya tambahan
Tutorial berikut menjelaskan cara melakukan tugas umum lainnya di R:
Cara membuat tabel ringkasan di R
Cara menormalkan data di R
Cara menghilangkan outlier di R