我假设您在集合 {0,1} 中有二元观察。
您可以使用 logit 函数将 phat 变量中的预测值转换为 [0, 1] 范围:
phat_new = exp(phat)/(1+exp(phat))
现在,您知道预测值 phat_new、观察值的真实值 val_y_matrix 以及验证数据集中 1 的百分比 p 是多少。绘制 ROC 的一种方法如下:
修复 t。这是模型的截止阈值(在 [0,1] 中)。计算以下内容:
# percentage of 1 observations in the validation set,
p = length(which(val_y_matrix==1))/length(val_y_matrix)
# probability of the model predicting 1 while the true value of the observation is 0,
p_01 = sum(1*(phat_new>=t & val_y_matrix==0))/dim(val_x_matrix)[1]
# probability of the model predicting 1 when the true value of the observation is 1,
p_11 = sum(1*(phat_new>=t & val_y_matrix==1))/dim(val_x_matrix)[1]
# probability of false-positive,
p_fp = p_01/(1-p)
# probability of true-positive,
p_tp = p_11/p
# plot the ROC,
plot(p_fp, p_tp)
我想知道是否有更好的方法来做到这一点。例如,如果您使用分类树,您可以将损失矩阵作为模型的输入,您将获得的模型将根据损失矩阵的成本比而有所不同。这意味着通过改变成本比,你会得到不同的模型,不同的模型将是 ROC 曲线上的不同点。