1

我正在尝试使用 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'

我错过了什么吗?

4

1 回答 1

5

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

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

事实上,formglmnet?看起来第一个参数应该是一个矩阵/稀疏矩阵:

x: 输入矩阵, 维度为 nobs x nvars; 每行是一个观察向量。可以是稀疏矩阵格式(从包 Matrix 中的类“sparseMatrix”继承;尚不适用于 family="cox")

于 2015-06-08T19:18:53.553 回答