So verwenden sie smote für unausgeglichene daten in r (mit beispiel)


Bei der Arbeit mit Klassifizierungsalgorithmen für maschinelles Lernen sind die Klassen im Datensatz häufig unausgewogen.

Zum Beispiel:

  • In einem Datensatz, der Informationen darüber enthält, ob College-Spieler in die NBA eingezogen werden oder nicht, sind möglicherweise 98 % der Spieler nicht eingezogen und 2 % werden eingezogen.
  • Ein Datensatz, der Informationen darüber enthält, ob Patienten an Krebs leiden oder nicht, könnte 99 % der Patienten ohne Krebs und nur 1 % mit Krebs enthalten.
  • Ein Datensatz mit Bankbetrugsinformationen könnte 96 % legitime Transaktionen und 4 % betrügerische Transaktionen enthalten.

Aufgrund dieser unausgeglichenen Klassen funktioniert das von Ihnen erstellte Vorhersagemodell möglicherweise nicht gut für die Minderheitsklasse.

Schlimmer noch: Die Minderheitenklasse ist oft diejenige, die wir am meisten vorhersagen möchten.

Eine Möglichkeit, dieses Ungleichgewichtsproblem zu lösen, ist die Verwendung der synthetischen Minderheits-Oversampling-Technik , oft als SMOTE abgekürzt.

Bei dieser Technik wird ein neuer Datensatz durch Überabtastung von Beobachtungen aus der Minderheitsklasse erstellt, wodurch ein Datensatz mit ausgewogeneren Klassen entsteht.

Der einfachste Weg, SMOTE in R zu verwenden, ist die Verwendung der SMOTE()- Funktion aus dem DMwR- Paket.

Diese Funktion verwendet die folgende grundlegende Syntax:

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

Gold:

  • Formular : Eine Formel, die das Modell beschreibt, das Sie anpassen möchten
  • data : Name des Datenrahmens
  • perc.over : Zahl, die bestimmt, wie viele zusätzliche Fälle der Minderheitsklasse generiert werden
  • perc.under : Zahl, die bestimmt, wie viele zusätzliche Fälle der Mehrheitsklasse generiert werden

Das folgende Beispiel zeigt, wie Sie diese Funktion in der Praxis nutzen können.

Beispiel: Verwendung von SMOTE in R

Angenommen, wir haben den folgenden Datensatz mit 100 Beobachtungen in R, von denen 90 eine „Ja“-Klasse und 10 eine „Nein“-Klasse für die Antwortvariable haben:

 #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

Dies ist ein klassisches Beispiel für einen unausgeglichenen Datensatz, da die Antwortvariable, die wir vorhersagen, 90 Beobachtungen mit der Klasse „Ja“ und nur 10 Beobachtungen mit der Klasse „Nein“ aufweist.

Um einen ausgewogeneren Datensatz zu erstellen, können wir die Funktion SMOTE() aus dem DMwR- Paket verwenden:

 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

Der resultierende Datensatz enthält 210 Beobachtungen mit „Nein“ als Klasse und 800 Beobachtungen mit „Ja“ als Klasse.

So hat die SMOTE-Funktion diesen neuen Datensatz genau erstellt:

  • Das perc.over- Argument gab an, dass wir das 2000/100-fache (oder 20-fache) der Anzahl vorhandener Minderheitenbeobachtungen zum Datensatz hinzufügen wollten. Da im ursprünglichen Datensatz 10 Beobachtungen vorhanden waren, haben wir 20*10 = 200 zusätzliche Minderheitenbeobachtungen hinzugefügt.
  • Das perc.under- Argument gab an, dass wir die Anzahl der Mehrheitsbeobachtungen auf das 400/100-fache (oder 4-fache) der Anzahl der Minderheitsbeobachtungen setzen wollten, die zu den vorhandenen Minderheitsbeobachtungen addiert wurden. Da 200 zusätzliche Minderheitsbeobachtungen hinzugefügt wurden, haben wir die Anzahl der Mehrheitsbeobachtungen auf 200 * 4 = 800 Mehrheitsbeobachtungen festgelegt.

Das Endergebnis ist ein Datensatz, der immer noch mehr Mehrheitsklassen enthält, aber immer noch ausgewogener ist als der ursprüngliche Datensatz.

Sie können nun den Klassifizierungsalgorithmus Ihrer Wahl an diesen neuen Datensatz anpassen, der bei der Minderheitsklasse eine bessere Leistung erzielen sollte, da dieser neue Datensatz mehr Beobachtungen aus der Minderheitsklasse enthält.

Hinweis : Probieren Sie ruhig mit den Argumenten perc.over und perc.under in der SMOTE-Funktion aus, um einen Datensatz zu erhalten, der Ihren Anforderungen entspricht.

Zusätzliche Ressourcen

Die folgenden Tutorials erklären, wie Sie andere häufige Aufgaben in R ausführen:

So erstellen Sie Übersichtstabellen in R
So normalisieren Sie Daten in R
So entfernen Sie Ausreißer in R

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert