【问题标题】:"Error in drop(y %*% rep(1, nc))" error for cv.glmnet in glmnet R packageglmnet R 包中 cv.glmnet 的“丢弃错误(y %*% rep(1, nc))”错误
【发布时间】:2014-09-08 19:12:38
【问题描述】:

我有一个函数可以返回 cv.glmnet 模型的 auc 值,虽然不是大多数时候,但它经常在执行 cv.glmnet 函数时返回以下错误:

丢弃错误(y %% rep(1, nc)): 在为函数“drop”选择方法时评估参数“x”时出错:y %% rep(1, nc) 中的错误:参数不一致

我已经阅读了一些关于该错误的信息,我能找到的唯一建议是使用 data.matrix() 而不是 as.matrix()。我的函数如下(其中“form”是带有我想要的变量的公式,“dt”是数据框):

auc_cvnet <- function(form, dt, standard = F){
      vars = all.vars(form)
      depM = dt[[vars[1]]]
      indM = data.matrix(dt[vars[-1]])
      model = cv.glmnet(indM, depM, family = "binomial", nfolds=3, type.measure="auc", standardize = standard)

      pred = predict(model, indM, type = "response")
      tmp = prediction(pred, depM)
      auc.tmp = performance(tmp, "auc")
      return(as.numeric(auc.tmp@y.values))
    }

我在另一个函数中实现了这个函数,该函数迭代了几个变量的组合,以查看哪些变量组合运行良好(这是一种非常强力的方法)。无论如何,当错误被抛出时,我打印出迭代的公式,并只用那个公式调用函数,它工作得很好。所以不幸的是,我无法确定哪些调用会引发错误,否则我会尝试提供更多信息。数据框大约有 30 行,当我在具有 110 行的较大数据集上运行代码时没有错误。两个数据集中也没有 NA。

有没有人见过这个或有任何想法?谢谢!

【问题讨论】:

    标签: r glmnet


    【解决方案1】:

    信不信由你,我今天确实遇到了同样的错误。因为我不知道你的数据集,所以我不能确定它是什么,但对我来说,我作为 y 变量(你的 depM)传递的数据是所有 True 值的列。如果我的 y 变量包含 True 和 False 值,cv.glmnet 只会返回有效模型。

    我希望我能解释为什么 cv.glmnet 需要 True 和 False,但我对函数本身缺乏了解(事实上,我只是在调整给我的代码)。我只是想我会发布这个,以防它给你一些故障排除帮助。祝你好运!

    【讨论】:

      【解决方案2】:

      在包含 2 个正例和 850 个负例的数据集上运行 cv.glmnet 时,我遇到了同样的问题。在一次交叉验证迭代中(训练集和测试集是随机抽样的),两个正例都从训练集中抽样出来。因此,glmnet 调用lognet,后者又调用drop(y %*% rep(1, nc)),但y 是一个向量,而不是一个至少有两列的矩阵。

      我能想到的最简单的方法是将foldid 参数指定为cv.glmnet,并确保每次迭代的数据中至少存在两个类。

      【讨论】:

        猜你喜欢
        • 2017-05-03
        • 2018-03-27
        • 1970-01-01
        • 2012-01-17
        • 2020-08-18
        • 2020-02-03
        • 2015-06-01
        • 1970-01-01
        • 2015-08-14
        相关资源
        最近更新 更多