r语言 - predict() glmnet 函数中的错误:尚未实现的方法



当我使用预测 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:尚未实现的方法 <data.frame> %*% <dgCMatrix>

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

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

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

原始数据框中的预测变量中有一个因子(类别(变量。 当你使用model.matrix时,它会对这个变量做一些明智的事情;如果你只是把它直接传递给predict,它不知道该怎么做。

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

顺便说一句,您可以使用一个最小/虚构的示例复制此示例,只需几行数据......例如,此设置给出了相同的错误(我称数据dd而不是"data",因为后者是 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)

相关内容

最新更新