glmnet training在x,y dataframe参数上抛出错误:我使用它错了吗?

时间:2015-06-08 19:11:04

标签: r dataframe regression glmnet

我正在尝试用glmnet学习惩罚性逻辑回归方法。我试图预测来自mtcars示例数据的汽车是否会有自动变速器或手动。我认为我的代码非常简单,但我似乎遇到了错误:

第一个块简单地将mtcars分成80%的训练集和20%的测试集

library(glmnet)
attach(mtcars)

smp_size <- floor(0.8 * nrow(mtcars))

set.seed(123)
train_ind <- sample(seq_len(nrow(mtcars)), size=smp_size)

train <- mtcars[train_ind,]
test <- mtcars[-train_ind,]

我知道x数据应该是没有响应的矩阵形式,所以我将两个训练集分成一个非响应矩阵(train_x)和一个响应向量(train_y)

train_x <- train[,!(names(train) %in% c("am"))]
train_y <- train$am

但是在尝试训练模型时,

p1 <- glmnet(train_x, train_y)

我收到错误:

Error in elnet(x, is.sparse, ix, jx, y, weights, offset, type.gaussian,
:(list) object cannot be coerced to type 'double'

我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

将第一个参数作为矩阵强制解决了我:

p1 <- glmnet(as.matrix(train_x), train_y)

实际上,表单glmnet?看起来第一个参数应该是矩阵/稀疏矩阵:

  

x:输入矩阵,维度nobs x nvars;每行是一个观察向量。可以采用稀疏矩阵格式(继承自&#34; sparseMatrix&#34;如矩阵包;尚未提供给family =&#34; cox&#34;)