R의 올가미 회귀(단계별)


올가미 회귀는 데이터에 다중 공선성이 존재할 때 회귀 모델을 맞추는 데 사용할 수 있는 방법입니다.

간단히 말해서, 최소 제곱 회귀는 잔차 제곱합(RSS)을 최소화하는 계수 추정값을 찾으려고 시도합니다.

RSS = Σ(y i – ŷ i )2

금:

  • Σ : 합계를 의미하는 그리스 기호
  • y i : i번째 관측값에 대한 실제 응답 값
  • ŷ i : 다중선형회귀모델을 기반으로 예측된 반응값

반대로 올가미 회귀는 다음을 최소화하려고 합니다.

RSS + λΣ|β j |

여기서 j는 1에서 p개의 예측 변수로 이동하고 λ ≥ 0입니다.

방정식의 두 번째 항은 인출 페널티 로 알려져 있습니다. 올가미 회귀에서는 가능한 가장 낮은 MSE(평균 제곱 오차) 테스트를 생성하는 λ 값을 선택합니다.

이 튜토리얼에서는 R에서 올가미 회귀를 수행하는 방법에 대한 단계별 예를 제공합니다.

1단계: 데이터 로드

이 예에서는 mtcars 라는 R의 내장 데이터 세트를 사용합니다. hp를 반응 변수로 사용하고 다음 변수를 예측 변수로 사용합니다.

  • mpg
  • 무게
  • q초

올가미 회귀를 수행하기 위해 glmnet 패키지의 기능을 사용합니다. 이 패키지에서는 응답 변수가 벡터여야 하고 예측 변수 세트가 data.matrix 클래스에 속해야 합니다.

다음 코드는 데이터를 정의하는 방법을 보여줍니다.

 #define response variable
y <- mtcars$hp

#define matrix of predictor variables
x <- data.matrix(mtcars[, c('mpg', 'wt', 'drat', 'qsec')])

2단계: 올가미 회귀 모델 적합

다음으로 glmnet() 함수를 사용하여 올가미 회귀 모델을 맞추고 alpha=1 을 지정합니다.

알파를 0으로 설정하는 것은 능선 회귀를 사용하는 것과 동일하며, 알파를 0과 1 사이의 값으로 설정하는 것은 탄성망을 사용하는 것과 동일합니다.  

람다에 사용할 값을 결정하기 위해 k겹 교차 검증을 수행하고 가장 낮은 테스트 평균 제곱 오차(MSE)를 생성하는 람다 값을 식별합니다.

cv.glmnet() 함수는 k = 10번을 사용하여 k-겹 교차 검증을 자동으로 수행합니다.

 library (glmnet)

#perform k-fold cross-validation to find optimal lambda value
cv_model <- cv. glmnet (x, y, alpha = 1 )

#find optimal lambda value that minimizes test MSE
best_lambda <- cv_model$ lambda . min
best_lambda

[1] 5.616345

#produce plot of test MSE by lambda value
plot(cv_model) 

R의 올가미 회귀에 대한 MSE 테스트

MSE 테스트를 최소화하는 람다 값은 5.616345 입니다.

3단계: 최종 모델 분석

마지막으로 최적의 람다 값을 통해 생성된 최종 모델을 분석할 수 있다.

다음 코드를 사용하여 이 모델에 대한 계수 추정치를 얻을 수 있습니다.

 #find coefficients of best model
best_model <- glmnet(x, y, alpha = 1 , lambda = best_lambda)
coef(best_model)

5 x 1 sparse Matrix of class "dgCMatrix"
                   s0
(Intercept) 484.20742
mpg -2.95796
wt 21.37988
drat.      
qsec -19.43425

올가미 회귀가 계수를 0으로 줄였기 때문에 drat 예측 변수에 대한 계수는 표시되지 않습니다. 이는 그가 충분한 영향력을 갖고 있지 않았기 때문에 모델에서 완전히 제외되었음을 의미합니다.

이것이 능선 회귀올가미 회귀 의 주요 차이점입니다. Ridge 회귀는 모든 계수를 0 으로 줄이지만 Lasso 회귀는 계수를 완전히 0으로 줄여 모델에서 예측 변수를 제거할 가능성이 있습니다.

또한 최종 올가미 회귀 모델을 사용하여 새로운 관찰에 대한 예측을 할 수도 있습니다. 예를 들어, 다음과 같은 속성을 가진 새 자동차가 있다고 가정해 보겠습니다.

  • mpg: 24
  • 무게: 2.5
  • 가격: 3.5
  • 초당: 18.5

다음 코드는 적합 올가미 회귀 모델을 사용하여 이 새로운 관측치의 HP 값을 예측하는 방법을 보여줍니다.

 #define new observation
new = matrix(c(24, 2.5, 3.5, 18.5), nrow= 1 , ncol= 4 ) 

#use lasso regression model to predict response value
predict(best_model, s = best_lambda, newx = new)

[1,] 109.0842

입력된 값을 기반으로 모델은 이 자동차의 hp 값이 109.0842 가 될 것으로 예측합니다.

마지막으로 훈련 데이터에 대한 모델의 R-제곱을 계산할 수 있습니다.

 #use fitted best model to make predictions
y_predicted <- predict (best_model, s = best_lambda, newx = x)

#find OHS and SSE
sst <- sum ((y - mean (y))^2)
sse <- sum ((y_predicted - y)^2)

#find R-Squared
rsq <- 1 - sse/sst
rsq

[1] 0.8047064

R 제곱은 0.8047064 입니다. 즉, 가장 좋은 모델은 훈련 데이터의 반응값 변동의 80.47% 를 설명할 수 있었다.

이 예제에 사용된 전체 R 코드는 여기에서 찾을 수 있습니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다