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

Einen Kommentar hinzufügen

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