我正在进行逻辑回归,并制作了一个表示预测概率、实际类别和预测类别的表。如果预测概率大于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个正确的预测。这个结论是基于你在分析中使用的数据,所以它可能高估了你使用新数据的成功程度。