R中使用支持向量机(SVM)的时间序列预测

时间:2018-03-03 07:27:29

标签: r time-series svm forecasting

我尝试过搜索,但无法找到这个问题的具体答案。到目前为止,我能够意识到使用SVM可以实现时间序列预测。我已经阅读了一些论文/文章,他们表现相同,但没有提及任何代码,而是解释了算法(我并不太了解)。有些人用python做过。 我的问题在于:我有一个公司数据(比如单变量)从2010年到2017年。我需要在R中使用SVM预测2018年的销售额。 您是否愿意通过一个小例子简单地呈现和解释R代码来执行相同的操作? 我非常感谢您的投入和努力! 感谢!!!

1 个答案:

答案 0 :(得分:6)

让我们假设您有月度数据,例如从航空旅客数据集中获得。您不需要时间序列类型的数据,只需要包含时间步长和值的数据框。我们将它们命名为x和y。接下来,您将开发一个svm模型,并指定预测所需的时间步长。使用预测函数计算给定时间步长的预测。就是这样。然而,支持向量机通常不被认为是时间序列预测的最佳方法,特别是对于长序列数据。它可以很好地用于未来的一些观察,但我不会期望预测的好结果,例如。明年整体的每日数据(但显然取决于数据)。基于SVM的预测的简单R代码:

# prepare sample data in the form of data frame with cols of timesteps (x) and values (y)  
data(AirPassengers) 
monthly_data <- unclass(AirPassengers)
months <- 1:144
DF <- data.frame(months,monthly_data)
colnames(DF)<-c("x","y")

# train an svm model, consider further tuning parameters for lower MSE
svmodel <- svm(y ~ x,data=DF, type="eps-regression",kernel="radial",cost=10000, gamma=10)
#specify timesteps for forecast, eg for all series + 12 months ahead
nd <- 1:156
#compute forecast for all the 156 months 
prognoza <- predict(svmodel, newdata=data.frame(x=nd))

#plot the results
ylim <- c(min(DF$y), max(DF$y))
xlim <- c(min(nd),max(nd))
plot(DF$y, col="blue", ylim=ylim, xlim=xlim, type="l")
par(new=TRUE)
plot(prognoza, col="red", ylim=ylim, xlim=xlim)

see plot of the forecasted values