问题ROC曲线SVM模拟数据

Problem ROC curves SVM simulated data

我正在处理模拟数据,但遇到了一些问题。我正在尝试修复参数。

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=1000gamma=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)

如果有人能帮助我理解我的错误或出了什么问题,那就太好了。

我在测试集中放了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 个条目,则很可能其中 none 个条目足够接近决策边界而被错误分类,正如我提到的,我必须生成一个包含 20000 个点的测试集得到你在图片中看到的大约 200 个错误分类点。