【发布时间】:2019-08-02 00:25:28
【问题描述】:
我正在尝试绘制 ROC 曲线来评估隔离森林对乳腺癌数据集的准确性。我从混淆矩阵计算了真阳性率(TPR)和假阳性率(FPR)。但是,我不明白 TPR 和 FPR 是如何以矩阵的形式出现的,而不是单个整数值。而且 ROC 曲线似乎只适用于矩阵形式的 FPR 和 TPR(我也尝试过手动编写计算 FPR 和 TPR 的代码)。
TPR 和 FPR 值是否始终采用矩阵形式?
无论哪种方式,我的 ROC 曲线都是一条直线。为什么会这样?
混淆矩阵:
from sklearn.metrics import confusion_matrix
cnf_matrix = confusion_matrix(y, y_pred_test1)
O/P:
> [[ 5 25]
> [ 21 180]]
True Positive 和 False Positive :(另外,为什么这些值直接取自混淆矩阵?)
F_P = cnf_matrix.sum(axis=0) - np.diag(cnf_matrix)
F_N = cnf_matrix.sum(axis=1) - np.diag(cnf_matrix)
T_P = np.diag(cnf_matrix)
T_N = cnf_matrix.sum() - (FP + FN + TP)
F_P = F_P.astype(float)
F_N = F_N.astype(float)
T_P = T_P.astype(float)
T_N = T_N.astype(float)
O/P:
False Positive [21. 25.] False Negative [25. 21.] True Positive [ 5. 180.] True Negative [180. 5.]
TPR 和 FPR :
tp_rate = TP/(TP+FN)
fp_rate = FP/(FP+TN)
O/P:
TPR : [0.16666667 0.89552239] FPR [0.10447761 0.83333333]
ROC曲线:
from sklearn import metrics
import matplotlib.pyplot as plt
plt.plot(fp_rate,tp_rate)
plt.show()
O/P:
【问题讨论】:
-
当你说矩阵时你想说列表/数组?并且在图表上有两个点,它将永远是一条线......
-
看看内置的sklearn roc_curve 函数可能会有所帮助。你会注意到输出是
fpr,tpr, thresh,也就是说,对于每个阈值,你得到的是真阳性率和假阳性率,而不仅仅是整个预测器的率
标签: python scikit-learn roc outliers auc