2016-12-22 4 views
0

Ich habe einen Datensatz mit 10.000 Beobachtungen. Meine Zielgröße hat zwei Klassen - „Y“ und „N. Im Folgenden ist die Verteilung von‚Y‘und‚N‘:Wie erstellt man ein ausgeglichenes Training und einen unsymmetrischen Testdatensatz in R?

> table(data$Target_Var) 
Y N 
2000 8000 

Jetzt habe ich ein ausgewogenen Trainingsdaten so eingestellt, dass 50% erstellt werden soll (1000) die „Y“ ist in der Ausbildung. Da der Trainingsdatensatz soll ausgeglichen werden, wird es weitere 1000 Zeilen mit „N“. Gesamtzahl der Beobachtungen hat = 2000.

table(Training$Target_Var) 
Y N 
1000 1000 

der Testdatensatz ist unausgeglichen, aber mit dem gleichen Verhältnis von "Y" und "N" wie in der Population, dh der Test wird 5000 Reihen von Beobachtungen mit 1000 "Y" und 4000 Reihen von "N" haben.

Jetzt kann ich eine Funktion schreiben, um es zu tun, aber gibt es irgendeine integrierte R-Funktion, die das tun kann? Ich untersuchte Sampling-Funktionen von Caret- und Sampling-Paketen, konnte aber keine Funktion finden, die einen Trainingsdatensatz erstellen könnte. SMOTE tut dies, indem er eine neue Beobachtung erstellt.

+0

Sie mit 'Probe (Level versuchen können (Training $ Target_Var), 2000, ersetzen = TRUE, prob = c (0,2, 0,8)) ' – akrun

Antwort

1

Ich konnte es in zwei Schritten tun. Angenommen I folgende Datensatz haben:

data<- data.frame(Target_Var = rep("A", 2000), Pop = rep(1:100,20)) 
data<- rbind(data, data.frame(Target_Var = rep("B", 8000), Pop = rep(1:100,80))) 

> table(data$Target_Var) 
Y N 
2000 8000 

Schritt 1: Daten erstellen Prüfanordnung mit 50% des 'Y' (d.h 1000 Zeilen) und 4000 Reihen von 'N'. Dies hat die gleiche Verteilung von 'Y' und 'N' wie in der Bevölkerung.

test_index <- createDataPartition(data$Target_Var, p = .5, list = F) 
Test<- data[test_index,] 

table(Test$Target_Var) 
A B 
1000 4000 

Schritt 2: Erstellen Sie ausgewogene Trainingsdaten den restlichen Datensatz bilden (1000 Zeilen von 'Y' und 1000 Zeilen von 'N')

Training<- data[-test_index,] 
Training<- strata(Training, stratanames = "Target_Var", size = c(1000,1000)) 

table(Training$Target_Var) 
A B 
1000 1000 
Verwandte Themen