Как сделать гибридную модель ARIMA и SVM в R - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу объединить 2 удивительные модели для прогнозирования / прогноза данных - модель ARIMA и SVM, и, таким образом, я хочу уменьшить стандартную ошибку для гибридной модели.В настоящее время вот график, показывающий их в действии:

current ARIMA + SVM model

Я точно не знаю, как объединить обе модели вместе.Мой способ состоит в том, чтобы приспособить результат предсказания ARIMA к классификатору SVM.Однако мой метод дает более высокую ошибку во всех 4 категориях (MAE, MAPE, MSE и RMSE):

errors

строка 1 - ARIMA fit

строка 2 - подходят SVM

строка 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
)

Любая помощь будетс благодарностью.

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