Gegevens splitsen tijdens training & #038; testsets in r (3 methoden)
Als we machine learning-algoritmen aanpassen aan datasets, verdelen we de dataset vaak eerst in een trainingsset en een testset.
Er zijn drie veelgebruikte manieren om gegevens op te splitsen in trainings- en testsets in R:
Methode 1: Gebruik Base R
#make this example reproducible set. seeds (1) #use 70% of dataset as training set and 30% as test set sample <- sample(c( TRUE , FALSE ), nrow(df), replace= TRUE , prob=c( 0.7 , 0.3 )) train <- df[sample, ] test <- df[!sample, ]
Methode 2: Gebruik het caTools-pakket
library (caTools) #make this example reproducible set. seeds (1) #use 70% of dataset as training set and 30% as test set sample <- sample. split (df$any_column_name, SplitRatio = 0.7 ) train <- subset(df, sample == TRUE ) test <- subset(df, sample == FALSE )
Methode 3: Gebruik het dplyr-pakket
library (dplyr) #make this example reproducible set. seeds (1) #create ID column df$id <- 1:nrow(df) #use 70% of dataset as training set and 30% as test set train <- df %>% dplyr::sample_frac( 0.70 ) test <- dplyr::anti_join(df, train, by = ' id ')
De volgende voorbeelden laten zien hoe u elke methode in de praktijk kunt gebruiken met de ingebouwde irisgegevensset in R.
Voorbeeld 1: Gegevens opsplitsen in trainings- en testsets met behulp van Base R
De volgende code laat zien hoe u de R-basis kunt gebruiken om de irisgegevensset te splitsen in een trainings- en testset, waarbij 70% van de rijen wordt gebruikt als trainingsset en de resterende 30% als testset:
#load iris dataset data(iris) #make this example reproducible set. seeds (1) #Use 70% of dataset as training set and remaining 30% as testing set sample <- sample(c( TRUE , FALSE ), nrow(iris), replace= TRUE , prob=c( 0.7 , 0.3 )) train <- iris[sample, ] test <- iris[!sample, ] #view dimensions of training set sun(train) [1] 106 5 #view dimensions of test set dim(test) [1] 44 5
Uit het resultaat kunnen we zien:
- De trainingsset is een dataframe van 106 rijen en 5 kolommen.
- De test is een datablok van 44 rijen en 5 kolommen.
Omdat de oorspronkelijke database in totaal 150 rijen had, bevat de trainingsset ongeveer 106/150 = 70,6% van de oorspronkelijke rijen.
We kunnen ook de eerste paar rijen van de trainingsset weergeven als we dat willen:
#view first few rows of training set
head(train)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
Voorbeeld 2: Gegevens opsplitsen in trainings- en testsets met behulp van caTools
De volgende code laat zien hoe u het caTools- pakket in R kunt gebruiken om de iris-gegevensset te splitsen in een trainings- en testset, waarbij 70% van de rijen wordt gebruikt als trainingsset en de resterende 30% als testset:
library (caTools) #load iris dataset data(iris) #make this example reproducible set. seeds (1) #Use 70% of dataset as training set and remaining 30% as testing set sample <- sample. split (iris$Species, SplitRatio = 0.7 ) train <- subset(iris, sample == TRUE ) test <- subset(iris, sample == FALSE ) #view dimensions of training set sun(train) [1] 105 5 #view dimensions of test set dim(test) [1] 45 5
Uit het resultaat kunnen we zien:
- De trainingsset is een dataframe van 105 rijen en 5 kolommen.
- De test is een datablok van 45 rijen en 5 kolommen.
Voorbeeld 3: Gegevens opsplitsen in trainings- en testsets met behulp van dplyr
De volgende code laat zien hoe u het caTools- pakket in R kunt gebruiken om de iris-gegevensset te splitsen in een trainings- en testset, waarbij 70% van de rijen wordt gebruikt als trainingsset en de resterende 30% als testset:
library (dplyr) #load iris dataset data(iris) #make this example reproducible set. seeds (1) #create variable ID iris$id <- 1:nrow(iris) #Use 70% of dataset as training set and remaining 30% as testing set train <- iris %>% dplyr::sample_frac( 0.7 ) test <- dplyr::anti_join(iris, train, by = ' id ') #view dimensions of training set sun(train) [1] 105 6 #view dimensions of test set dim(test) [1] 45 6
Uit het resultaat kunnen we zien:
- De trainingsset is een dataframe van 105 rijen en 6 kolommen.
- De test is een datablok van 45 rijen en 6 kolommen.
Houd er rekening mee dat deze trainings- en testsets een extra ‚id‘-kolom bevatten die we hebben gemaakt.
Zorg ervoor dat u deze kolom niet gebruikt (of volledig uit de dataframes verwijdert) bij het aanpassen van uw machine learning-algoritme.
Aanvullende bronnen
In de volgende zelfstudies wordt uitgelegd hoe u andere veelvoorkomende bewerkingen in R uitvoert:
Hoe MSE in R te berekenen
Hoe RMSE in R te berekenen
Hoe u het aangepaste R-kwadraat in R kunt berekenen