R의 다변량 적응 회귀 스플라인
MARS( 다변량 적응형 회귀 스플라인 )를 사용하여 일련의 예측 변수와 반응 변수 간의 비선형 관계를 모델링할 수 있습니다.
이 방법은 다음과 같이 작동합니다.
1. 데이터 세트를 k 개 조각으로 나눕니다.
2. 회귀 모델을 각 부분에 맞춥니다.
3. k-겹 교차 검증을 사용하여 k 값을 선택합니다.
이 튜토리얼에서는 MARS 모델을 R의 데이터 세트에 맞추는 방법에 대한 단계별 예를 제공합니다.
1단계: 필요한 패키지 로드
이 예에서는 ISLR Wage 데이터 세트를 사용합니다 . 연령, 교육, 인종 등과 같은 다양한 예측 변수와 함께 3,000명의 연봉이 포함된 패키지입니다.
MARS 모델을 데이터에 맞추기 전에 필요한 패키지를 로드합니다.
library (ISLR) #contains Wage dataset library (dplyr) #data wrangling library (ggplot2) #plotting library (earth) #fitting MARS models library (caret) #tuning model parameters
2단계: 데이터 보기
다음으로 작업 중인 데이터 세트의 처음 6개 행을 표시합니다.
#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
3단계: MARS 모델 생성 및 최적화
다음으로, 이 데이터 세트에 대한 MARS 모델을 생성하고 k-겹 교차 검증을 수행하여 어떤 모델이 가장 낮은 테스트 RMSE(평균 제곱 오차)를 생성하는지 결정합니다.
#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
결과에서 가장 낮은 테스트 MSE를 생성한 모델은 1차 효과만 있고(즉, 상호 작용 항 없음) 12개의 항이 있는 모델임을 알 수 있습니다. 이 모델은 33.8164 의 RMSE(제곱평균제곱근 오차)를 생성했습니다.
참고: MARS 모델을 지정하기 위해 method=”earth”를 사용했습니다. 이 방법에 대한 문서는 여기에서 찾을 수 있습니다.
또한 용어의 정도와 수를 기반으로 RMSE 테스트를 시각화하는 차트를 만들 수도 있습니다.
#display test RMSE by terms and degree
ggplot(cv_mars)

실제로 우리는 다음과 같은 여러 다른 유형의 모델을 사용하여 MARS 모델을 적용합니다.
그런 다음 각 모델을 비교하여 테스트 오류가 가장 낮은 모델을 결정하고 해당 모델을 사용할 최적의 모델로 선택합니다.
이 예제에 사용된 전체 R 코드는 여기에서 찾을 수 있습니다.