【问题标题】:Error in predict() glmnet function: not-yet-implemented methodpredict() glmnet 函数中的错误:尚未实现的方法
【发布时间】:2016-05-28 00:26:44
【问题描述】:

当我使用预测 glmnet 函数时,我得到代码下面提到的错误。

mydata <- read.csv("data.csv")
x <- mydata[,1:4]
y <- mydata[,5]
data <- cbind(x,y)
model <- model.matrix(y~., data=data)
ridgedata <- model[,-1]
train <- sample(1:dim(ridgedata)[1], round(0.8*dim(ridgedata)[1]))
test <- setdiff(1:dim(ridgedata)[1],train)
x_train <- data[train, ]
y_train <- data$y[train]
x_test <- data[test, ]
y_test <- data$y[test]
k=5
grid =10^seq(10,-2, length =100)
fit <- cv.glmnet(model,y,k=k,lambda = grid)
lambda_min <- fit$lambda.min
fit_test <- predict(fit, newx=x_test,s=lambda_min)

错误如下:

as.matrix(cbind2(1, newx) %*% nbeta) 中的错误:评估错误 为函数“as.matrix”选择方法时的参数“x”:错误 在 cbind2(1, newx) %*% nbeta :尚未实现的方法 &lt;data.frame&gt; %*% &lt;dgCMatrix&gt;

我试过调试,但我不确定在哪里

as.matrix(cbind2(1, newx) %*% nbeta)

正在使用代码以及导致此错误的原因。

【问题讨论】:

  • 试试x_test &lt;- as.matrix(data[test, ]) ?
  • @BenBolker 遇到同样的错误
  • 好的,那么我们需要一个reproducible example 请...
  • 你能发布一个我不需要请求访问的版本,即完全开放的版本吗?更好的是,您能否创建一个独立的小型示例,该示例会产生相同的错误并且可以在此处发布?

标签: r glmnet


【解决方案1】:

您的原始数据框在预测变量中有一个因子(分类)变量。当您使用 model.matrix 时,它会对该变量执行一些明智的操作;如果直接传给predict,它不知道怎么办。

newX <- model.matrix(~.-y,data=x_test)
fit_test<-predict(fit, newx=newX,s=lambda_min)

顺便说一句,您可以用一个最小/虚构的例子复制这个例子,只有几行数据......例如,这个设置给出了同样的错误(我把数据称为dd而不是而不是“数据”,因为后者是 R 中的内置函数):

set.seed(101)
dd <- data.frame(y=rnorm(5),
            a=1:5,b=2:6,c=3:7,d=letters[1:5])
model <- model.matrix(y~., data=dd)
n <- nrow(dd)
train <- sample(1:n, size=round(0.8*n))
test <- setdiff(1:n,train)

【讨论】:

  • 这确实很有帮助。谢谢!
  • 谢谢。这是否意味着我不能在 cv.glmnet 中使用分类变量?我遇到了同样的问题,我正在使用除一个(性别)之外的数字变量。提前致谢!
  • 另一个问题:你能解释一下“~.”的意思吗? [波浪号后跟点]
  • 这意味着您需要将分类变量转换为虚拟变量,使用model.matrix 最容易完成。公式y~. 表示要在模型矩阵中包含数据框中的所有变量,除了响应变量
  • 谢谢,非常感谢。但是,我仍然不明白,因为 x 不包含响应变量。我们不是只将预测变量虚拟化为虚拟变量(而不是 y)吗?另一个问题是使用glmnet可以使用分类变量,但不能使用cv.glmnet,这很奇怪(为了确定,我说的是上面的例子,带有减号,我不知道在做什么要么)。
猜你喜欢
  • 2021-09-01
  • 2021-08-03
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
相关资源
最近更新 更多