Ошибка в методе прогнозирования .svm для регрессии? - PullRequest
1 голос
/ 08 июля 2020

Я создал формулу svm из пакета «e1071», используя следующий GDP:

library(e1071)

set.seed(100)
x <- seq(0.1, 5, by = 0.05)
w <- runif(x, min = 5, max = 6)
y <- log(x) + w ^ 2 + rnorm(x, sd = 0.2)

dt <- as.data.frame(cbind(y,x,w))

dt_train <- dt[(1:(length(x)-1)),]

dt_test <- dt[length(x),]

model <- svm(y ~ ., data = dt_train, type = "eps-regression", kernel =
    "radial", gamma = 1, cost = 1, epsilon = 0.1)

Для создания прогнозов вне выборки:

predict(model, newdata = dt_test)

28.13943

При изменении dt_test:

dt_test[1,] <- 100:102
predict(model, newdata = dt_test)

31.00455

Однако при повторном изменении dt_test мы получаем то же самое ответ:

dt_test[1,] <- c(0,78,1000)
predict(model, newdata = dt_test)

31.00455

Если я снова поменяю, ответ будет таким же:

dt_test[1,] <- rnorm(3)
predict(model, newdata = dt_test)

31.00455

Эта ошибка является препятствием, когда я хочу делать прогнозы для временных рядов с использованием регрессии svm. Будем признательны за любые отзывы.

1 Ответ

0 голосов
/ 08 июля 2020

TL / DR: ваши тестовые данные слишком далеко от ваших тренировочных данных

Посмотрите на распределение ваших тренировочных данных по сравнению с вашими тестовыми данными.

(M = sapply(dt, mean))
        y         x         w 
31.204838  2.550000  5.517325 
(S = sapply(dt, sd))
       y        x        w 
3.131271 1.436141 0.262107 

(100:102 - M)/S
        y         x         w 
 21.97036  68.55178 368.10419 
(c(0,78,1000) - M)/S
         y          x          w 
  -9.96555   52.53664 3794.18628 
(rnorm(3) - M)/S
         y          x          w 
 -9.118284  -1.747814 -15.895867 

Ваш первая точка данных находится на расстоянии 368 стандартных отклонений от среднего. Вторая точка данных находится на расстоянии 3794 стандартных отклонения от среднего. Третья точка данных находится всего на 16 стандартных отклонений от среднего значения. Эти точки по существу находятся на бесконечности.

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

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