2014-05-14 49 views
2

我有我隨機分成兩個部分列車數據:řGLM - 怎麼辦多個交叉驗證

  • 70% - > train_train
  • 30% - > train_cv(對於交叉驗證)

我適合使用train_train的glm(glmnet)模型,然後與train_cv進行交叉驗證。

我的問題是,對於train_train和train_cv不同的隨機分裂返回不同的交叉驗證的結果(使用曲線下面積,「AUC」評價):

AUC = 0.6381583所述第一時間

AUC = 0.6164524第二次

有沒有辦法在不重複代碼的情況下運行多個交叉驗證?

+0

對於我自己,我問這個問題和你一樣多,但難道你不能只是平均AUCs? (作爲一個問題而不僅僅是一個答案) – Vincent

+0

所以你會隨機分裂你的數據兩次,並想知道爲什麼你會得到不同的結果? – rawr

回答

7

這裏有一些令人困惑的事情。我認爲你所描述的更多的是標準的訓練/測試分割,交叉驗證通常用於不同的方面。所以你已經拿出了30%的數據進行測試,這是很好的,你可以用它來找出你的訓練集估計的AUC是多麼樂觀。但是,當然,估算取決於你如何進行火車/測試分割,並且知道這個測試性能有多大變化是一件好事。您可以使用多次交叉驗證來實現此目的。

交叉驗證從只使用一個不滲透性組稍微 - 5次交叉驗證,例如,包括以下步驟操作:

    隨機
  1. 分裂完整數據集分爲五個相等大小的部分。
  2. 對於i = 1到5,將模型擬合到除第i部分之外的所有數據。
  3. 從適合度評估AUC。
  4. 平均五個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)