Spaces:
Running
Running
| from basic_metrics import metricor | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| import matplotlib.patches as mpatches | |
| def plotFig(data, label, score, slidingWindow, fileName, modelName, plotRange=None): | |
| grader = metricor() | |
| R_AUC, R_AP, R_fpr, R_tpr, R_prec = grader.RangeAUC(labels=label, score=score, window=slidingWindow, plot_ROC=True) # | |
| L, fpr, tpr= grader.metric_new(label, score, plot_ROC=True) | |
| precision, recall, AP = grader.metric_PR(label, score) | |
| range_anomaly = grader.range_convers_new(label) | |
| # print(range_anomaly) | |
| # max_length = min(len(score),len(data), 20000) | |
| max_length = len(score) | |
| if plotRange==None: | |
| plotRange = [0,max_length] | |
| fig3 = plt.figure(figsize=(12, 10), constrained_layout=True) | |
| gs = fig3.add_gridspec(3, 4) | |
| f3_ax1 = fig3.add_subplot(gs[0, :-1]) | |
| plt.tick_params(labelbottom=False) | |
| plt.plot(data[:max_length],'k') | |
| for r in range_anomaly: | |
| if r[0]==r[1]: | |
| plt.plot(r[0],data[r[0]],'r.') | |
| else: | |
| plt.plot(range(r[0],r[1]+1),data[range(r[0],r[1]+1)],'r') | |
| # plt.xlim([0,max_length]) | |
| plt.xlim(plotRange) | |
| # L = [auc, precision, recall, f, Rrecall, ExistenceReward, | |
| # OverlapReward, Rprecision, Rf, precision_at_k] | |
| f3_ax2 = fig3.add_subplot(gs[1, :-1]) | |
| # plt.tick_params(labelbottom=False) | |
| L1 = [ '%.2f' % elem for elem in L] | |
| plt.plot(score[:max_length]) | |
| plt.hlines(np.mean(score)+3*np.std(score),0,max_length,linestyles='--',color='red') | |
| plt.ylabel('score') | |
| # plt.xlim([0,max_length]) | |
| plt.xlim(plotRange) | |
| #plot the data | |
| f3_ax3 = fig3.add_subplot(gs[2, :-1]) | |
| index = ( label + 2*(score > (np.mean(score)+3*np.std(score)))) | |
| cf = lambda x: 'k' if x==0 else ('r' if x == 1 else ('g' if x == 2 else 'b') ) | |
| cf = np.vectorize(cf) | |
| color = cf(index[:max_length]) | |
| black_patch = mpatches.Patch(color = 'black', label = 'TN') | |
| red_patch = mpatches.Patch(color = 'red', label = 'FN') | |
| green_patch = mpatches.Patch(color = 'green', label = 'FP') | |
| blue_patch = mpatches.Patch(color = 'blue', label = 'TP') | |
| plt.scatter(np.arange(max_length), data[:max_length], c=color, marker='.') | |
| plt.legend(handles = [black_patch, red_patch, green_patch, blue_patch], loc= 'best') | |
| # plt.xlim([0,max_length]) | |
| plt.xlim(plotRange) | |
| f3_ax4 = fig3.add_subplot(gs[0, -1]) | |
| plt.plot(fpr, tpr) | |
| # plt.plot(R_fpr,R_tpr) | |
| # plt.title('R_AUC='+str(round(R_AUC,3))) | |
| plt.xlabel('FPR') | |
| plt.ylabel('TPR') | |
| # plt.legend(['ROC','Range-ROC']) | |
| # f3_ax5 = fig3.add_subplot(gs[1, -1]) | |
| # plt.plot(recall, precision) | |
| # plt.plot(R_tpr[:-1],R_prec) # I add (1,1) to (TPR, FPR) at the end !!! | |
| # plt.xlabel('Recall') | |
| # plt.ylabel('Precision') | |
| # plt.legend(['PR','Range-PR']) | |
| # print('AUC=', L1[0]) | |
| # print('F=', L1[3]) | |
| plt.suptitle(fileName + ' window='+str(slidingWindow) +' '+ modelName | |
| +'\nAUC='+L1[0]+' R_AUC='+str(round(R_AUC,2))+' Precision='+L1[1]+ ' Recall='+L1[2]+' F='+L1[3] | |
| + ' ExistenceReward='+L1[5]+' OverlapReward='+L1[6] | |
| +'\nAP='+str(round(AP,2))+' R_AP='+str(round(R_AP,2))+' Precision@k='+L1[9]+' Rprecision='+L1[7] + ' Rrecall='+L1[4] +' Rf='+L1[8] | |
| ) | |
| def printResult(data, label, score, slidingWindow, fileName, modelName): | |
| grader = metricor() | |
| R_AUC = grader.RangeAUC(labels=label, score=score, window=slidingWindow, plot_ROC=False) # | |
| L= grader.metric_new(label, score, plot_ROC=False) | |
| L.append(R_AUC) | |
| return L | |