【问题标题】:Error in optim: L-BFGS-B needs finite value of fn优化错误:L-BFGS-B 需要 fn 的有限值
【发布时间】:2023-04-05 03:09:01
【问题描述】:

我正在尝试为一系列值运行 imputeTestBench 包的 impute_errors() 函数。我正在使用六种用户定义的方法来选择最佳插补方法。以下是我的代码:

    correctedSalesHistoryMatrix[, 1:2],
    matrix(unlist(apply(X = as.matrix(correctedSalesHistoryMatrix[, -c(1, 2)]),
                        MARGIN = 1,
                        FUN = impute_errors,
                        smps = "mcar", 
                        methods = c(
                          "imputationMethod1"
                          , "imputationMethod2"
                          , "imputationMethod3"
                          , "imputationMethod4"
                          , "imputationMethod5"
                          , "imputationMethod6"
                        ), 
                        methodPath = "C:\\Documents\\Imputations.R",
                        errorParameter = "mape",
                        missPercentFrom = 10,
                        missPercentTo = 10
                        )
                  ), nrow = nrow(correctedSalesHistoryMatrix), byrow = T
           )
    )

当我使用一个小数据集时,函数执行成功。当我使用大型数据集时,我使用了以下错误:

optim(init[mask], getLike, method = "L-BFGS-B", lower = rep(0, : L-BFGS-B 需要 'fn' 的有限值 调用自: optim(init[mask], getLike, method = "L-BFGS-B", lower = rep(0, np + 1L), 上 = rep(Inf, np + 1L), control = optim.control)

【问题讨论】:

    标签: r imputation


    【解决方案1】:

    我认为这不是一个容易解决的问题。

    错误可能不是由imputeTestBench 本身引起的,而是由您的一种用户定义的插补方法引起的。

    像以前一样运行 impute_errors 并仅添加 na_mean 作为方法而不是用户定义的方法 (impute_errors(..., methods = 'na_mean') ) 以查看此建议是否正确。

    错误本身经常发生,并且与stats::optim 接收它无法处理的输入有关。您很可能没有在用户定义的插补方法中使用stats::optim(因此您无法轻松修复输入)。更有可能是您正在使用的包正在执行一些计算,然后使用stats::optim。或者更糟糕的是,您正在使用的包正在使用另一个包,即使用 stats::optim

    在此question 的答案中,您可以看到潜在问题的解释。总体而言,尤其是对于大型数据集,当stats::optimfn 输入参数变为Inf 时,似乎会发生这种情况。

    这里有一些不同的 R 包和函数也会出现问题的示例(它们都在内部某个地方使用 stats::optim):123

    如果您不想深入了解底层软件包,总体上您可以做的不多。

    如果您将imputeTS 包用于用户提供的一种插补方法,则在此Github Issue 中提出了一种解决方法,如果错误发生在na_kalmanna_seadec 方法中,这可能会有所帮助。

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 2015-07-20
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 2021-09-29
      • 2021-12-18
      • 2017-07-14
      • 1970-01-01
      相关资源
      最近更新 更多