2017-11-26 3 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

関連する問題