開始使用免費開始

glmnet:自訂 trainControl 與參數調校

就像你在影片裡看到的,glmnet 模型其實會一次擬合很多個模型(這也是這個套件很棒的特性之一)。你可以藉由傳入大量的 lambda 值來運用這點,lambda 會控制模型的懲罰強度。train() 很聰明,它只會針對每個 alpha 值擬合一個模型,並一次把所有的 lambda 值傳入做同時擬合。

我最喜歡用在 glmnet 模型的調校網格(tuning grid)是:

expand.grid(
  alpha = 0:1,
  lambda = seq(0.0001, 1, length = 100)
)

這個網格會探索大量的 lambda 值(實際上是 100 個),從非常小到相對大的範圍。(你可以把最大的 lambda 提高到 10,但在這個練習中,1 已經是很好的上限。)

如果你想探索更少的模型,可以使用較短的 lambda 序列。例如,lambda = seq(0.0001, 1, length = 10) 會在每個 alpha 值下擬合 10 個模型。

使用這個 tuneGrid,你也會同時看到兩種帶有懲罰項的模型:ridge 迴歸與 lasso 迴歸。alpha = 0 是純 ridge 迴歸,alpha = 1 是純 lasso 迴歸。你也可以用介於 0 到 1 之間的 alpha 來擬合兩者的混合(也就是 elastic net)。例如,alpha = 0.05 代表 95% ridge 迴歸與 5% lasso 迴歸。

在這個題目中,你將只探索兩個極端——純 ridge 與純 lasso 迴歸——用來說明它們之間的差異。

本練習屬於課程

使用 R 的 caret 進行 Machine Learning

檢視課程

練習說明

  • overfit 資料上訓練一個 glmnet 模型,y 為反應變數,其他所有變數為解釋變數。記得使用前一個練習中的自訂 trainControlmyControl)。另外,使用自訂 tuneGrid 來探索 alpha = 0:1,並在每個 alpha 值下使用 0.0001 到 1 之間的 20 個 lambda 值。
  • 在主控台列印 model
  • 列印 model[["results"]] 中 ROC 指標的 max()。你可以用 model[["results"]][["ROC"]] 來存取。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# Train glmnet with custom trainControl and tuning: model
model <- train(
  ___, 
  ___,
  tuneGrid = ___(
    ___,
    ___
  ),
  method = ___,
  trControl = ___
)

# Print model to console


# Print maximum ROC statistic
編輯並執行程式碼