我正在处理模拟数据,但我遇到了一些问题。我正在尝试修复参数。
library(e1071)
library(ROCR)
set.seed(10)
#function to generate data
generate.data <- function(n){
x2 <- runif(n)
x1 <- runif(n)
y <- as.factor(ifelse((x2>2*x1)|(x2>(2-2*x1)),-1,1))
return(data.frame(x1,x2,y))
}
#Training and test: n = 500
dtrain <- generate.data(500)
dtest <- generate.data(200)
我在训练集上进行了交叉验证,我使用了径向内核,参数cost=1000
和gamma=0.1
。
tune.out = tune(svm, y~x1+x2, data=dtrain, kernel="radial",
ranges=list(cost=c(0.1,1,10,100,1000), gamma=c(0.01,0.1,1,10,100)))
svmbestmod = svm(y~x1+x2, data=dtrain, kernel="radial", cost=1000, gamma=0.1,
probability=TRUE)
我想在我的测试集上预测,但我有0错误。我不明白。
yrad.test <- predict(svmbestmod, dtest)
#confusion matrix
mc.rad <- table(dtest$y, yrad.test)
print(mc.rad)
#Error
err.rad <- 1-sum(diag(mc.rad))/sum(mc.rad)
print(err.rad)
如果有人能帮助我理解我的错误或错误,那就太好了。
答案 0 :(得分:0)
我在测试集中放了20000点
# First I isolate any misclassified points in the test set
library(dplyr)
errors <- cbind(dtest,yrad.test) %>% dplyr::filter(y != yrad.test)
# Then I plot all the points in the train set,
# coloured based on thier respective class,
# while misclassified entries in the test set are shown in black
library(ggplot2)
p <- ggplot2::ggplot(data = dtrain, aes(x1,x2)) +
geom_point(aes(colour = factor(y)) )+
geom_point(data = errors,colour = "black")`
在我看来,您的数据是完全可分的,基本上您的数据太好了,而且您的模型能够做出完美的预测,也许您可以为生成它的公式添加一些噪音。
此外,如果你的测试数据只包含200个条目,很可能它们都不足以使决策边界错误分类,正如我所提到的,我必须生成一个20000点的测试集来获得大约200个错误分类点你在图片中看到了。