如何解决如何在R中使用支持向量回归来预测未来价值
我试图根据时间(x〜time)预测周期位置的未来值,并使用支持向量回归进行单变量预测。该模型非常适合火车数据,但是当根据测试数据进行评估时,该模型会变成一条直线。在下面的代码中,我对火车使用了50个观测值(红色周期曲线的前半部分,其中SVR非常合适),对测试使用了50个观测结果(红色曲线的后半部分,其中SVR无法预测)。
library(lubridate)
library(purrr)
library(ggplot2)
library(Metrics)
library(caret)
library(dplyr)
library(e1071)
# train_data has 50 observations
# eval_data has 100 observations (the first half is train_data)
func <- x ~ abs_time # position x dependent on time
svr_model <- svm(func,train_data,type = "eps-regression",kernel="radial",gamma=13,cost=10,epsilon = 0.01)
k_hat <- predict(svr_model,eval_data)
plot(x = eval_data$abs_time,y = eval_data$x,type = "l",col="red") # true position
points(x = eval_data$abs_time,y = k_hat,col = "blue") # SVR predicted position
我看了这篇文章: Time Series Forecasting using Support Vector Machine (SVM) in R并尝试了将训练数据和测试数据结合在一起并评估模型的建议。
想知道这里发生了什么。我的直觉是,将来内核的选择无法推广到周期性模式。我将如何构建内核,以使SVR模型能够在将来预测周期性数据?
解决方法
您可以使用caretForecast
软件包。您可以使用caret
支持的任何ML模型,包括SVM。
要安装软件包:devtools::install_github("Akai01/caretForecast")
示例代码
library(caretForecast)
library(forecast)
training_data <- window(AirPassengers,end = c(1960,1))
testing_data <- window(AirPassengers,start = c(1960,2))
fit <- ARml(training_data,maxlag = 12,caret_method = "svmLinear",lambda = "auto")
forecast(fit,h = length(testing_data),level = NULL)-> fc
accuracy(fc,testing_data)
fc_plot(fc) +
autolayer(testing_data,series = "testing_data")
get_var_imp(fc)
get_var_imp(fc,plot = F)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。