Как сделать гибридную модель ARIMA и SVM в R
Я хочу объединить 2 удивительные модели для прогнозирования / прогноза данных - модель ARIMA и SVM, и, таким образом, я хочу уменьшить стандартную ошибку для гибридной модели. В настоящее время вот график, показывающий их в действии:
Я точно не знаю, как совместить обе модели вместе. Мой способ состоит в том, чтобы приспособить результат прогноза ARIMA к классификатору SVM. Однако мой метод дает более высокую ошибку во всех 4 категориях (MAE, MAPE, MSE и RMSE):
ряд 1 - подгонка ARIMA
строка 2 - SVMs подходят
строка 3 - комбинация ARIMA + SVM (мой метод)
Это мой исходный код:
# Time series data
data_ts <- ts(daily_data[, c('cnt')])
# ARIMA model
arima_seasonal <-
Arima(
data_ts,
order = c(2, 1, 2),
seasonal = c(1, 0, 1),
include.drift = TRUE
)
arima_seasonal_pred <- fitted(arima_seasonal)
# SVM model
svm_tune <- tune.svm(
data_ts ~ daily_data$date,
data = daily_data,
gamma = 2 ^ (-1:1),
cost = 2 ^ (2:8),
epsilon = seq(0, 1, 0.1),
kernel = "radial"
)
# - best parameters:
# gamma cost epsilon
# 2 256 0.4
svm_model <- svm_tune$best.model
svm_pred <- fitted(svm_model)
# ARIMA + SVM
arima_svm_tune <- tune.svm(
arima_seasonal_pred ~ daily_data$date,
data = daily_data,
gamma = 2 ^ (-1:1),
cost = 2 ^ (2:8),
epsilon = seq(0, 1, 0.1),
kernel = "radial"
)
arima_svm <- arima_svm_tune$best.model
arima_svm_pred <- fitted(arima_svm)
label1 <- "Actual data"
label2 <- "ARIMA model"
label3 <- "SVMs"
label4 <- "Hybrid model"
# Plot them
graph <- ggplot(daily_data) +
geom_line(aes(x = date, y = cnt, colour = label1), size = .4) +
geom_line(aes(x = date, y = arima_seasonal_pred, colour = label2)) +
geom_point(aes(x = date, y = arima_seasonal_pred, colour = label2), size = 0.5) +
geom_line(aes(x = date, y = svm_pred, colour = label3), size = .4) +
geom_point(aes(x = date, y = svm_pred, colour = label3), size = 0.5) +
geom_line(aes(x = date, y = arima_svm_pred, colour = label4), size = .4) +
geom_point(aes(x = date, y = arima_svm_pred, colour = label4), size = 0.5) +
scale_x_date("Date") +
ylab("Bicycle Sales")
graph$labels$colour <- "Legend"
ggsave(
filename = "arima_svm_pred_1.png",
plot = graph,
width = 10,
height = 6
)
Любая помощь будет оценена.