簡體   English   中英

使用 for 循環調整 GAM model

[英]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)
    }}}

關於該方法的幾點說明:

  1. 您還沒有說您使用過哪個gam function, gammgcv包中有函數,可能還有其他函數。 后者可以根據訓練集估計出合適的自由度
  2. 您似乎是根據對測試數據集的擬合來估計自由度,這在某種程度上違背了擁有單獨的訓練和測試數據集的想法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM