2013-04-30 23 views
0

我正在試圖根據袋裝樣品上的性能在袋裝模型中設置投票。R,取出袋裝樣品以生成袋樣品

construct.annet = function(trainset,n,p=1){ 
    annet.struct = vector(mode="list",length=n) 
    cat("Constructing Agregate Neural Network with ",p,"\n") 
    for(i in 1:n){ 
    cat("iteration ",i,"\n") 
    bsamp = trainset[sample(p*dim(trainset)[1],replace=T),] 
    annet.struct[[i]] = nnet(class~.,data=bsamp,size=sample(4:12,1),maxit=1000) 
    } 
    return(annet.struct) 
} 

打印迭代只是告訴我事情要花多長時間。至於爲什麼我隨機改變隱藏層的大小,這似乎是當時要做的事情。

我想要做的是在每次迭代構建模型之後添加另一行,在該模型上測試出包示例中的模型,然後記錄其預測準確性。然後我將使用這些數據來衡量最終模型中的類別百分比投票。 (較低性能的型號會減少重量等)

問題是,我無法弄清楚如何從傳入數據中刪除自舉樣本。而我的谷歌顯然沒有幫助。

謝謝。

回答

1

的想法是使用索引來直接提取這些樣品被吸入引導子集,而不是樣品:

ibsamp <- sample (nrow (trainset), replace = TRUE) 
annet.struct[[i]] = nnet (class ~ ., data = trainset [ibsamp, ], 
          size = sample (4 : 12, 1), maxit = 1000) 

然後可以使用subset找出哪些樣品納入訓練集

itest <- setdiff (seq_len (nrow (trainset)), ibsamp) 
test [[i]] <- predict (annet.struct [[i]], newdata = trainset [itest, ]) 

(我建議重新命名traindata逼到data爲清楚起見)

+0

我現在看到,你實際上並沒有對觀察結果進行抽樣,僅僅是行數。在這種情況下,將要採樣的數字乘以p是沒有意義的。 (p是從一個不同的模型剩下的,我使用的是小於n的樣本大小。)謝謝,這個工作很完美。 – Faydey 2013-05-02 06:51:34

+0

@ user24926:是的,我想知道那個'p',但決定把它留在你的代碼中。我現在刪除它。 – cbeleites 2013-05-02 09:36:49