机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线
本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、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() ```
效果
- 一文速学数模-集成预测模型Boost(提升方法)原理以及框架 模型速览
- Python-sklearn机器学习之旅:我的第一个机器学习实战项目
- 斯皮尔曼相关(spearman)相关性分析一文详解 python实例代码
- sklearn预测评估指标计算详解:准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1score
- 机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线
- Pandas数据分析:快速图表可视化各类操作详解 实例代码(一)
- Pandas数据分析:快速图表可视化各类操作详解 实例代码(二)
- Pandas数据分析:处理文本数据(str/object)各类操作 代码一文详解(一)
- 决策树(Decision Tree)算法详解及python实现
- PCA(主成分分析法)原理以及应用 代码实现
- 机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线
- 深度学习面试常见问题
- 数据预处理归一化详细解释
- 一文速学-熵权法实战确定评价指标权重
- 机器学习:基于概率的朴素贝叶斯分类器详解--Python实现以及项目实战
- 机器学习:贝叶斯分类器详解(一)-贝叶斯决策理论与朴素贝叶斯
- 秩和比综合评价法(RSR)详解及Python实现和应用
- SVM(Support Vector Machines)支持向量机算法原理以及应用详解 Python代码实现
- 机器学习:基于概率的朴素贝叶斯分类器详解--Python实现以及项目实战
- 机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线