我正在嘗試爲之前在R中構建的一些glm模型做一個10倍交叉驗證。我對boot
包中的cv.glm()
函數有點困惑,儘管我讀過很多幫助文件。當我提供以下公式:glm()模型的交叉驗證
library(boot)
cv.glm(data, glmfit, K=10)
是否「數據」的說法在這裏指的是整個數據集或僅對測試集?
到目前爲止,我所看到的例子提供了「數據」參數作爲測試集,但這並沒有什麼意義,比如爲什麼在同一個測試集上做10倍?他們都會給出完全相同的結果(我認爲!)。
不幸?cv.glm
解釋了它在一個有霧的方式:
數據:一個矩陣或包含該數據的數據幀。該行應 案件列對應於變量,其中一個是 響應
我的另一個問題是關於$delta[1]
結果。這是10次試驗的平均預測誤差嗎?如果我想要得到每次摺疊的錯誤怎麼辦?
這裏是我的腳本如下:
##data partitioning
sub <- sample(nrow(data), floor(nrow(x) * 0.9))
training <- data[sub, ]
testing <- data[-sub, ]
##model building
model <- glm(formula = groupcol ~ var1 + var2 + var3,
family = "binomial", data = training)
##cross-validation
cv.glm(testing, model, K=10)
看看'啓動::: CV的例子部分。 glm'。你應該輸入整個數據,模型和CV的摺疊。 –
感謝您的回覆@RomanLuštrik。聽起來很棒。儘管如此,我仍然想知道一些事情。此功能是否使用交叉驗證中提供的所有數據?假設我爲'cv.glm(data,glm,K = 10)'提供了一個1000行的數據框,它是否爲數據創建了10個分區,每個數據分區是100,並進行交叉驗證?對不起,我已經通過了?cv。glm但我沒有在那裏找到。 – Error404
如果你要做2倍的CV,這個函數將佔用50%的數據並且適合模型。它會使用另外50%的數據來查看模型如何描述數據。或者,在一次性的簡歷中,除了一個數據「點」之外,它將適用於所有模型,並且看看單個「點」做得如何。重複N次,你會得到你的結果。 –