【问题标题】:predict new data using support-vector regression R使用支持向量回归 R 预测新数据
【发布时间】:2016-04-26 20:53:25
【问题描述】:

我正在尝试使用带有 e1071 包的 R 中的支持向量回归来实现留一法交叉验证。我的数据和代码看起来或多或少是这样的:

library(e1071) 

#create fake dataset

y=rpois(30,3)-4+(rbinom(30,1,0.5))/2
x1=c(rep('C',16),rep('S',14))
x2=c(runif(16,0,1),runif(14,0,1)/10)
x3=c(runif(16,0,1)/5,runif(14,0,1))
dat=data.frame(y=y,x1=x1,x2=x2,x3=x3)
train=dat[-1,]
test=dat[1,]

# train the model

model=tune(svm, train$y ~ train$x1*train$x2*train$x3,kernel='linear',
ranges = list(epsilon = seq(0.1,0.6,0.1), cost = 2^(0:9)))
model=model$best.model

#predict

predict(model,newdata=test)

问题是预测函数只返回训练的值,而不是预测测试数据集。我在这里看到了一个类似的问题,predict.svm does not predict new data,但似乎该解决方案不适用于我的代码。关于这个问题的任何想法?

【问题讨论】:

    标签: r svm predict


    【解决方案1】:

    每当您在公式 (~) 中使用 $ 时,这表明事情可能会变得一团糟。以下是您应该如何重新编写tune() 电话

    model=tune(svm, y ~ x1*x2*x3, data=train, 
        kernel='linear', ranges = list(epsilon = seq(0.1,0.6,0.1), cost = 2^(0:9)))
    

    这会将变量从train data.frame 中分离出来,并允许您预测具有相同变量名称的新数据集。

    【讨论】:

    • 其实我之前就是这样调用函数的,但是由于某种原因,我收到了一条错误消息。现在它起作用了。非常感谢您的帮助!!
    【解决方案2】:

    这里有几件事 - 我不知道您是否想要 x1、x2 和 x3 之间的三重交互,或者您是否希望它们作为自变量。下面将它们作为自变量运行。然而,最重要的是,您在模型公式中调用数据,这就是为什么您总是预测您的训练数据集 (train$x1)

    model=tune(svm, y ~ x1+x2+x3,kernel='linear',data=train,
               ranges = list(epsilon = seq(0.1,0.6,0.1), cost = 2^(0:9)))
    model=model$best.model
    
    #predict
    
    predict(model,newdata=test)
    

    【讨论】:

    • 是的,我预计这三个变量之间可能存在相互作用。我以这种形式重写了调调,它奏效了!谢谢!
    • 任何非线性算法都会选择交互。您不需要进行任何乘法运算,这只会使您的方程式变得混乱。
    猜你喜欢
    • 2018-12-23
    • 1970-01-01
    • 2021-01-19
    • 2013-03-24
    • 2014-08-22
    • 2013-05-27
    • 2019-06-07
    • 2020-01-18
    • 2016-04-06
    相关资源
    最近更新 更多