Я пытаюсь построить кривую 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]]
Правда положительный и ложный положительный: (Кроме того, почему эти значения непосредственно взяты из матрицы путаницы?)
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:
![enter image description here](https://i.stack.imgur.com/evAFT.png)