【问题标题】:R error in glmnet: NA/NaN/Inf in foreign function callglmnet 中的 R 错误:外部函数调用中的 NA/NaN/Inf
【发布时间】:2014-03-18 11:07:20
【问题描述】:

我正在尝试使用 glmnet 创建一个模型,(当前使用 cv 来查找 lambda 值)并且我收到错误 NA/NaN/Inf in foreign function call (arg 5)。我相信这与我的数据集中的 NA 值有关,因为当我使用 NA 删除所有数据点时,命令会成功运行。

我的印象是 glmnet 可以处理 NA 值。我不确定错误来自哪里:

> res <- cv.glmnet(features.mat, as.factor(tmp[,"outcome"]), family="binomial")
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs,  : 
  NA/NaN/Inf in foreign function call (arg 5)

数据集如下所示:

> head(features.mat)
6 x 8 sparse Matrix of class "dgCMatrix"
   a b   c  e  f  g  h i
1  1 1 138 NA NA 15 NA .
4  1 3 171 NA NA 17 NA .
7  1 1 156 NA NA  5 NA .
8  1 4  97 NA NA  7 NA .
9  1 1 219 NA NA 11 NA .
10 1 . 263 NA NA 20 NA .
> head(as.factor(tmp[,"outcome"]))
[1] 0 0 0 0 0 0
Levels: 0 1

【问题讨论】:

    标签: r sparse-matrix na glmnet


    【解决方案1】:

    请注意,如果您包含日期功能,也会发生这种情况。我没有 NA,但得到了这个错误。当我删除日期变量时,一切都很好。

    【讨论】:

      【解决方案2】:

      cv.glmnet 不支持转换为因子的字符数据类型,如上所述,无法处理 NA。使用 as.numeric 或 as.double。

      【讨论】:

        【解决方案3】:

        补充: 如果您在数据框中没有 NA 的情况下收到此错误,则您可能尚未使用 model.matrix 函数定义输入矩阵。

        x <- model.matrix( ~ ., Data)
        

        我知道这不是您问题的答案,但我遇到了与您相同的错误并找到了此解决方案。所以它可能对其他人有帮助。

        【讨论】:

        • 可能不是 OP 的答案,但它肯定解决了一个非常晦涩的问题。谢谢你的提示!只是为了添加您的评论,使用它来避免有 2 个截距:``` x
        【解决方案4】:

        glmnet 似乎无法处理 NA 值!

        【讨论】:

        • 这也是我得到的错误。你是怎么解决这个问题的?
        • 存在一些不同的解决方案:1) 我采用的方法是创建第二列 col_x_is_na。如果列是 NA,则此辅助列设置为 true。创建第二列后,您可以将所有 NA 值设置为 0。辅助标志列将偏移原始列中的值。 2) 排除这些列 3) 用 NA 值估算单元格 4) 使用可以处理 NA 值的包,例如 ada
        • 我遇到了同样的错误,有一些分类特征(矩阵中的字符串值)
        • @citral 是的,这个错误消息有 glmnet 特定的原因,确实与 NA 无关。解决方案在这里解释:stackoverflow.com/a/48230658/7769076
        猜你喜欢
        • 2012-09-05
        • 2013-10-24
        • 1970-01-01
        • 2021-03-11
        • 2023-03-05
        • 2018-07-03
        • 2014-03-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多