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為反應變數,其他所有變數為解釋變數。記得使用前一個練習中的自訂trainControl(myControl)。另外,使用自訂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