cv.glmnet (R의 LASSO 회귀)으로 교차 유효성 검사를 수행하는 방법은 무엇입니까?


10

R에서 glmnet을 사용하여 LASSO 모델을 올바르게 훈련하고 테스트하는 방법에 대해 궁금합니다.

  • 특히 외부 테스트 데이터 세트가 부족한 경우 교차 검증 (또는 다른 유사한 방법)을 사용하여 LASSO 모델을 테스트 하는 방법을 궁금합니다 .

시나리오를 정리하겠습니다 :

내 glmnet 모델을 알리고 훈련 할 데이터 세트가 하나뿐입니다. 결과적으로 교차 검증을 사용하여 데이터를 분할하여 모델을 테스트하는 방법을 생성해야합니다.

패키지 세부 정보cv.glmnet 에 따라 이미을 사용 하고 있습니다 .

glmnet에 대해 k- 폴드 교차 검증을 수행하고 플롯을 생성하며 람다 값을 반환합니다.

  • 교차 검증은 cv.glmnet단순히 최고의 람다를 선택하기 위해 수행됩니까, 아니면 더 일반적인 교차 검증 절차의 역할을합니까?

    • 다시 말해, 모델을 "테스트"하기 위해 또 다른 교차 검증 단계를 수행해야합니까?

저는 "그렇습니다"라고 가정하고 있습니다.

그렇다면 모델을 교차 검증하는 방법에 어떻게 접근 cv.glmnet합니까?

  • 수동으로해야합니까, 아니면 caretglmnet 모델에 유용한 기능입니까?

  • k 개의 교차 검증 처리의 "외부 루프"의 k 개의 각 폴드 cv.glmnet 에서 최상의 람다 값을 결정하기 위해 교차 검증의 두 개의 동심원 "루프"를 사용합니까? ... CV의 "내부 루프"를 사용합니까? ?

    • 이미 교차 유효성 검사 cv.glmnet모델 cv.glmnet의 교차 유효성 검사를 수행하는 경우 교차 유효성 검사의 "외부 루프"의 각 겹에있는 각 모델에서 "최고"모델 ( "최고"람다 값에서)을 어떻게 분리합니까?

      • 주 : 최소 1 SE 내에서 MSE를 생산하는 람다와 관련된 모델로 내가 정의하고있어 "최고"모델은 ... 이것은이다 $lambda.1secv.glmnet모델.

문맥:

나무 지름 ( "D"), D ^ 2 및 종 ( "factor (SPEC)")을 기반으로 나무 나이 ( "나이")를 예측하려고합니다. [결과 방정식 : Age ~ D + factor(SPEC) + D^2]. 나는 ~ 50K 개의 데이터 행을 가지고 있지만 데이터는 길이 방향 (시간을 통해 개인을 추적)이며 ~ 65 종으로 구성됩니다.


1
의견을 말하지 않고 투표하기로 한 사람들에게는 도움이되지 않습니다 ... 댓글에 문제가 있는지 알려 주시면 해결해 드리겠습니다.
theforestecologist

1
그들은 닫으려고 투표하지 않고 그것을 CrossValidated로 마이그레이션하기 위해 투표하고 있습니다. 나는 그것에 투표를 추가했습니다.
Hack-R

@theforestecologist : '닫기'버튼을 클릭하여 폐쇄 / 마이그레이션에 대한 이유를 확인할 수 있습니다.
DWin

질문 해 주셔서 감사합니다. 정확히이 질문이 있습니다. 다변량 Y가 있으므로 캐럿을 사용할 수 없습니다. 그러나 소스 코드를 검사하고 추가 CV가 필요하지 않다는 것을 확인 했습니까? 소스 코드는 따라 가기가 매우 어려울 수 있습니다.
qoheleth

답변:


3

cv.glmnet에서 교차 검증이 단순히 최고의 람다를 선택하기 위해 수행됩니까, 아니면 더 일반적인 교차 검증 절차로도 사용됩니까?

교차 검증에 필요한 거의 모든 것을 수행합니다. 예를 들어, lambda데이터 에 가능한 값을 맞추고 가장 적합한 모델을 선택한 다음 적절한 매개 변수를 사용하여 모델을 학습시킵니다.

예를 들어, 반환 된 객체에서 :

cvm평균 교차 검증 오류입니다. cvsd추정 된 표준 편차입니다.

다른 반환 값과 마찬가지로이 값은 테스트 세트에서 계산됩니다. 마지막으로

glmnet.fit 최상의 매개 변수를 사용하여 모든 데이터에 대한 모델 학습 (훈련 + 테스트)을 제공합니다.

수동으로해야합니까, 아니면 캐럿 기능이 glmnet 모델에 유용합니까?

수동으로 수행 할 필요는 없습니다. 'Caret'은 매우 유용하며 같은 구문으로 다른 모든 모델에서 작동하기 때문에 내가 가장 좋아하는 패키지 중 하나입니다. 나 자신 caret보다는 자주 사용 cv.glmnet합니다. 그러나 시나리오에서 본질적으로 동일합니다.

교차 검증의 두 개의 동심원 "루프"를 사용합니까? ... cv.glmnet을 통해 CV의 "내부 루프"를 사용하여 k- 폴드의 "외부 루프"의 k 개의 각 폴드 내에서 최상의 람다 값을 결정합니까? 교차 검증 처리?

이 작업을 수행 할 수 있으며이 개념은 모델 선택을위한 중첩 교차 검증 중첩 교차 검증 의 아이디어와 매우 유사합니다 .

이미 교차 유효성을 검사하는 cv.glmnet 모델의 교차 유효성 검사를 수행하는 경우, 그렇지 않으면 "외부 루프의 각 폴드 내에서 각 cv.glmnet 모델에서"최고 "람다 값에서"최고 "모델을 분리하는 방법 교차 검증의 "?

교육 데이터를 생성하고 교육 데이터에서 테스트 데이터를 실행하는 루프를 실행 cv.glmnet하고 모델 glmnet.fit을 사용 하여 테스트 데이터를 예측하십시오.


@ discupulus : 감사합니다. 그것에 대한 일종의 증거를 제공해 주시겠습니까? (즉, 안내해주세요). 또한 귀하의 답변에 따르면 데이터에 대한 성능 지표를보고하는 데 더 이상의 교차 검증 프로세스가 필요하지 않습니까? (난 그저 내 최종 모델의 성능과 lambda.1se 케이스의 MSE를보고 할 수 있습니다?)
theforestecologist

예, 더 이상의 교차 검증이 필요하지 않습니다. 증거를 위해 오픈 소스 cv.glmnet와 같은 기능 의 소스 코드를 볼 수 있습니다 R. cv.glmnet콘솔에 입력하십시오 .
discipulus

3
@discipulus. Trevor Hastie에 이메일로 "cv.glmnet (R 구현)이 람다를 선택하기 위해 CV 만 수행합니까? 아니면 선택한 람다를 검증하기 위해 외부 CV도 수행합니까?" 선택한 람다를 확인 하시겠습니까? " 그리고 그는 람다를 고르기 위해 "빨리 그렇습니다"라고 대답했습니다. 이것은 내부 CV 만 수행한다는 의미로 해석되며 외부 CV를 코딩해야합니다.
qoheleth

@theforestecologist 교차 검증에 대해 더 배우고 포스트 교육을 찾으려고 노력하고 있습니다. 더 일반적인 교차 유효성 검사 절차로도 사용되는 cv.glmnet의 의미를 이해하지 못합니다. 선택할 수있는 유일한 매개 변수는 lambda입니다. 교차 유효성 검사의 외부 레이어는 무엇입니까? 답장을 보내 주시면 감사하겠습니다. 감사!
user2450223
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.