"Неправильный тип модели для классификации" в задачах регрессии в R-Caret
Я пытаюсь использовать различные алгоритмы прогнозирования из пакета Caret в R для решения проблемы регрессии, которая является моей целевой переменной непрерывной. Карет считает, что классификация является подходящим классом проблемы, и когда я прохожу любую из регрессионных моделей, я получаю сообщение об ошибке, в котором говорится "неправильный тип модели для классификации". Для воспроизводимости, давайте посмотрим с набором данных электростанции с комбинированным циклом. Данные находятся в CCPP.zip. Давайте прогнозировать мощность как функцию от других переменных. Мощность - это постоянная переменная.
library(readxl)
library(caret)
power_plant = read_excel("Folds5x2_pp.xlsx")
apply(power_plant,2, class) # shows all columns are numeric
control <- trainControl(method="repeatedcv", number=10, repeats=5)
my_glm <- train(power_plant[,1:4], power_plant[,5],
method = "lm",
preProc = c("center", "scale"),
trControl = control)
Изображение ниже - мой скриншот:
2 ответа
По какой-то причине caret
получает путаницу, которая является tidyverse вариант фрейма данных, который read_excel
возвращается. Преобразуя его в простой фрейм данных, прежде чем дать ему каретку, все работает:
library(readxl)
library(caret)
power_plant = read_excel("Folds5x2_pp.xlsx")
apply(power_plant,2, class) # shows all columns are numeric
power_plant <- data.frame(power_plant)
control <- trainControl(method="repeatedcv", number=10, repeats=5)
my_glm <- train(power_plant[,1:4], power_plant[,5],
method = "lm",
preProc = c("center", "scale"),
trControl = control)
my_glm
получая:
Linear Regression
9568 samples
4 predictor
Pre-processing: centered (4), scaled (4)
Resampling: Cross-Validated (10 fold, repeated 5 times)
Summary of sample sizes: 8612, 8612, 8611, 8612, 8612, 8610, ...
Resampling results:
RMSE Rsquared
4.556703 0.9287933
Tuning parameter 'intercept' was held constant at a value of TRUE
Я получаю аналогичную ошибку, когда пытаюсь использовать формулу = y ~ x, отлично работает, просто опуская указанную переменную и используя y ~ x.