Многомерная полиномиальная регрессия в R (прогноз) - PullRequest
0 голосов
/ 09 мая 2018

Я строю модель прогнозирования, используя тестовый сплит 60/40. Я хотел бы построить модель полиномиальной регрессии с 10 объясняющими переменными.

Сначала я строю модель, основанную на тренировках, и регрессирую на training$y.

model_poly = lm(training$y ~ poly(training$x1, degree=2, raw=TRUE) +
     poly(training$x2, degree=2, raw=TRUE) +
     poly(training$x3, degree=2, raw=TRUE) +
     poly(training$x4, degree=2, raw=TRUE) +
     poly(training$x5, degree=2, raw=TRUE) +
     poly(training$x6, degree=2, raw=TRUE) +
     poly(training$x7, degree=2, raw=TRUE) +
     poly(training$x8, degree=2, raw=TRUE) +
     poly(training$x9, degree=2, raw=TRUE) +
     poly(training$x10, degree=2, raw=TRUE))

Впоследствии я хотел бы предсказать новые данные (test), используя эту модель.

poly_predictions = predict(model_poly, poly(test$x1, degree=2, raw=TRUE)+
     poly(test$x2, degree=2, raw=TRUE) +
     poly(test$x3, degree=2, raw=TRUE) +
     poly(test$x4, degree=2, raw=TRUE) +
     poly(test$x5, degree=2, raw=TRUE) +
     poly(test$x6, degree=2, raw=TRUE) +
     poly(test$x7, degree=2, raw=TRUE) +
     poly(test$x8, degree=2, raw=TRUE) +
     poly(test$x9, degree=2, raw=TRUE) +
     poly(test$x10, degree=2, raw=TRUE))

Тестовые данные имеют около 200 тыс. Строк, а тренировочные данные - около 300 тыс. Строк.

Проблема в том, что poly_predictions имеет размерность данных обучения, а не данных испытаний. Поэтому что-то не так.

Что мне здесь не хватает? При прогнозировании с помощью простой линейной модели, такой как

model_lm = lm(training$y ~ ., training)
lm_predictions = predict(model_lm, test)

У меня не было проблем.

1 Ответ

0 голосов
/ 09 мая 2018

Вы слишком уточнили вопрос. Поскольку в формуле вашей модели используется training$x1, именно эту переменную она будет искать при прогнозировании. Вместо этого используйте тот факт, что столбцы имеют общие имена, и создайте модель как

model_poly = lm(y ~ poly(x1, degree=2, raw=T) +
  poly(x2, degree=2, raw=T), data=df.training)

Это произведет модель в терминах абстрактных переменных x1, x2 и т. Д.

Затем вы можете использовать прогнозирование следующим образом (вы можете опустить poly вызовы здесь, потому что они запечены в модели):

predict(model_poly, df.test)

для получения желаемого результата. В противном случае вы обычно получаете предупреждение о том, что ваши выходные данные не совпадают с newdata, предоставленным для прогнозирования, если они имеют разную длину.

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