0

我正在做一个家庭作业,要求我使用支持向量机上的引导程序来估计类概率。我已经做到了。接下来,我被要求使用这些概率和真实的测试集标签来绘制这个 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)
4

0 回答 0