predict.svm 回归方法错误?
Error in predict.svm method for regression?
我使用以下 GDP 从“e1071”包创建了一个 svm 公式:
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 回归对时间序列进行预测时,这个错误是一个障碍。
任何反馈将不胜感激。
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 个标准差。
这些点基本上在无穷远处。
您发现远离训练数据,您的模型预测的是一个常量。但是如果你从你的训练数据中取出小于 3 个标准差的数据点,你会发现模型不是常数。
我使用以下 GDP 从“e1071”包创建了一个 svm 公式:
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 回归对时间序列进行预测时,这个错误是一个障碍。 任何反馈将不胜感激。
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 个标准差。
这些点基本上在无穷远处。
您发现远离训练数据,您的模型预测的是一个常量。但是如果你从你的训练数据中取出小于 3 个标准差的数据点,你会发现模型不是常数。