机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线

简介: 机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线

前言


内容接上一篇机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线_fanstuck的博客-CSDN博客_python鸢尾花混淆矩阵

上篇文章提到的这篇文章不做过多叙述。


提示:以下是本篇文章正文内容,下面案例可供参考


一、ROC与AUC


很多学习器是为了测试样本产生的一个实值或概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阈值则分为正类,否则为反类。主要看需要建立的模型侧重于想用在测试数据的泛华性能的好坏。排序本身的质量好坏体系了综合考虑学习去在不同任务下的“期望泛化性能”的好坏。ROC曲线则是从这个角度出发来研究学习器泛化性能。


1.ROC


ROC的全称是“受试者工作特征”曲线,与P-R曲线相似。与P-R曲线使用查准率、查全率为纵、横坐标不同,ROC曲线的纵轴是“真正例率”{简称TPR),横轴是“假正例率”(简称FPR)二者分别定义为:


image.png

ROC曲线图以真正例率为Y轴,假正例率为X轴。


2.AUC


进行检验判定ROC曲线性能的合理判据是比较ROC曲线下的面积,即AUC。从定义知AUC可通过对ROC曲线下各部分的面积求和而得,AUC可估算为:

image.png

从形式化看,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()

效果

20200926194511390.png


总结


下篇为KNN近邻算法

目录
相关文章
|
机器学习/深度学习 算法 知识图谱
机器学习常用距离度量
机器学习常用距离度量
640 0
|
数据可视化 算法 JavaScript
【Python数据挖掘】数据可视化及数据对象的相似性度量算法详解(超详细 附源码)
【Python数据挖掘】数据可视化及数据对象的相似性度量算法详解(超详细 附源码)
771 0
|
数据可视化 数据挖掘 BI
python数据分析和可视化【2】鸢尾花数据分析
python数据分析和可视化【2】鸢尾花数据分析
634 0
|
机器学习/深度学习 Python
机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况
本文介绍了机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况,而ROC曲线则通过假正率和真正率评估二分类模型性能。文章还提供了Python中的具体实现示例,展示了如何计算和使用这两种工具来评估模型。
833 8
|
机器学习/深度学习 算法 PyTorch
用Python实现简单机器学习模型:以鸢尾花数据集为例
用Python实现简单机器学习模型:以鸢尾花数据集为例
1320 1
|
机器学习/深度学习 算法 搜索推荐
机器学习入门(四):距离度量方法 归一化和标准化
机器学习入门(四):距离度量方法 归一化和标准化
|
机器学习/深度学习 算法 数据挖掘
【机器学习】聚类算法中的距离度量有哪些及公式表示?
聚类算法中常用的距离度量方法及其数学表达式,包括欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、余弦相似度等多种距离和相似度计算方式。
1570 1
|
机器学习/深度学习 算法 数据挖掘
【机器学习】为什么K-means算法使用欧式距离度量?
【5月更文挑战第11天】【机器学习】为什么K-means算法使用欧式距离度量?
|
机器学习/深度学习 SQL 数据可视化
python揭秘决策树:如何每次都精确预测鸢尾花的种类
python揭秘决策树:如何每次都精确预测鸢尾花的种类
|
机器学习/深度学习 Python
【Python 机器学习专栏】混淆矩阵与 ROC 曲线分析
【4月更文挑战第30天】本文介绍了机器学习中评估模型性能的两种工具——混淆矩阵和ROC曲线。混淆矩阵显示了模型在不同类别上的预测情况,包括真正例、假正例、真反例和假反例,帮助评估模型错误类型和数量。ROC曲线则通过假正率和真正率展示了模型的二分类性能,曲线越接近左上角,性能越好。文章还提供了Python中计算混淆矩阵和ROC曲线的代码示例,强调它们在模型选择、参数调整和理解模型行为中的应用价值。
752 0

推荐镜像

更多