天天看點

python 繪制ROC圖像

# -*- coding: utf-8 -*-
import numpy as np  
import matplotlib.pyplot as plt  
from sklearn import svm, datasets  
from sklearn.metrics import roc_curve, auc  ###計算roc和auc  
from sklearn import cross_validation  
from pandas import DataFrame,Series
import pandas as pd
import os
import re

def ROC(path):
    df=pd.read_csv(path) 
    y_test=df['label']
    y_score=df['probability'] 
    ## Compute ROC curve and ROC area for each class  
    fpr,tpr,threshold = roc_curve(y_test, y_score) ###計算真正率和假正率  
    roc_auc = auc(fpr,tpr) ###計算auc的值
    return fpr,tpr,roc_auc

auc_list=[];tf_list=[]
plt.figure()
lw = 2  
plt.figure(figsize=(10,10))
for root, dirs, files in os.walk("C:/Users/dell/Desktop/ROC/", topdown=False):
    for name in files:
        dir_f=os.path.join(root, name)
        if re.search('val_predict.csv',dir_f):
            fpr,tpr,roc_auc=ROC(path=dir_f)
            tf=re.split(r'\\',re.split('/',dir_f)[-1])[-2]
            print (tf)
            tf_list.append(tf)
            auc_list.append(roc_auc)
            plt.plot(fpr, tpr, color='deepskyblue',lw=lw,linewidth=0.5) ###假正率為橫坐标,真正率為縱坐标做曲線  label='ROC curve (area = %0.2f)' % roc_auc 
plt.plot([0, 1], [0, 1], color='silver', lw=lw, linestyle='--')  
plt.xlim([-0.0, 1.0])  
plt.ylim([0.0, 1.0])  
plt.xlabel('False Positive Rate')  
plt.ylabel('True Positive Rate')  
#plt.title('Receiver operating characteristic example')  
plt.legend(loc="lower right")
plt.savefig('C:/Users/dell/Desktop/ROC/roc.eps',dpi=600,bbox_inches='tight')  
plt.show()

plt.figure() 
plt.figure(figsize=(1,3))
plt.ylim([0.75, 1.0])
#plt.boxplot(auc_list,whis=1.5,
#            boxprops = {'color':'black','color':'deepskyblue','linewidth':2}, # 設定箱體屬性,填充色和邊框色  
#            flierprops = {'marker':'.','markerfacecolor':'black','color':'black'}, # 設定異常值屬性,點的形狀、填充色和邊框色  
#            meanprops = {'marker':'D','markerfacecolor':'indianred'}, # 設定均值點的屬性,點的形狀、填充色  
#            medianprops = {'linestyle':'-','color':'deepskyblue','linewidth':2})
f=plt.boxplot(auc_list,widths=0.5,flierprops = {'marker':'o','markerfacecolor':'deepskyblue','color':'white'})
for box in f['boxes']:
    box.set( color='deepskyblue', linewidth=2)
    box.set( color = 'deepskyblue' )
for whisker in f['whiskers']:
    whisker.set(color='deepskyblue', linewidth=2)
for cap in f['caps']:
    cap.set(color='deepskyblue', linewidth=3)
for median in f['medians']:
    median.set(color='deepskyblue', linewidth=3)
#for flier in f['fliers']:
#    flier.set(marker='.', color='deepskyblue', alpha=0.8)
plt.xticks([])
plt.ylabel('AUC')
plt.savefig('C:/Users/dell/Desktop/ROC/AUC.eps',dpi=600,bbox_inches='tight')
plt.show()
df_auc=DataFrame()
df_auc['AUC']=Series(auc_list,index=tf_list)
df_auc.to_csv('C:/Users/dell/Desktop/ROC/AUC.csv') 
           

繼續閱讀