python绘制ROC曲线,计算AUC

目录

*

+ 一:前言
+
* 🎈ROC曲线
* 🎈AUC
* 🎈数据集:car.data
+ 二:绘制ROC曲线
+
* 1. 二值化处理(one-hot编码)
* 2. 计算fpr,tpr ,auc
* 3. 绘制曲线图demo
* 4. 结果
+ 三:全部Demo

一:前言

🎈ROC曲线

  • ROC曲线(receiver operating characteristic curve),
  • 是反映灵敏性和特效性连续变量的综合指标;
  • 是用构图法揭示敏感性和特异性的相互关系;
  • 它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性;
  • ROC曲线是根据一系列不同的二分类方式(分界值或决定阈),以真正例率(True Positive Rate,TPR 也就是灵敏度)为纵坐标,假正例率(False Positive Rate,FPR,1-特效性)为横坐标绘制的曲线。

🎈AUC

  • AUC(Area Under Curve)被定义为ROC曲线下与坐标轴围成的面积;
  • 面积的数值不会大于1;
  • 又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间;
  • AUC越接近1.0,检测方法真实性越高;等于0.5时,则真实性最低,无应用价值。

🎈数据集:car.data

UCI Car Evaluation Data Set

6个属性及标签介绍如图(多分类问题):

python绘制ROC曲线,计算AUC

; 二:绘制ROC曲线

绘制ROC曲线,需要fpr(x轴)、tpr(y轴)

  • fpr:假正例率
  • tpr:真正例率

知乎截图(可参考学习~):ROC曲线简介

python绘制ROC曲线,计算AUC

; 1. 二值化处理(one-hot编码)

如果标签是二值,跳过这一步;如果不是,需要二值化处理(one-hot编码)
⭐roc_auc_score是根据真实值(必须是二值的)。
所以需要对标签值作如下二值化处理

n_class = len(data['accept'].unique())
y_test_one_hot = label_binarize(y_test, classes=np.arange(n_class))

y_test_one_hot_hat = clf.predict_proba(x_test)

2. 计算fpr,tpr ,auc

根据预测值计算出AUC值(预测值类型:可以是0/1,也可以是proba值)

  • 得到proba预测值 (有预测值跳过这一步)
y_test_one_hot_hat = clf.predict_proba(x_test)

  • 计算fpr、tpr
from sklearn import metrics

fpr, tpr, _ = metrics.roc_curve(y_test_one_hot.ravel(), y_test_one_hot_hat.ravel())

  • 计算不同average下的AUC值
from sklearn import metrics

print ('Micro AUC:\t', metrics.auc(fpr, tpr))
print( 'Micro AUC(System):\t', metrics.roc_auc_score(y_test_one_hot, y_test_one_hot_hat, average='micro'))

auc = metrics.roc_auc_score(y_test_one_hot, y_test_one_hot_hat, average='macro')
print ('Macro AUC:\t', auc)

3. 绘制曲线图demo

(有了fpr、tpr、auc直接copy就行~)

import matplotlib.pyplot as plt

'''
计算获得fpr、tpr、auc,上述步骤中有
假装已经得到~
'''

plt.figure(figsize=(8, 7), dpi=80, facecolor='w')
plt.xlim((-0.01, 1.02))
plt.ylim((-0.01, 1.02))
plt.xticks(np.arange(0, 1.1, 0.1))
plt.yticks(np.arange(0, 1.1, 0.1))
plt.plot(fpr, tpr, 'r-', lw=2, label='AUC=%.4f' % auc)
plt.legend(loc='lower right')
plt.xlabel('False Positive Rate', fontsize=14)
plt.ylabel('True Positive Rate', fontsize=14)
plt.grid(b=True, ls=':')
plt.title(u'DecisionTree ROC curve And  AUC', fontsize=18)
plt.show()

4. 结果

python绘制ROC曲线,计算AUC

; 三:全部Demo

(Demo来自实验作业呀~)

import pandas as pd
import numpy as np
from sklearn.tree import DecisionTreeClassifier
from sklearn import metrics
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import label_binarize
import matplotlib.pyplot as plt

data = pd.read_csv('car.data', header=None)
print(data.shape)
n_columns = len(data.columns)
columns = ['buy', 'maintain', 'doors', 'persons', 'boot', 'safety', 'accept']
new_columns = dict(zip(np.arange(n_columns), columns))
data.rename(columns=new_columns, inplace=True)
for col in columns:

    data[col] = pd.Categorical(data[col]).codes

x = data.loc[:, columns[:-1]]
y = data['accept']
x, x_test, y, y_test = train_test_split(x, y, test_size=0.3)
clf = DecisionTreeClassifier(criterion='gini', max_depth=12, min_samples_split=5, max_features=5)
clf.fit(x, y)
y_hat = clf.predict(x)
print('训练集精确度:', metrics.accuracy_score(y, y_hat))
y_test_hat = clf.predict(x_test)
print('测试集精确度:', metrics.accuracy_score(y_test, y_test_hat))
n_class = len(data['accept'].unique())
y_test_one_hot = label_binarize(y_test, classes=np.arange(n_class))
y_test_one_hot_hat = clf.predict_proba(x_test)

fpr, tpr, _ = metrics.roc_curve(y_test_one_hot.ravel(), y_test_one_hot_hat.ravel())
print('Micro AUC:\t', metrics.auc(fpr, tpr))
print('Micro AUC(System):\t', metrics.roc_auc_score(y_test_one_hot, y_test_one_hot_hat, average='micro'))

auc = metrics.roc_auc_score(y_test_one_hot, y_test_one_hot_hat, average='macro')
print('Macro AUC:\t', auc)

plt.figure(figsize=(8, 7), dpi=80, facecolor='w')
plt.xlim((-0.01, 1.02))
plt.ylim((-0.01, 1.02))
plt.xticks(np.arange(0, 1.1, 0.1))
plt.yticks(np.arange(0, 1.1, 0.1))
plt.plot(fpr, tpr, 'r-', lw=2, label='AUC=%.4f' % auc)
plt.legend(loc='lower right')
plt.xlabel('False Positive Rate', fontsize=14)
plt.ylabel('True Positive Rate', fontsize=14)
plt.grid(b=True, ls=':')
plt.title(u'DecisionTree ROC curve And AUC', fontsize=18)
plt.show()

Original: https://blog.csdn.net/weixin_45426939/article/details/120967776
Author: 卅拓
Title: python绘制ROC曲线,计算AUC

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/617575/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球