求r中混淆矩阵的阈值



我正在进行逻辑回归,并制作了一个表示预测概率、实际类别和预测类别的表。如果预测概率大于0.5,则将其分类为1,因此预测类为1。但是我想把阈值从0.5改为另一个值。

我正在考虑找到一个使真阳性率和真阴性率都最大化的阈值。这里我做了一个简单的数据df来演示我想做什么。

df<-data.frame(actual_class=c(0,1,0,0,1,1,1,0,0,1),
predicted_probability=c(0.51,0.3,0.2,0.35,0.78,0.69,0.81,0.31,0.59,0.12),
predicted_class=c(1,0,0,0,1,1,1,0,1,0))

如果我能找到一个阈值,我将使用该值而不是0.5进行分类。我不知道如何找到一个既能使真阳性率和真阴性率最大化的阈值。

你可以很容易地检查一个范围的值:

probs <- seq(0, 1, by=.05)
names(probs) <- probs
results <- sapply(probs, function(x) df$actual_class == as.integer(df$predicted_probability > x))

results是一个10行× 21列的逻辑矩阵,表示预测的类等于实际的类:

colSums(results)   # Number of correct predictions
0 0.05  0.1 0.15  0.2 0.25  0.3 0.35  0.4 0.45  0.5 0.55  0.6 0.65  0.7 0.75  0.8 0.85  0.9 0.95    1 
5    5    5    4    5    5    4    6    6    6    6    7    8    8    7    7    6    5    5    5    5 
predict <- as.integer(df$predicted_probability > .6)
xtabs(~df$actual_class+predict)
#                predict
# df$actual_class 0 1
#               0 5 0
#               1 2 3

你可以看到。6和。65的概率导致8个正确的预测。这个结论是基于你在分析中使用的数据,所以它可能高估了你使用新数据的成功程度。

最新更新