python 多分类 recall_python实现二分类和多分类的ROC曲线教程

本文介绍如何使用Python计算并绘制ROC曲线,包括二分类问题的ROC曲线。通过实例展示了从数据预处理到模型预测,再到计算精度、召回率、F1分数和准确率的过程,并绘制ROC曲线,最后计算AUC值。
摘要由CSDN通过智能技术生成

基本概念

precision:预测为对的当中,原本为对的比例(越大越好,1为理想状态)

recall:原本为对的当中,预测为对的比例(越大越好,1为理想状态)

F-measure:F度量是对准确率和召回率做一个权衡(越大越好,1为理想状态,此时precision为1,recall为1)

accuracy:预测对的(包括原本是对预测为对,原本是错的预测为错两种情形)占整个的比例(越大越好,1为理想状态)

fp rate:原本是错的预测为对的比例(越小越好,0为理想状态)

tp rate:原本是对的预测为对的比例(越大越好,1为理想状态)

ROC曲线通常在Y轴上具有真阳性率,在X轴上具有假阳性率。这意味着图的左上角是“理想”点 - 误报率为零,真正的正率为1。这不太现实,但它确实意味着曲线下面积(AUC)通常更好。

二分类问题:ROC曲线

from __future__ import absolute_import

from __future__ import division

from __future__ import print_function

import time

start_time = time.time()

import matplotlib.pyplot as plt

from sklearn.metrics import roc_curve

from sklearn.metrics import auc

import numpy as np

from sklearn.model_selection import train_test_split

from sklearn.metrics import recall_score,accuracy_score

from sklearn.metrics import precision_score,f1_score

from keras.optimizers import Adam,SGD,sgd

from keras.models import load_model

print('读取数据')

X_train = np.load('x_train-rotate_2.npy')

Y_train = np.load('y_train-rotate_2.npy')

print(X_train.shape)

print(Y_train.shape)

print('获取测试数据和验证数据')

X_train, X_valid, Y_train, Y_valid = train_test_split(X_train, Y_train, test_size=0.1, random_state=666)

Y_train = np.asarray(Y_train,np.uint8)

Y_valid = np.asarray(Y_valid,np.uint8)

X_valid = np.array(X_valid, np.float32) / 255.

print('获取模型')

model = load_model('./model/InceptionV3_model.h5')

opt = Adam(lr=1e-4)

model.compile(optimizer=opt, loss='binary_crossentropy')

print("Predicting")

Y_pred = model.predict(X_valid)

Y_pred = [np.argmax(y) for y in Y_pred] # 取出y中元素最大值所对应的索引

Y_valid = [np.argmax(y) for y in Y_valid]

# micro:多分类

# weighted:不均衡数量的类来说,计算二分类metrics的平均

# macro:计算二分类metrics的均值,为每个类给出相同权重的分值。

precision = precision_score(Y_valid, Y_pred, average='weighted')

recall = recall_score(Y_valid, Y_pred, average='weighted')

f1_score = f1_score(Y_valid, Y_pred, average='weighted')

accuracy_score = accuracy_score(Y_valid, Y_pred)

print("Precision_score:",precision)

print("Recall_score:",recall)

print("F1_score:",f1_score)

print("Accuracy_score:",accuracy_score)

# 二分类 ROC曲线

# roc_curve:真正率(True Positive Rate , TPR)或灵敏度(sensitivity)

# 横坐标:假正率(False Positive Rate , FPR)

fpr, tpr, thresholds_keras = roc_curve(Y_valid, Y_pred)

auc = auc(fpr, tpr)

print("AUC : ", auc)

plt.figure()

plt.plot([0, 1], [0, 1], 'k--')

plt.plot(fpr, tpr, label='Keras (area = {:.3f})'.format(auc))

plt.xlabel('False positive rate')

plt.ylabel('True positive rate')

plt.title('ROC curve')

plt.legend(loc='best')

plt.savefig("../images/ROC/ROC_2分类.png")

plt.show()

print("--- %s seconds ---" % (time.time() - start_time))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值