一、ROC与AUC
很多学习器是为了测试样本产生的一个实值或概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阈值则分为正类,否则为反类。主要看需要建立的模型侧重于想用在测试数据的泛华性能的好坏。排序本身的质量好坏体系了综合考虑学习去在不同任务下的“期望泛化性能”的好坏。ROC曲线则是从这个角度出发来研究学习器泛化性能。
1.ROC
ROC的全称是“受试者工作特征”曲线,与P-R曲线相似。与P-R曲线使用查准率、查全率为纵、横坐标不同,ROC曲线的纵轴是“真正例率”{简称TPR),横轴是“假正例率”(简称FPR)二者分别定义为:
ROC曲线图以真正例率为Y轴,假正例率为X轴。
2.AUC
进行检验判定ROC曲线性能的合理判据是比较ROC曲线下的面积,即AUC。从定义知AUC可通过对ROC曲线下各部分的面积求和而得,AUC可估算为:
从形式化看,AUC考虑的是样本预测的排序质量,因此它与排序误差有紧密联系。因此存在排序损失。
二、代码实现
形式基本和P-R曲线差不多,只是几个数值要改一下。
代码如下(示例):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
from sklearn import svm, datasets from sklearn.model_selection import train_test_split from sklearn.metrics import roc_curve, auc from itertools import cycle from sklearn.preprocessing import label_binarize #标签二值化LabelBinarizer,可以把yes和no转化为0和1,或是把incident和normal转化为0和1。 import numpy as np from sklearn.multiclass import OneVsRestClassifier iris = datasets.load_iris() # 鸢尾花数据导入 X = iris.data #每一列代表了萼片或花瓣的长宽,一共4列,每一列代表某个被测量的鸢尾植物,iris.shape=(150,4) y = iris.target #target是一个数组,存储了data中每条记录属于哪一类鸢尾植物,所以数组的长度是150,所有不同值只有三个 random_state = np.random.RandomState( 0 ) #给定状态为0的随机数组 y = label_binarize(y, classes = [ 0 , 1 , 2 ]) n_classes = y.shape[ 1 ] n_samples, n_features = X.shape X = np.c_[X, random_state.randn(n_samples, 200 * n_features)] #添加合并生成特征测试数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25 , random_state = 0 ) #根据此模型训练简单数据分类器 classifier = OneVsRestClassifier(svm.SVC(kernel = 'linear' , probability = True , random_state = random_state)) #线性分类支持向量机 y_score = classifier.fit(X_train, y_train).decision_function(X_test) #用一个分类器对应一个类别, 每个分类器都把其他全部的类别作为相反类别看待。 fpr = dict () tpr = dict () roc_auc = dict () for i in range (n_classes): fpr[i], tpr[i], _ = roc_curve(y_test[:, i], y_score[:, i]) #计算ROC曲线面积 roc_auc[i] = auc(fpr[i], tpr[i]) fpr[ "micro" ], tpr[ "micro" ], _ = roc_curve(y_test.ravel(), y_score.ravel()) roc_auc[ "micro" ] = auc(fpr[ "micro" ], tpr[ "micro" ]) import matplotlib.pyplot as plt plt.figure() lw = 2 plt.plot(fpr[ 2 ], tpr[ 2 ], color = 'darkorange' , lw = lw, label = 'ROC curve (area = %0.2f)' % roc_auc[ 2 ]) plt.plot([ 0 , 1 ], [ 0 , 1 ], color = 'navy' , lw = lw, linestyle = '--' ) plt.xlabel( 'FPR' ) plt.ylabel( 'TPR' ) plt.ylim([ 0.0 , 1.0 ]) plt.xlim([ 0.0 , 1.0 ]) plt.legend(loc = "lower right" ) plt.title( "Precision-Recall" ) plt.show() |
效果
以上就是Python机器学习利用鸢尾花数据绘制ROC和AUC曲线的详细内容,更多关于Python数据绘制ROC AUC的资料请关注服务器之家其它相关文章!
原文链接:https://juejin.cn/post/7196975187992068133