Фреймы данных имеют разные размеры при попытке использовать функцию gl_model - PullRequest
0 голосов
/ 10 октября 2019

У меня есть вопрос о коде R ...

У меня возникла проблема при попытке добавить функции в мою модель. Наш профессор дал нам код, чтобы сделать регрессию лассо по ценам на карты Magic The Gathering. Если я запускаю его код как есть, он будет работать. Всякий раз, когда я пытаюсь добавить другой столбец как функцию в его код, у меня возникают проблемы.

Вот ошибка: «Ошибка в cbind2 (1, newx)% *% nbeta: ошибка Cholmod« X и / или Y имеют неправильные измерения »в файле ../MatrixOps/cholmod_sdmult.c, строка 90"

Снимок экрана моей командной строки А потом, если я уроню некоторые столбцы в большом наборе обучающих данных, я все равно получу ту же ошибку.

После того, как фреймы данных имеют одинаковое количество столбцов

При выполнении кода я проверяю размеры фреймов данных "test" и "train"и я выяснил, какие строки меняют тестовые и обучающие кадры данных.

Эти строки:

dummies <- dummyVars(future_price ~ ., data = train)
train<-predict(dummies, newdata = train)
test<-predict(dummies, newdata = test)

Таким образом, перед запуском этих строк и набор данных поезда и тестовый набор имеют ровно 23 переменных (столбца). После запуска этих трех фиктивных строк набор тестовых данных имеет 41 столбец, а набор обучающих данных - 47 столбцов. Я не совсем понимаю, как различное количество столбцов добавляется в каждый фрейм данных, если строки кода одинаковы, кроме замены «train» и «test».

Пожалуйста, помогите! Спасибо.

1 Ответ

0 голосов
/ 10 октября 2019

Проблема в том, что добавленную вами новую функцию необходимо преобразовать в коэффициент, используя as.factor

Давайте воспроизведем вашу ошибку

df <- data.frame(cat = c('A','B','C','B','A'),target=c(0,0,1,1,0))
df$cat <- as.character(df$cat)
train <- df[1:2,]
test <- df[3:5,]
dv_train <- dummyVars(target~.,train)
predict(dv_train,train)
# no column catC is created because in train there is no row where cat=="C"
#      catA     catB
#1        1        0
#2        0        1
predict(dv_train,test)
#  catA catB catC
#3    0    0    1
#4    0    1    0
#5    1    0    0

Вы можете видеть, что вы получаете кадры данных с разнымиколичество столбцов, потому что у вас разное количество уровней в train и test

Чтобы решить эту проблему, вы должны преобразовать все свои символьные переменные в факторы, прежде чем разбивать ваш фрейм данных между test и train, таким образом, когда выполняется dummyVars,каждый уровень создаст один новый столбец

# Convert cat column to factor
df$cat <- as.factor(df$cat)
train <- df[1:2,]
test <- df[3:5,]
dv_train <- dummyVars(target~.,train)
predict(dv_train,train)
#   cat.A cat.B cat.C
# 1     1     0     0
# 2     0     1     0

Теперь есть столбец для кошки C, хотя C все еще не появляется в поезде

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...