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

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

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

  2. 피처 준비 (독립 변수). 그들은 matrix수업 중이어야합니다 . df범주 형 변수를 포함하는 가장 쉬운 방법 matrix은 model.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.