Этот код возвращает и отображает истинную положительную скорость, ложную положительную скорость, истинное положительное число, ложное положительное число, основанное на прогнозных и истинных значениях:
def get_all_stats(y_true , y_pred) :
def perf_measure(y_true, y_pred):
TP = 0
FP = 0
TN = 0
FN = 0
for i in range(len(y_true)):
if y_true[i] == 1 and y_pred[i] == 1:
TP += 1
if y_pred[i]==1 and y_true[i]!=y_pred[i]:
FP += 1
if y_true[i]== 0 and y_pred[i]==0:
TN += 1
if y_pred[i]==0 and y_true[i] != y_pred[i]:
FN += 1
if(FP == 0) :
FPR = 0;
else :
FPR = FP / (FP + TN)
if(TP == 0) :
TPR = 0
else :
TPR = TP / (TP + FN)
return(TN , FPR, FN , TPR , TP , FP)
tn, fpr, fn, tpr, tp , fp = perf_measure(y_true, y_pred)
return tpr , fpr , tp , fp
tpr1 , fpr1 , tp1 , fp1 = get_all_stats(y_true=[1,1,1] , y_pred=[1,0,0])
tpr2 , fpr2 , tp2 , fp2 = get_all_stats(y_true=[1,0,1] , y_pred=[0,1,0])
tpr3 , fpr3 , tp3 , fp3 = get_all_stats(y_true=[0,0,0] , y_pred=[1,0,0])
plt.figure(figsize=(12,6))
plt.tick_params(labelsize=12)
print(tpr1 , fpr1 , tp1 , fp1)
print(tpr2 , fpr2 , tp2 , fp2)
print(tpr3 , fpr3 , tp3 , fp3)
plt.plot([fpr1,fpr2,fpr3], [tpr1 , tpr2, tpr3], color='blue', label='')
plt.ylabel("TPR",fontsize=16)
plt.xlabel("FPR",fontsize=16)
plt.legend()
Полученный результирующий график ROC:
Чтобы имитировать три разных ложноположительных и истинно положительных показателя и разные пороговые значения, рассчитайте эти значения, реализовав функцию get_all_stats
три раза с разными
tpr1 , fpr1 , tp1 , fp1 = get_all_stats(y_true=[1,1,1] , y_pred=[1,0,0])
tpr2 , fpr2 , tp2 , fp2 = get_all_stats(y_true=[1,0,1] , y_pred=[0,1,0])
tpr3 , fpr3 , tp3 , fp3 = get_all_stats(y_true=[0,0,0] , y_pred=[1,0,0])
Существует 9 случаев, которые должны быть классифицированы как 1 или 0, где значения истинности: [1,1,1,1,0,1,0,0,0]
На пороге 1 прогнозируемые значения [1,0,0]
, где значения истинности на этом пороге[1,1,1]
.
На пороге 2 прогнозируемые значения [0,1,0]
, где значения истинности на этом пороге [1,0,1]
.
На пороге 3 прогнозируемые значения [1,0,0]
, где значения истинностипри этом пороге [0,0,0]
.
Как видно, сгенерированный график полученного классификатора отличается от «типичных» кривых ROC:
При первом снижении, а затем снижаются ложноположительные и истинно положительные показатели, в результате чего линия «возвращается».Правильно ли я реализовал кривую ROC?Можно ли рассчитать AUC для этой кривой?