【问题标题】:Keeping one parameter fixed and search on randomly in caret保持一个参数固定并在插入符号中随机搜索
【发布时间】:2017-12-13 09:30:25
【问题描述】:

我想将参数 alpha 固定为 1 并使用随机搜索 lambda,这可能吗?

library(caret)

X <- iris[, 1:4]
Y <- iris[, 5]

fit_glmnet <- train(X, Y, method = "glmnet", tuneLength = 2, trControl = trainControl(search = "random"))

【问题讨论】:

  • glmnet 将自行创建一系列lambda 值并对其进行测试。只需设置 alpha = 1glmnet 即可寻找最佳 lambda。
  • 我可以在插入符号火车呼叫的哪个位置进行设置?我得到以下信息:由多个实际参数匹配的形式参数“alpha”。如果我在火车功能中设置它

标签: r r-caret glmnet lasso-regression


【解决方案1】:

我认为这不能通过直接在插入符号train 中指定来实现,但这里是模拟所需行为的方法:

来自link

可以看到对 lambda 的随机搜索是通过以下方式实现的:

lambda = 2^runif(len, min = -10, 3)

len 是曲调长度

模拟对一个参数的随机搜索:

len <- 2
fit_glmnet <- train(X, Y,
                    method = "glmnet",
                    tuneLength = len,
                    trControl = trainControl(search = "grid"),
                    tuneGrid = data.frame(alpha = 1, lambda = 2^runif(len, min = -10, 3)))

【讨论】:

    【解决方案2】:

    首先,我不确定您是否可以使用随机搜索修复特定的调整参数。

    但是,作为替代方案,您可以使用网格搜索来优化调整参数,而不是随机搜索。然后,您可以使用tuneGrid 修复调整参数:

    fit <- train(
        X,
        Y,
        method = "glmnet",
        tuneLength = 2,
        trControl = trainControl(search = "grid"),
        tuneGrid = data.frame(alpha = 1, lambda = 10^seq(-4, -1, by = 0.5)));
     fit;
     #glmnet
     #
     #150 samples
     #  4 predictor
     #  3 classes: 'setosa', 'versicolor', 'virginica'
     #
     #No pre-processing
     #Resampling: Bootstrapped (25 reps)
     #Summary of sample sizes: 150, 150, 150, 150, 150, 150, ...
     #Resampling results across tuning parameters:
     #
     #  lambda        Accuracy   Kappa
     #  0.0001000000  0.9398036  0.9093246
     #  0.0003162278  0.9560817  0.9336278
     #  0.0010000000  0.9581838  0.9368050
     #  0.0031622777  0.9589165  0.9379580
     #  0.0100000000  0.9528997  0.9288533
     #  0.0316227766  0.9477923  0.9212374
     #  0.1000000000  0.9141015  0.8709753
     #
     #Tuning parameter 'alpha' was held constant at a value of 1
     #Accuracy was used to select the optimal model using  the largest value.
     #The final values used for the model were alpha = 1 and lambda = 0.003162278.
    

    【讨论】:

    • 完全知道我可以使用上述方法,但如果我可以使用随机搜索并修复一个参数,我正在寻找答案......
    • @MLEN 是的,我不确定随机搜索是否是您问题中的关键要求;-) 恐怕我无能为力(除了我认为不可能)。也许其他人能够对此有所了解......
    猜你喜欢
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-02
    相关资源
    最近更新 更多