问题ROC曲线SVM模拟数据

时间:2016-12-26 06:14:21

标签: r cross-validation svm dataset simulation

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

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)

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

1 个答案:

答案 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")`

In black misclassified points

在我看来,您的数据是完全可分的,基本上您的数据太好了,而且您的模型能够做出完美的预测,也许您可​​以为生成它的公式添加一些噪音。

此外,如果你的测试数据只包含200个条目,很可能它们都不足以使决策边界错误分类,正如我所提到的,我必须生成一个20000点的测试集来获得大约200个错误分类点你在图片中看到了。