问题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=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)
如果有人能帮助我理解我的错误或出了什么问题,那就太好了。
我在测试集中放了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 个错误分类点。
我正在处理模拟数据,但遇到了一些问题。我正在尝试修复参数。
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)
如果有人能帮助我理解我的错误或出了什么问题,那就太好了。
我在测试集中放了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 个错误分类点。