广告位联系
返回顶部
分享到

Python机器学习利用鸢尾花数据绘制ROC和AUC曲线

python 来源:互联网 作者:佚名 发布时间:2023-02-09 21:53:23 人浏览
摘要

一、ROC与AUC 很多学习器是为了测试样本产生的一个实值或概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阈值则分为正类,否则为反类。主要看需要建立的模

一、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()

效果


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://juejin.cn/post/7196975187992068133
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计