【问题标题】:Predict a simple sequence with R, support vector machine用 R 预测一个简单的序列,支持向量机
【发布时间】:2019-09-22 03:41:49
【问题描述】:

我正在尝试使用支持向量机来预测一系列值,例如:

输入 0、1、2、3 将预测 4

出于这个原因,我将此问题视为 R 中的回归 ML 问题,这是我的代码:

library("e1071")
x0 <- c(0)
x1 <- c(0, 1)
x2 <- c(0, 1, 2)
x3 <- c(0, 1, 2, 3)
x4 <- c(0, 1, 2, 3, 4)
x5 <- c(0, 1, 2, 3, 4, 5)
x6 <- c(0, 1, 2, 3, 4, 5, 6)
x7 <- c(0, 1, 2, 3, 4, 5, 6, 7)

x = c(x0, x1, x2, x3, x4, x5, x6, x7)
y = c(1, 2, 3, 4, 5, 6, 7, 8)

df = data.frame(x, y)
df

svmfit = svm(y ~ ., data = df)
print(svmfit)

目前我陷入了如何正确创建输入序列的问题,并且一直收到此错误:

data.frame(x, y) 中的错误:参数暗示不同的行数: 36、8回溯:

  1. data.frame(x, y)
  2. stop(gettextf("参数暗示不同的行数:%s", .paste(unique(nrows), collapse = ", ")), domain = NA)

谁能帮帮我?

提前非常感谢!

【问题讨论】:

  • 请检查你的df &lt;- data.frame(x, y)length(x)是8,'y'是36,不是回收。可能你需要明确使用repdf &lt;- data.frame(x, y = rep(y, length.out = length(x)))

标签: r dataframe machine-learning plot svm


【解决方案1】:

问题在于 'x'、'y' 向量 (36, 8) 的长度不相等,并且它不是另一个的倍数,因此不会发生回收。一种选择是replicate 'y' 向量以使长度与'x' 相同,然后执行svm

df <- data.frame(x, y = rep(y, length.out = length(x))) 
svmfit = svm(y ~ ., data = df)

svmfit

#Call:
#svm(formula = y ~ ., data = df)


#Parameters:
#   SVM-Type:  eps-regression 
# SVM-Kernel:  radial 
#       cost:  1 
#      gamma:  1 
#    epsilon:  0.1 


#Number of Support Vectors:  34

【讨论】:

  • 我理解你的意思,但是通过这样做,我选择了一个 y 列,它会一遍又一遍地重复从 1 到 8 的所有数字。因此该模型会做出错误的预测。
猜你喜欢
  • 2017-05-29
  • 2018-08-11
  • 2012-03-18
  • 2015-06-19
  • 2019-01-23
  • 2019-03-08
  • 1970-01-01
  • 2014-08-22
  • 2011-10-05
相关资源
最近更新 更多