我正在做一个家庭作业,要求我使用支持向量机上的引导程序来估计类概率。我已经做到了。接下来,我被要求使用这些概率和真实的测试集标签来绘制这个 SVM 模型的 ROC 曲线(使用包 e1071 和 ROCR)。我挣扎的是如何使用这些概率来构造 ROCR::prediction 对象,我需要构造一个 ROCR::performance 对象,我需要绘制 ROC 曲线。
我觉得我真的被困住了。我是否需要使用这些引导类概率来创建新的 SVM?如果是这样,怎么做?如果不是,我如何从这些类概率中获得 ROC 曲线?
一个可重现的例子:
set.seed(123)
library(e1071)
library(ROCR)
library(purrr)
### make some data
category_labels <- sample(c(-1, 1), 1000))
predictor1 <- rnorm(1000, 0, 0.1)
predictor2 <- rnorm(1000, 0, 0.1)
my_df <- as.data.frame(cbind(category_labels, predictor1, predictor2))
### 50/50 training/testing split
train <- sample(nrow(my_df), 500)
df_train <- my_df[train,]
df_test <- my_df[-train,]
### make 200 bootstrap datasets
df_train_boot <- replicate(200, df_train[sample(500, 500, T),], simplify = F)
### make helper function for bootstrap
calculate_class_prob <- function(x){
tmp_fit <- svm(category_labels ~ ., data = x, kernel = "radial", cost = 0.1)
tmp_pred <- predict(tmp_fit, newdata = df_test)
return(tmp_pred)
}
### Run bootstrap
bootstrap_class_prob <- map_dfc(.x = df_train_boot, .f = calculate_class_prob)
### Get class probability
minusones <- sum(unlist(lapply(lapply(bootstrap_class_prob, table), "[[", 1)))/200/NROW(bootstrap_class_prob)
ones <- sum(unlist(lapply(lapply(bootstrap_class_prob), "[[", 2)))/200/NROW(bootstrap_class_prob)