2017-02-20 26 views
0

Я разрабатываю модель прогнозирования CTR для соревнования Kaggle (link). Я прочитал в первые 100000 строк данных из обучающего набора, затем далее разделить это на поезд/тестовых наборов на 80/20 поКак проверить модель логистической регрессии в R?

ad_data <- read.csv("train", header = TRUE, stringsAsFactors = FALSE, nrows = 100000) 
trainIndex <- createDataPartition(ad_data$click, p=0.8, list=FALSE, times=1) 
ad_train <- ad_data[trainIndex,] 
ad_test <- ad_data[-trainIndex,] 

затем я использовал данные ad_train разработать модель GLM

ad_glm_model <- glm(ad_train$clicks ~ ad_train$C1 + ad_train$site_category + ad_train$device_type, family = binomial(link = "logit"), data = ad_train) 

Но всякий раз, когда я пытаюсь использовать функцию предсказать, чтобы проверить, насколько хорошо он делает на множестве ad_test, я получаю ошибку:

test_model <- predict(ad_glm_model, newdata = ad_test, type = "response") 
Warning message: 
'newdata' had 20000 rows but variables found have 80000 rows 

Что дает? Как проверить мою модель GLM на новые данные?

EDIT: Он отлично работает. Просто нужно сделать этот вызов вместо:

ad_glm_model <- glm(clicks ~ C1 + site_category + device_type, family = binomial(link = "logit"), data = ad_train) 
+1

не использовать '' ad_train $ в вызове GLM, просто используйте '' данных = вместо – user20650

ответ

0

Это происходит потому, что вы в том числе имя фрейма данных для каждой переменной в модели формулы. Вместо этого, ваша формула должна быть:

glm(clicks ~ C1 + site_category + device_type, family = binomial(link = "logit"), data = ad_train) 

Как описано в second link в дубликате уведомления:

This is a problem of using different names between your data and your newdata and not a problem between using vectors or dataframes.

When you fit a model with the lm function and then use predict to make predictions, predict tries to find the same names on your newdata. In your first case name x conflicts with mtcars$wt and hence you get the warning.