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图的案例我就不写了。正常的来说,出来的图形应该是这样的:
在这里插入图片描述

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