2015-06-08 11 views
1

Я пытаюсь изучить метод регрессионной логистики с использованием glmnet. Я пытаюсь предсказать, будет ли автомобиль с примерами данных mtcars иметь автоматическую коробку передач или руководство. Я думаю, что мой код довольно прост, но я, кажется, получаю сообщение об ошибке:glmnet training бросает ошибку на x, y аргументы dataframe: я использую это неправильно?

Это первый блок просто разбивает 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,] 

Я знаю, что х данные должны быть в матричной форме без ответа, поэтому я разделить два учебных комплектов в матрицу без ответа (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' 

я упускаю что-то?

+2

Не ' attach'. Это плохая привычка, которая может вызвать у вас неприятности, и вы даже не используете ее в коде, который вы разделяете! – Gregor

+0

Итак ... Я не уверен, что вы думаете, что вы сделали, чтобы превратить ваши ковариаты в матрицу. Матрица - это другая структура данных. Вы не можете получить его, просто подмножая фрейм данных. – joran

+0

Вы посмотрели 'cv.glmnet'? Он выполняет автоматическое k-кратное CV. – Vlo

ответ

3

Принуждение первого аргумента в качестве матрицы решения для меня:

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

В самом деле, форма glmnet? выглядит, что первый аргумент должен быть матрица/разреженная матрица:

x: input matrix, of dimension nobs x nvars; each row is an observation vector. Can be in sparse matrix format (inherit from class "sparseMatrix" as in package Matrix; not yet available for family="cox")