gpt4 book ai didi

r - Predict.svm 不预测新数据

转载 作者:行者123 更新时间:2023-12-03 01:57:30 24 4
gpt4 key购买 nike

不幸的是,我在以下简单示例中使用 Predict() 时遇到问题:

library(e1071)

x <- c(1:10)
y <- c(0,0,0,0,1,0,1,1,1,1)
test <- c(11:15)

mod <- svm(y ~ x, kernel = "linear", gamma = 1, cost = 2, type="C-classification")

predict(mod, newdata = test)

结果如下:

> predict(mod, newdata = test)
1 2 3 4 <NA> <NA> <NA> <NA> <NA> <NA>
0 0 0 0 0 1 1 1 1 1

有人能解释一下为什么predict()只给出训练样本(x,y)的拟合值而不关心测试数据吗?

非常感谢您的帮助!

理查德

最佳答案

看起来这是因为您滥用了 svm() 的公式接口(interface)。通常,人们会提供一个数据框或类似对象,在其中搜索公式中的变量。如果您不这样做,通常也没关系,即使这不是最佳实践,但当您想要预测时,将变量放入数据框中会让您陷入困惑。它返回训练数据的原因是因为您没有提供 newdata 一个包含名为 x 组件的对象。因此它无法找到新数据x,因此返回拟合值。这对于我所知道的大多数 R 预测 方法来说都很常见。

解决方案是 i) 将训练数据放入数据框中,并将其作为 data 参数传递给 svm,并且 ii) 提供一个新的数据框,其中包含x(从test)到predict()。例如:

> DF <- data.frame(x = x, y = y)
> mod <- svm(y ~ x, data = DF, kernel = "linear", gamma = 1, cost = 2,
+ type="C-classification")
> predict(mod, newdata = data.frame(x = test))
1 2 3 4 5
1 1 1 1 1
Levels: 0 1

关于r - Predict.svm 不预测新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4462118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com