2014-05-14 1 views
2

내가 무작위로 두 부분으로 분할 기차 데이터가 있습니다R의 GLM - 다중 교차 검증을 수행하는 방법에

  • 70 % -> train_train
  • 30 % - (교차 검증)> train_cv를

train_train을 사용하여 glm (glmnet) 모델에 적합 한 다음 train_cv와 교차 유효성을 검사합니다.

내 문제는 train_train 및 train_cv에 대해 서로 다른 임의의 분할 (곡선, "AUC"에서 영역을 사용하여 평가) 다른 교차 검증 결과를 반환한다는 것입니다 :

AUC = 0.6381583 1 시간

AUC = 0.6164524 2 회째

코드를 복제하지 않고 여러 교차 유효성 검사를 실행할 수 있습니까?

+0

나는 이것을 너 자신만큼 많이 묻지 만, AUC를 평균화 할 수는 없습니까? (답변 이상의 질문으로 간주 됨) – Vincent

+0

그래서 무작위로 데이터를 두 번 분할하고 왜 다른 결과가 나올지 궁금하십니까? – rawr

답변

7

여기에는 다소 혼란스러운 점이 있습니다. 나는 당신이 묘사하고있는 것이 표준 열차/시험 분할의 이상이라고 생각한다. 교차 검증이라는 단어는 보통 다르게 사용된다. 따라서 테스트를 위해 데이터의 30 %를 보류 했으므로 좋은 결과를 얻었고 기차를 사용하여 AUC 추정치가 얼마나 낙관적인지 확인할 수 있습니다. 그러나 물론 견적은 열차/테스트 스플릿을 수행하는 방법에 따라 다르며이 테스트 성능이 얼마나 다른지 알면 좋습니다. 이를 달성하기 위해 여러 교차 검증을 사용할 수 있습니다.

교차 검증은 홀드 아웃 세트를 사용하여 약간입니다 - 예를 들어, 다음과 같은 단계를 포함, 다섯 배 교차 유효성 검사 :

  1. 무작위로 다섯 개 동일한 크기의 부분으로 전체 데이터 집합을 분할합니다.
  2. i = 1 ~ 5의 경우 i 번째 부분을 제외한 모든 데이터에 모델을 맞 춥니 다.
  3. 착용감이 떨어지는 부분의 AUC를 평가하십시오.
  4. 평균 5 개의 AUC 결과.

이 프로세스는 샘플 추정치의 평균과 분산을 평가하기 위해 여러 번 반복 될 수 있습니다.

R 패키지 인 cvTools를 사용하면이 작업을 수행 할 수 있습니다. 예를 들어

library(ROCR) 
library(cvTools) 

calc_AUC <- function(pred, act) { 
    u<-prediction(pred, act) 
    return(performance(u, "auc")@y.values[[1]]) 
} 

cvFit(m, data = train, y = train$response, 
    cost = calc_AUC, predictArgs = "response") 

은 AUC를 성능 메트릭으로 사용하여 모델 m의 5 배 교차 유효성 검사를 수행합니다. cvFit 또한 K (교차 유효성 검사 폴드 수) 및 R (다른 임의적 분할로 교차 유효성 검사를 수행하는 횟수) 인수를 취합니다.

교차 유효성 검사에 대한 자세한 내용은 http://en.wikipedia.org/wiki/Cross-validation_(statistics)을 참조하십시오.

관련 문제