Multivariate adaptieve regressiesplines in r


Multivariate adaptieve regressiesplines (MARS) kunnen worden gebruikt om niet-lineaire relaties tussen een reeks voorspellende variabelen en een responsvariabele te modelleren.

Deze methode werkt als volgt:

1. Verdeel een dataset in k stukken.

2. Pas een regressiemodel toe op elk onderdeel.

3. Gebruik k-voudige kruisvalidatie om een waarde voor k te kiezen.

Deze zelfstudie biedt een stapsgewijs voorbeeld van hoe u een MARS-model aan een gegevensset in R kunt aanpassen.

Stap 1: Laad de benodigde pakketten

Voor dit voorbeeld gebruiken we de ISLR Wage- gegevensset .   pakket, dat de jaarsalarissen van 3.000 mensen bevat, samen met een verscheidenheid aan voorspellende variabelen zoals leeftijd, opleiding, ras en meer.

Voordat we een MARS-model aan de gegevens koppelen, laden we de benodigde pakketten:

 library (ISLR) #contains Wage dataset
library (dplyr) #data wrangling
library (ggplot2) #plotting
library (earth) #fitting MARS models
library (caret) #tuning model parameters

Stap 2: Gegevens bekijken

Vervolgens zullen we de eerste zes rijen weergeven van de dataset waarmee we werken:

 #view first six rows of data
head (Wage)

       year age maritl race education region
231655 2006 18 1. Never Married 1. White 1. < HS Grad 2. Middle Atlantic
86582 2004 24 1. Never Married 1. White 4. College Grad 2. Middle Atlantic
161300 2003 45 2. Married 1. White 3. Some College 2. Middle Atlantic
155159 2003 43 2. Married 3. Asian 4. College Grad 2. Middle Atlantic
11443 2005 50 4. Divorced 1. White 2. HS Grad 2. Middle Atlantic
376662 2008 54 2. Married 1. White 4. College Grad 2. Middle Atlantic
             jobclass health health_ins logwage wage
231655 1. Industrial 1. <=Good 2. No 4.318063 75.04315
86582 2. Information 2. >=Very Good 2. No 4.255273 70.47602
161300 1. Industrial 1. <=Good 1. Yes 4.875061 130.98218
155159 2. Information 2. >=Very Good 1. Yes 5.041393 154.68529
11443 2. Information 1. <=Good 1. Yes 4.318063 75.04315
376662 2. Information 2. >=Very Good 1. Yes 4.845098 127.11574

Stap 3: Creëer en optimaliseer het MARS-model

Vervolgens zullen we het MARS-model voor deze dataset creëren en k-voudige kruisvalidatie uitvoeren om te bepalen welk model de laagste test-RMSE (gemiddelde kwadratische fout) oplevert.

 #create a tuning grid
hyper_grid <- expand. grid (degree = 1:3,
                          nprune = seq (2, 50, length.out = 10) %>%
floor ())

#make this example reproducible
set.seed(1)

#fit MARS model using k-fold cross-validation
cv_mars <- train(
  x = subset(Wage, select = -c(wage, logwage)),
  y = Wage$wage,
  method = " earth ",
  metric = " RMSE ",
  trControl = trainControl(method = " cv ", number = 10),
  tuneGrid = hyper_grid)

#display model with lowest test RMSE
cv_mars$results %>%
  filter (nprune==cv_mars$bestTune$nprune, degree =cv_mars$bestTune$degree)    
degree nprune RMSE Rsquared MAE RMSESD RsquaredSD MAESD		
1 12 33.8164 0.3431804 22.97108 2.240394 0.03064269 1.4554

Uit de resultaten kunnen we opmaken dat het model dat de laagste MSE-test opleverde een model was met alleen eerste-orde-effecten (dwz geen interactietermen) en twaalf termen. Dit model produceerde een root mean square error (RMSE) van 33,8164 .

Opmerking: We hebben method=”earth” gebruikt om een MARS-model te specificeren. Documentatie voor deze methode vindt u hier .

We kunnen ook een diagram maken om de RMSE-test te visualiseren op basis van de mate en het aantal termen:

 #display test RMSE by terms and degree
ggplot(cv_mars)

MARS-model in R

In de praktijk zouden we een MARS-model aanpassen met verschillende andere soorten modellen, zoals:

Vervolgens vergelijken we elk model om te bepalen welk model tot de laagste testfout leidt en kiezen we dat model als het optimale model om te gebruiken.

De volledige R-code die in dit voorbeeld wordt gebruikt, vindt u hier .

Einen Kommentar hinzufügen

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