прогнозирование временных рядов с использованием регрессии опорных векторов - PullRequest
0 голосов
/ 13 января 2019

У меня есть набор данных временного ряда, который состоит из 60 точек данных. Я разделил набор данных на две части: обучение (первые 70% данных) и наборы тестирования (последние 30% данных). Используя функцию Matlab fitrsvm, я построил модель регрессии опорных векторов в наборе обучающих данных и пытаюсь предсказать точки данных временных рядов в наборе тестовых данных. У меня модель SVR очень хорошо аппроксимирует тренировочный набор данных. Однако он даже не пытается обобщить набор тестовых данных, он просто серьезно занижает данные, т. Е. Дает прямую линию, даже не проходя через какие-либо точки данных в тестовом наборе данных. Кто-нибудь знает, почему это происходит? Является ли набор данных слишком маленьким, то есть только 60 точек данных? Имеет ли смысл проводить перекрестную проверку? По моему мнению, нет смысла проводить перекрестную проверку, поскольку я пытаюсь прогнозировать последние 30% данных. Я пытался изменить параметры и т. Д., Но не помог.

1 Ответ

0 голосов
/ 17 января 2019

Относительно производительности в целом: пытались ли вы сделать свой временной ряд стационарным (посредством разности или преобразования мощности) или нормализовать его перед применением SVR? Это может помочь - иногда они помогают с NNets, применяемыми к временным рядам.


Относительно резюме: Есть способы сделать перекрестную проверку для временных рядов. Сначала вы могли бы сделать разбивку по временным рядам (доступно в Python Scikit-learn и в R), я предполагаю, что это будет и в Matlab.

[1, 2, 3],       [4, 5]
[1, 2, 3, 4],    [5, 6]
[1, 2, 3, 4, 5], [6, 7].

Это будет работать для любого метода прогнозирования временных рядов.

Но так как вы используете SVR, вы можете даже использовать обычную перекрестную проверку (которая не будет работать для чего-то вроде ARIMA или Holt-Winters).

Это связано с тем, что в последнее время Бергмейр, Хиндман и Ку показали, что для чисто авторегрессивных моделей, таких как модели AR (p), нейронные сети или регрессия опорных векторов, можно использовать даже нормальное резюме, если Вы форматируете свои тренировочные данные так, чтобы они выглядели как контролируемая проблема машинного обучения, а не проблема временных рядов.

Чтобы понять, как это работает, сначала нужно заметить, что чисто авторегрессионный метод использует только фиксированное количество предыдущих периодов, так что вместо:

[1, 2, 3],          [4]
[1, 2, 3, 4],       [5]
[1, 2, 3, 4, 5],    [6]
[1, 2, 3, 4, 5, 6], [7]

Например, для модели авторегрессии порядка 3 (т.е. 3 лага):

[1, 2, 3],   [4]
[2, 3, 4],   [5]
[3, 4, 5],   [6]
[4, 5, 6],   [7]

Тогда вам нужно думать о ваших данных в формате ML, а не в формате временных рядов:

[1, 2, 3 | 4]
[2, 3, 4 | 5]
[3, 4, 5 | 6]
[4, 5, 6 | 7]

Чтобы ваша точка данных была не просто одним значением, например [4], а вектором с 3 входами и одним целевым значением: [1, 2, 3 | 4]

В этом случае допустимо использовать обычную перекрестную проверку (вместо перекрестной проверки временных рядов), поскольку зависимость больше не является проблемой, и вы можете обучить свою модель:

[2, 3, 4 | 5]
[3, 4, 5 | 6]
[4, 5, 6 | 7]

И тест с:

[1, 2, 3 | 4]

затем обучите модель:

[1, 2, 3 | 4]
[3, 4, 5 | 6]
[4, 5, 6 | 7]

И тест с:

[2, 3, 4 | 5]

И так далее ...

См. «Примечание о достоверности перекрестной проверки для оценки авторегрессионного прогнозирования временных рядов», Кристоф Бергмейр, Роб Дж. Хиндман и Бонсу Кооб, для получения подробной информации.

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