R'de dengesiz veriler için smote nasıl kullanılır (örnekle)


Genellikle makine öğrenimi sınıflandırma algoritmalarıyla çalışırken veri kümesindeki sınıflar dengesiz olacaktır.

Örneğin:

  • Üniversite oyuncularının NBA’e seçilip seçilmediğine ilişkin bilgi içeren bir veri kümesinde oyuncuların %98’i seçilmemiş ve %2’si draft edilmiş olabilir.
  • Hastaların kanser olup olmadığına dair bilgi içeren bir veri seti, kanserli olmayan hastaların %99’unu ve kanserli hastaların yalnızca %1’ini içerebilir.
  • Banka dolandırıcılığı bilgilerini içeren bir veri kümesi, %96 meşru işlem ve %4 dolandırıcılık işlemi içerebilir.

Bu dengesiz sınıflar nedeniyle oluşturduğunuz tahmine dayalı model azınlık sınıfında iyi çalışmayabilir.

Daha da kötüsü, çoğunlukla tahmin etmeyi en çok istediğimiz sınıf azınlık sınıfıdır.

Bu dengesizlik sorununu çözmenin bir yolu, genellikle SMOTE olarak kısaltılan sentetik azınlık aşırı örnekleme tekniğini kullanmaktır.

Bu teknik, daha dengeli sınıflara sahip bir veri kümesi üreten azınlık sınıfından gözlemlerin aşırı örneklenmesiyle yeni bir veri kümesi oluşturulmasını içerir.

R’de SMOTE kullanmanın en kolay yolu DMwR paketindeki SMOTE() işlevini kullanmaktır.

Bu işlev aşağıdaki temel sözdizimini kullanır:

 SMOTE(form, data, perc. over = 200 , perc. under = 200 , ...)

Altın:

  • form : Uyarlamak istediğiniz modeli açıklayan bir formül
  • data : Veri çerçevesinin adı
  • perc.over : Azınlık sınıfının ek kaç vakasının oluşturulduğunu belirleyen sayı
  • perc.under : Çoğunluk sınıfından kaç ek vakanın oluşturulduğunu belirleyen sayı

Aşağıdaki örnekte bu fonksiyonun pratikte nasıl kullanılacağı gösterilmektedir.

Örnek: R’de SMOTE nasıl kullanılır?

Yanıt değişkeni için 90’ının “Evet” sınıfına ve 10’unun “Hayır” sınıfına sahip olduğu, R’de 100 gözlem içeren aşağıdaki veri setine sahip olduğumuzu varsayalım:

 #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

Bu, dengesiz bir veri kümesinin klasik bir örneğidir çünkü tahmin ettiğimiz yanıt değişkeni, “Evet” sınıfına sahip 90 gözleme ve “Hayır” sınıfına sahip yalnızca 10 gözleme sahiptir.

Daha dengeli bir veri kümesi oluşturmak için DMwR paketindeki SMOTE() işlevini kullanabiliriz:

 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

Ortaya çıkan veri seti, sınıf olarak “Hayır” olan 210 gözlem ve sınıf olarak “Evet” olan 800 gözlem içermektedir.

SMOTE fonksiyonunun bu yeni veri setini tam olarak nasıl ürettiği aşağıda açıklanmıştır:

  • Perc.over argümanı, veri setine mevcut azınlık gözlemlerinin sayısının 2000/100 (veya 20) katı kadarını eklemek istediğimizi belirtti. Orijinal veri setinde 10 gözlem mevcut olduğundan, 20*10 = 200 ek azınlık gözlemi ekledik.
  • Perc.under argümanı, çoğunluk gözlemlerinin sayısını, mevcut azınlık gözlemlerine eklenen azınlık gözlemlerinin sayısının 400/100 (veya 4) katına eşit yapmak istediğimizi belirtti. 200 ilave azınlık gözlemi eklendiğinden, çoğunluk gözlemlerinin sayısını 200*4 = 800 çoğunluk gözlemine eşitledik.

Nihai sonuç, hâlâ daha fazla çoğunluk sınıfı içeren ancak yine de orijinal veri kümesinden daha dengeli bir veri kümesidir.

Artık seçtiğiniz sınıflandırma algoritmasını bu yeni veri kümesine uyarlayabilirsiniz; bu yeni veri kümesinde azınlık sınıfından daha fazla gözlem olduğundan azınlık sınıfında daha iyi performans göstermesi gerekir.

Not : İhtiyaçlarınıza uygun bir veri kümesi elde etmek için SMOTE işlevindeki perc.over ve perc.under argümanlarıyla oynamaktan çekinmeyin.

Ek kaynaklar

Aşağıdaki eğitimlerde R’de diğer ortak görevlerin nasıl gerçekleştirileceği açıklanmaktadır:

R’de özet tablolar nasıl oluşturulur
R’deki veriler nasıl normalleştirilir
R’de aykırı değerler nasıl kaldırılır

Yorum ekle

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir