R 함수 cv.glm (라이브러리 : boot)은 일반화 된 선형 모델에 대한 추정 된 K- 폴드 교차 검증 예측 오류를 계산하고 델타를 반환합니다. 올가미 회귀 (라이브러리 : glmnet)에이 함수를 사용하는 것이 이치에 맞습니까? 그렇다면 어떻게 수행 할 수 있습니까? glmnet 라이브러리는 교차 검증을 사용하여 최상의 회전 매개 변수를 얻지 만 최종 glmnet 방정식을 교차 검증하는 예는 찾지 못했습니다.
R 함수 cv.glm (라이브러리 : boot)은 일반화 된 선형 모델에 대한 추정 된 K- 폴드 교차 검증 예측 오류를 계산하고 델타를 반환합니다. 올가미 회귀 (라이브러리 : glmnet)에이 함수를 사용하는 것이 이치에 맞습니까? 그렇다면 어떻게 수행 할 수 있습니까? glmnet 라이브러리는 교차 검증을 사용하여 최상의 회전 매개 변수를 얻지 만 최종 glmnet 방정식을 교차 검증하는 예는 찾지 못했습니다.
답변:
에 올가미를 위해 바닐라 일반 교차 검증을 수행하는 방법에 대한 예제 glmnet
에 mtcars
데이터 세트.
데이터 세트를로드하십시오.
피처 준비 (독립 변수). 그들은 matrix
수업 중이어야합니다 . df
범주 형 변수를 포함하는 가장 쉬운 방법 matrix
은 model.matrix
입니다. 기본적으로 glmnet
인터셉트에 적합하므로 모델 매트릭스에서 인터셉트를 제거하는 것이 좋습니다.
반응 준비 (종속 변수). 평균 이상의 mpg
효율 ( '1')과 나머지는 비효율적 인 ( '0')로 자동차를 코딩 해 봅시다 . 이 변수를 인수로 변환하십시오.
를 통해 교차 검증을 실행하십시오 cv.glmnet
. 그것은 픽업 것이다 alpha=1
기본에서 glmnet
올가미 회귀 : 당신이 무엇을 요구입니다 매개 변수.
교차 유효성 검사 결과를 검토하면 최소한 두 가지 정보에 관심이있을 수 있습니다.
교차 검증 된 오류를 최소화하는 람다. glmnet
실제로 2 람다를 제공 lambda.min
하고 lambda.1se
. 사용할 통계 전문가로 판단해야합니다.
정규화 된 계수 결과.
위의 지침에 따라 R 코드를 참조하십시오 :
# Load data set
data("mtcars")
# Prepare data set
x <- model.matrix(~.-1, data= mtcars[,-1])
mpg <- ifelse( mtcars$mpg < mean(mtcars$mpg), 0, 1)
y <- factor(mpg, labels = c('notEfficient', 'efficient'))
library(glmnet)
# Run cross-validation
mod_cv <- cv.glmnet(x=x, y=y, family='binomial')
mod_cv$lambda.1se
[1] 0.108442
coef(mod_cv, mod_cv$lambda.1se)
1
(Intercept) 5.6971598
cyl -0.9822704
disp .
hp .
drat .
wt .
qsec .
vs .
am .
gear .
carb .
mod_cv$lambda.min
[1] 0.01537137
coef(mod_cv, mod_cv$lambda.min)
1
(Intercept) 6.04249733
cyl -0.95867199
disp .
hp -0.01962924
drat 0.83578090
wt .
qsec .
vs .
am 2.65798203
gear .
carb -0.67974620
최종 의견 :
모형의 출력은 계수의 통계적 유의성에 대해서는 아무 것도 말하지 않으며 값만 나타냅니다.
귀하가 요청한 l1 penalizer (lasso)는 이 블로그 게시물과이 stackexchange 질문 에서 입증 된 불안정성으로 유명 합니다 . 더 나은 방법은 교차 검증을 alpha
하는 것인데,이를 통해 l1과 l2 penalizer의 적절한 혼합을 결정할 수 있습니다.
교차 유효성 검사를 수행하는 다른 방법은 캐럿의 train( ... method='glmnet')
그리고 마지막으로, 더 배우고 cv.glmnet
기본값 을 배우는 가장 좋은 방법 glmnet
은 물론 ?glmnet
R의 콘솔에 있습니다))))