[英]Tune a GAM model with a for loop
我需要使用三個變量對變量“Life_expectancy”執行 GAM:“Adult_Mortality”、“HIV_AIDS”和“Schooling”。 為了優化調整 GAM model,我需要為每個變量找到完美的自由度組合。 為此,我需要在另一個循環中創建一個 for 循環,以找到所有變量的最佳組合,例如在 3 個 for 循環中運行以下命令,一個用於 i,一個用於 j,一個用於 k:
gam.fit <- gam(Life_expectancy ~ + s(Adult_Mortality, df = i) + s(HIV_AIDS, df = j) + s(Schooling, df = k), data=train)
對於 i,j,k 的每個組合,每次都計算測試誤差。 最后選擇測試誤差最低的model。 我嘗試使用以下代碼執行此操作:
test.err <- rep(0, 8)
for (i in 3:10) {
for (j in 3:10) {
for (k in 3:10) {
gam.fit <- gam(Life_expectancy ~ + s(Adult_Mortality, df = i) +
s(HIV_AIDS, df = j) +
s(Schooling, df = k),
data=train)
gam.pred <- predict(gam.fit, test)
test.err[i-2] <- mean((test$Life_expectancy - gam.pred)^2)
}}}
但這只會產生從 3 到 10 的自由度 i 的 8 個測試錯誤。對於 i、j、k 的每個組合,我怎樣才能 output 自由度?
先感謝您!
代碼可以修改為:
test.err <- array(0, c(8,8,8))
for (i in 3:10) {
for (j in 3:10) {
for (k in 3:10) {
gam.fit <- gam(Life_expectancy ~ + s(Adult_Mortality, df = i) +
s(HIV_AIDS, df = j) +
s(Schooling, df = k),
data=train)
gam.pred <- predict(gam.fit, test)
test.err[i-2, j-2, k-2] <- mean((test$Life_expectancy - gam.pred)^2)
}}}
關於該方法的幾點說明:
gam
function, gam
和mgcv
包中有函數,可能還有其他函數。 后者可以根據訓練集估計出合適的自由度
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.