python机器学习利用鸢尾花数据绘制roc和auc曲线-kb88凯时官网登录

来自:网络
时间:2023-05-26
阅读:
免费资源网 - https://freexyz.cn/
目录

一、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曲线差不多,只是几个数值要改一下。

代码如下(示例):

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://freexyz.cn/
返回顶部
顶部
网站地图