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.1se에 cv.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.