2013-08-28 2 views
3

이것은 어리석은 질문 일지 모르지만 나는 그걸하기위한 패키지를 찾을 수 없다 ... 내가 원하는 것을 얻기 위해 코드를 작성할 수 있다는 것을 알고 있지만 자동으로 기능을 수행하는 것이 좋다!k 배 교차 유효성 검사 - 자동으로 예측을 얻는 방법?

그래서 기본적으로 glm 모델에 대해 k 배 교차 유효성 검사를 수행하려고합니다. 나는 각 유효성 검사 세트와 실제 값에 대한 예측을 자동으로 얻고 싶다. 따라서 10 배 CV를 수행하는 경우 실제 응답과 예측이 모두 포함 된 10 개의 유효성 검사 집합을 반환하는 기능이 필요합니다.

미리 감사드립니다.

+1

* 캐럿 * 패키지를 사용해 보셨습니까? – Fernando

답변

14

의견에서 설명한대로 caret은 교차 유효성 검사를 매우 쉽게 만듭니다. 그냥 지금처럼 "GLM"방법을 사용 : 당신이 GLM 모델로 작업하기 때문에

> library(caret) 
> set.seed(2) 
> dat <- data.frame(label=round(runif(100,0,5)),v1=rnorm(100),v2=rnorm(100)) 
> tc <- trainControl("cv",10,savePred=T) 
> (fit <- train(label~.,data=dat,method="glm",trControl=tc,family=poisson(link = "log"))) 
100 samples 
    2 predictors 

No pre-processing 
Resampling: Cross-Validation (10 fold) 

Summary of sample sizes: 90, 91, 91, 90, 90, 89, ... 

Resampling results 

    RMSE Rsquared RMSE SD Rsquared SD 
    1.53 0.146  0.131 0.235  


> fit$finalModel$family 

Family: poisson 
Link function: log 

> head(fit$pred) 
     pred obs rowIndex .parameter Resample 
1 2.684367 1  1  none Fold01 
2 2.165246 1  18  none Fold01 
3 2.716165 3  35  none Fold01 
4 2.514789 3  36  none Fold01 
5 2.249137 5  47  none Fold01 
6 2.328514 2  48  none Fold01 
+1

각 폴드에 대한 결과를보고 싶지 않다면'trainControl' 옵션에'savePred = T' 옵션을 추가하면 모델 객체의'pred' 필드에있을 것입니다. – David

+0

감사합니다. 이것은 매우 도움이됩니다. – zhifff

+0

한 가지 질문 : 속도 모델 (오프셋이있는 포아송 모델)에 적합 싶습니다. glm을 사용했던 원래 모델과 코드를 사용하는 모델 (train function, $ finalModel에 맞음)은 매우 다릅니다. 왜 어떤 생각? 나는 "기차"기능이 모든 종류의 glm을 처리 할 수 ​​있는지 확신하지 못한다 – zhifff

2

나는, 패키지 boot에서 cv.glm 조사를 제안했다. 또 다른 옵션은 패키지 cvTools입니다. CV를위한 자체 함수를 작성하는 것이 더 유용하다는 것을 알았습니다. 중간에 끝나는 CV 함수를 원했던 것처럼 들리 겠지만, 내가 본 대부분의 CV 함수는 모든 유효성 검사 집합에 대해 예측 오류를 평균화하고 평균값 만 반환합니다 (물론 교차 유효성 검사의 정의입니다).

+0

cv.glm을 사용하여 예측을 저장하는 방법을 알고 싶습니까? 그것, 내 자신을 쓰는 번거로운 종류의 특히 나는 CV를 남겨두고 싶었어. – zhifff

+0

나는 내 자신의 코드를 썼다. 4000 레코드가있는 샘플이 있습니다. 아주 오랜 시간을내어 떠나라. 누군가는 더 효율적인 방법을 안다. ..? – zhifff