如何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 在您的特定情况下。
我正在 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 在您的特定情况下。