Можно ли классифицировать данные на основе временных рядов с использованием статистических моделей, таких как AR, MA и ARMA?
Я пытаюсь классифицировать данные многомерного временного ряда, и я использовал алгоритмы машинного обучения, такие как SVM, нейронная сеть, KNN на основе DTW и т. Д. Теперь я собираюсь использовать статистическую модель, такую как авторегрессия, для классификации моих данных и для того, чтобы для этого я написал некоторый код на R, но, похоже, классификация невозможна, поскольку в результате получаются некоторые числа с плавающей запятой, а не категориальные числа. есть ли у вас опыт в этом деле? вот мой код:
## status is the label of my data which is 0: Not exercising 1:
#exercising
library(vars)
dt=read.csv('data.csv')
# plot.ts(diff(dt$gx))
# plot.ts(dt$my)
# Box.test(dt$yaw,lag = 20,type = 'Ljung-Box')
attach(dt)
var=cbind(ax,ay,az,status)
#VARselect(var, lag.max = 10, type = "both")
model=VAR(var,type = 'const',lag.max = 10,ic = 'AIC',p = 4)
arch.test(model, lags.multi = 10)
# grangertest(status ~ ax, order = 4)
prd=predict(model, n.ahead = 10, ci = 0.95, dumvar = NULL)
результат статуса:
$ статус
fcst lower upper CI
[1,] 0.002911329 -0.1104069 0.1162295 0.1133182
[2,] 0.005366295 -0.1551971 0.1659297 0.1605634
[3,] 0.008643568 -0.1880706 0.2053577 0.1967141
[4,] 0.009482430 -0.2172989 0.2362637 0.2267813
[5,] 0.012580248 -0.2405501 0.2657106 0.2531303
[6,] 0.014794586 -0.2618808 0.2914700 0.2766754
[7,] 0.015800219 -0.2825497 0.3141501 0.2983499
[8,] 0.015899414 -0.3023957 0.3341945 0.3182951
[9,] 0.016415702 -0.3200783 0.3529097 0.3364940
[10,] 0.017935262 -0.3354627 0.3713333 0.3533980
Тем не менее, я ожидал 0 или 1 для этого.
1 ответ
Вы не получите категориальные значения 0
или же 1
так как VAR
не предназначен для использования под наблюдением проблем (например, когда ваш набор данных содержит метки, такие как status
как в вашем случае) но для проблем временного ряда. По факту, VAR
построен на основе многих моделей линейной регрессии lm
но используется необычным образом (я могу сказать вам это, потому что мне удалось реализовать VAR
на Spark, следуя реализации в R
).
Итак, когда вы установите var=cbind(ax,ay,az,status)
ты говоришь VAR
тот status
является непрерывной переменной, поэтому вы получите удвоенный результат. То, что вы делаете, немного похоже на попытку использовать линейную регрессию для прогнозирования status
и ожидая, что результат будет всегда 0
или же 1
когда вывод всегда непрерывный, а не категориальный. Вы бы предпочли использовать логистическую регрессию в этой ситуации.