R에서 교차 유효성 검사 올가미 회귀


10

R 함수 cv.glm (라이브러리 : boot)은 일반화 된 선형 모델에 대한 추정 된 K- 폴드 교차 검증 예측 오류를 계산하고 델타를 반환합니다. 올가미 회귀 (라이브러리 : glmnet)에이 함수를 사용하는 것이 이치에 맞습니까? 그렇다면 어떻게 수행 할 수 있습니까? glmnet 라이브러리는 교차 검증을 사용하여 최상의 회전 매개 변수를 얻지 만 최종 glmnet 방정식을 교차 검증하는 예는 찾지 못했습니다.


2
LASSO는 하나의 (하이퍼) 매개 변수에 대해서만 최적화하지만, 최상의 추정치를 얻으려면 샘플 외부 성능에 대해 외부 교차 검증 루프가 필요합니다. CV / 부트 스트랩을 사용하여 기계 학습 알고리즘을 훈련하여 과적 합할 수 있습니까?를 참조하십시오 . & 인용 논문.
Scortchi-Monica Monica 복원

glm esp 대신 glmnet을 사용하는 것이 좋습니다. 이력서를하고 있다면 내가 기억한다면 glm 패키지는 사용하기가 어려워집니다. 또한 cv.glmnet은 cv.glm보다 많은 매개 변수를 노출합니다.
smci

답변:


9

에 올가미를 위해 바닐라 일반 교차 검증을 수행하는 방법에 대한 예제 glmnetmtcars 데이터 세트.

  1. 데이터 세트를로드하십시오.

  2. 피처 준비 (독립 변수). 그들은 matrix수업 중이어야합니다 . df범주 형 변수를 포함하는 가장 쉬운 방법 matrixmodel.matrix입니다. 기본적으로 glmnet인터셉트에 적합하므로 모델 매트릭스에서 인터셉트를 제거하는 것이 좋습니다.

  3. 반응 준비 (종속 변수). 평균 이상의 mpg효율 ( '1')과 나머지는 비효율적 인 ( '0')로 자동차를 코딩 해 봅시다 . 이 변수를 인수로 변환하십시오.

  4. 를 통해 교차 검증을 실행하십시오 cv.glmnet. 그것은 픽업 것이다 alpha=1기본에서 glmnet올가미 회귀 : 당신이 무엇을 요구입니다 매개 변수.

  5. 교차 유효성 검사 결과를 검토하면 최소한 두 가지 정보에 관심이있을 수 있습니다.

    • 교차 검증 된 오류를 최소화하는 람다. 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은 물론 ?glmnetR의 콘솔에 있습니다))))


좋은 대답입니다. .. 또한 샘플링을 설명하기 위해 CV를 여러 번 실행하고 오류 곡선 (? cv.glmnet 참조)을 평균화하는 것이 좋습니다.
user20650

@SergeyBushmanov VERY USEFUL!
theforestecologist

안녕하세요,이 게시물이 오래된 게시물이라는 것을 알고 있지만 질문을하고 싶습니다. 모형의 출력이 계수의 통계적 유의성에 대해 아무 것도 말하지 않는다고 언급 했으므로 계수가 유의한지 여부를 어떻게 결정합니까?
Jun Jang

@JunJang "계수에 대한 통계적 유의성은 없다"는 패키지 작성자의 진술이 아니라 저의 진술입니다. 이 진술은 패키지 작성자의 책 중 하나 또는 패키지의 비 네트에 정확하게 기억되어 있지 않습니다. 이 경우 계수가 중요하지 않다고 말하는 대신 교차 유효성 검사를 통해 목표를 설명하는 데 유용하거나 유용하지 않다고 말하고 싶을 것입니다.
Sergey Bushmanov 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.