2017-11-26 23 views
1

나는 R에 익숙하지 않고 할당을 위해 C5.0 의사 결정 트리로 5 배 교차 유효성 검사를 구현하기 위해 for 루프를 사용하고 있습니다. 나는에서 목표 변수의 결과를 예측하기 위해 루프에서 안전/전체 트리 모델에 액세스하려면 어떻게R에서 교차 유효성 검사를 사용하여 C5.0 의사 결정 트리를 반복 할 때 개별 예측 모델을 저장하는 방법?

explanatory_variables.dt<-names(data_known)[-16] 
form.dt<-as.formula(paste("target ~", paste(explanatory_variables.dt,  
collapse = "+"))) 
folds.dt<-split(data_known,cut(sample(1:nrow(data_known)),5)) 
errs.c50.dt<-rep(NA,length(folds.dt)) 

for (i in 1:length(folds.dt)) { 
test.dt<-ldply(folds.dt[i],data.frame) 
train.dt<-ldply(folds.dt[-i],data.frame) 
tmp.model.dt<-C5.0(form.dt,train.dt)      
tmp.predict.dt<-predict(tmp.model.dt, newdata=test.dt)  
conf.mat.dt<-table(test.dt$target,tmp.predict.dt) 
errs.c50.dt[i]<-1-sum(diag(conf.mat.dt))/sum(conf.mat.dt)   
    } 
print(sprintf("average error using k-fold cross validation and C5.0  
decision tree algorithm: %.3f percent", 100*mean(errs.c50.dt))) 

:

head(data_known) 
order_item_id order_date item_id item_size brand_id item_price user_id 
1    1 2012-09 1507 UNSIZED  102  24.9 4694 
2    2 2012-11 1745  10  64  75.0 6097 
3    3 2013-01 2588  XXL  42  79.9 7223 
4    4 2012-08  164  40  47  79.9 4124 
5    5 2012-09 1640   L  97  69.9 881 
6    6 2013-03 2378  38  72  129.9 1576 
user_title user_dob    user_state user_reg_date 
1  Mrs 1964-11 Rhineland-Palatinate  2011-02 
2  Mrs 1973-08   Brandenburg  2011-05 
3  Mrs 1949-08    Saarland  2013-01 
4  Mrs 1960-12    Thuringia  2012-08 
5  Mrs 1971-06  Baden-Wuerttemberg  2012-01 
6  Mrs 1965-10 North Rhine-Westphalia  2011-02 
delivery_time_days user_title_NA item_size_NA user_dob_NA target 
1     2    0   0   0 Return 
2     4    0   0   0 No Return 
3     2    0   0   0 Return 
4     5    0   0   0 Return 
5     3    0   0   0 Return 
6     11    0   0   0 Return 

을 이제 내 루프는, 다음과 같이 내 데이터 세트 보인다 진정한 실현이 아직 알려지지 않은 다른 데이터 세트? 또는 교차 검증을 사용할 때 tmp.model.dt에 대한 예측을 기반으로해야합니까?

도움을 주셔서 감사합니다.

최저

,

니코 여기

+0

당신이 쫓고있는 구조가 목록입니다. 하나 만들고 모델을 저장하십시오. 나중에 사용하기 위해'save'를 사용하여리스트를 저장할 수 있습니다. –

+0

로마 답장을 보내 주셔서 감사합니다. 나는 당신과 j의 의견 때문에 지금까지 해결할 수있었습니다. – Nico

답변

0

로마의 의견에 따라 확장 단순한 재현 대답이다.

list_models <- list() 
for (i in 1:2){ 
    tmp_data <- mtcars[,c(1, i+1)] 
    list_models[[i]] <- lm(mpg ~ ., data = tmp_data) 
} 
head(predict(list_models[[1]], newdata = mtcars)) 
head(predict(list_models[[2]], newdata = mtcars)) 

여기 lm를 사용하고 있지만, predict 기능 중 하나를 모델 객체에서 작동으로이 C5.0와 마찬가지로 잘 작동합니다.

+0

해결되었습니다. 고마워, J! – Nico