开始使用免费开始使用

带自定义 trainControl 与调参与的 glmnet

正如您在视频中所见,glmnet 模型实际上会一次拟合多个模型(这是该包的一大优点)。您可以通过传入大量的 lambda 值来利用这一点,lambda 用于控制模型的惩罚强度。train() 足够智能:对于每个 alpha 值只拟合一个模型,并一次性传入所有 lambda 值以同时拟合。

我最喜欢用于 glmnet 模型的调参网格是:

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,您也可以查看两种形式的惩罚模型:岭回归和套索回归。alpha = 0 是纯岭回归,alpha = 1 是纯套索回归。您也可以使用 0 与 1 之间的 alpha 来拟合两者的混合(即弹性网)。例如,alpha = 0.05 表示 95% 的岭回归与 5% 的套索回归。

在这个问题中,您将只探索两个极端——纯岭回归与纯套索回归——以便说明它们的差异。

本练习是课程的一部分

在 R 中使用 caret 的机器学习

查看课程

练习说明

  • 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
编辑并运行代码