Python繪製ROC圖

本案例以sklearn中自帶的鳶尾花數據集爲例,主要使用sklearn.metric庫中的方法來繪製ROC圖
所用sklearn中函數的方法具體參數可以看官網文檔:
https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_curve.html#sklearn.metrics.roc_curve


環境:python3.7

1.導入相關的包

from sklearn import metrics
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import roc_curve,auc
from sklearn.model_selection import train_test_split
import numpy as np
import matplotlib.pyplot as plt

2.創建一個決策樹分類器

clf = DecisionTreeClassifier(random_state=0)

3.導入sklearn自帶的鳶尾花數據集

iris=load_iris()
x=iris.data
y=iris.target

4.數據預處理
因爲原來的鳶尾花數據集分類有3種分類標籤,而在做ROC模型評估時只能判斷二分類,因此在這裏我們需要先去掉第3種,將1和2分類挑出來

x,y=x[y!=2],y[y!=2]

5.接下來我們將數據集拆分成訓練集和測試集,原來的數據集體積很龐大,在這裏我們可以設定test_size來限定使用的數據集大小,這裏設定爲0.2

X_train, X_test, y_train, y_test = train_test_split(x,y,stratify=y,test_size=0.2)
y_score=clf.fit(X_train,y_train).predict_proba(X_test)

通過roc_curve方法來獲得FPR,TPR(負樣本率和正樣本率)
roc_curve的第一個參數是測試樣本,第二個參數是正樣本的概率,第三個參數是正樣本的值
比如:測試樣本中數據集是=[0,1,1,1,0,0],概率=[0,0.5,0.3,0.2,0.1],正樣本的值pos_label=1

fpr,tpr,thre = roc_curve(y_test,y_score[:,1],pos_label=1)
roc_auc = metrics.auc(fpr,tpr)
#平均ROC曲線的兩個參數
mean_tpr=0
mean_fpr=np.linspace(0,1,100)

繪製ROC圖

plt.figure(figsize=(10,10))
plt.plot(fpr,tpr,color='black',
         label='ROC curve(area = %0.2f)'% roc_auc)
plt.plot([0,1],[0,1],
         color='red',
         linestyle='--')
plt.show()

效果圖:

在這裏插入圖片描述
驚訝的發現居然是一個三角形!
其實不是啦哈哈哈這邊會出現這樣的效果是因爲sklearn中自帶的鳶尾花數據集太過平整了,一般在練習時爲了效果會給它增加一些噪聲,但是這裏作爲繪製ROC圖的案例我就不寫了。正常的來說,出來的圖形應該是這樣的:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章