如何select R 中分类器的最佳概率阈值?

How to select the optimal probability threshold for classifiers in R?

我正在 R 中创建二进制 class 运算符,但我不知道 select 用于 class 分离的概率阈值是多少。 代码如下:

tune.out <-
    tune(svm, X0 ~ ., 
         data = data.frame(y = as.vector(class_train), model_train),
         kernel = "polynomial", ranges = list(cost = c(0.001,0.01,0.1, 1,5,10,100)))
  
  bestmod <-
    tune.out$best.model
  
  Index <-
    order(class_train, decreasing = FALSE)
  
  
  SVMfit_Var <-
    svm(model_train[Index, ], class_train[Index, ],
        type= "eps-regression",kernel = "polynomial", cost = bestmod$cost, gamma=bestmod$gamma, epsilon = bestmod$epsilon, scale=F)
  
  
  preds1 <-
    predict(SVMfit_Var, Xtest, probability = TRUE)
  preds1 <-
    attr(preds1, "probabilities")[,1]
  
  prediction <- predict(SVMfit_Var, model_valid, probability = T)
  xtab <- table(t(class_valid), prediction)
  inf.pred <- rep(0, dim(model_valid)[1])
  inf.pred[prediction > 0.5] = 1
  
  performance <- Conf(table(inf.pred, t(class_valid)))

现在我的阈值是 0.5。问题是计算出来的概率都是0.1.

显示的数值是0.1,虽然好像有小数没有显示。 在这种情况下,索引值 1-145 是 class 0,而 145-180 class 1.

如何为 classifier 设置最佳阈值?

一种方法是根据训练数据中看到的正 classes 的比例来设置阈值。例如,如果训练数据中 20% 的案例为正 class,那么您可以在测试数据中选择相同比例的案例,class将概率最高的 20% 确定为正.

这种方法是否合适实际上取决于您的 classification 问题。该模型可以告诉您一个案例是正面还是负面的概率——您如何决定使用这些概率进行 class 化是一个需要在建模之外考虑的问题,并且实际上取决于 mis-classifying 在您的特定情况下。