【问题标题】:SVM in R - Classify new instanceR中的SVM - 分类新实例
【发布时间】:2019-04-02 20:24:42
【问题描述】:

我使用以下代码构建了我的 SVM 模型:

X1 = c(2, 2, -2, -2, 1, 1, -1, -1)
X2 = c(2, -2, -2, 2, 1, -1, -1, 1)
Y = c(1, 1, 1, 1, 2, 2, 2, 2)
alldata = data.frame(X1, X2, Y)
svm_model <- svm(alldata$Y ~ . , kernel = "radial", type = "C-classification", alldata)

现在,我想用值(4,5) 对新实例进行分类。我尝试使用命令:

predict(svm_model, c(4,5))

但我收到以下错误:

Error in dimnames(x) <- dn : 
  length of 'dimnames' [2] not equal to array extent

接下来我创建了一个如下所示的小数据框,尝试进行分类并得到显示的结果:

b1 = c(4)
b2 = c(5)
b = data.frame(b1,b2)
predict(svm_model, b)
   1 <NA> <NA> <NA> <NA> <NA> <NA> <NA> 
   1    1    1    1    2    2    2    2 

我在哪里犯错了?

【问题讨论】:

  • 您在公式中使用的变量名称需要与新 data.frame 中用于预测的名称完全匹配(否则 R 如何知道哪些值映射到哪些变量)。试试b = data.frame(X1=b1,X2=b2)。此外,您应该只使用Y ~ . 作为公式(不要使用$)并设置data=alldata。这使得使用 predict 等函数更加安全。

标签: r machine-learning svm


【解决方案1】:

该错误消息表明c(4,5) 包含的信息与您用于训练的alldata 中的信息不同。更具体地说,colnames() 不一样。

通过创建一个新的数据框:

new_data &lt;- data.frame(X1 = 4, X2 = 5) 你将能够得到预期的输出。

【讨论】:

    【解决方案2】:

    您需要在“b”数据框中具有相同的变量 X1 和 X2 才能进行预测。将代码中的 b1 和 b2 替换为 X1 和 X2。

    X1 = c(4)
    X2 = c(5)
    b = data.frame(X1,X2)
    
    predict(svm_model, b)
    

    【讨论】:

      猜你喜欢
      • 2018-02-08
      • 1970-01-01
      • 2016-08-12
      • 2011-03-05
      • 2013-05-13
      • 2021-06-02
      • 2016-03-16
      • 2013-11-22
      • 2020-06-10
      相关资源
      最近更新 更多