PR曲线以及ROC曲线的绘制
机器学习基本参数的学习以及PR曲线以及ROC曲线的绘制
基本参数
**过拟合:**学习器把训练样本训练的太好了,把训练样本自身一些特点当成所有潜在样本都具有的一些性质。(用于评估模型的泛化能力)
造成的原因:
算法学习能力比较强
怎么解决呢?
增加训练种类、增加训练集(训练集多了,总不可能全学会了吧)
**欠拟合:**学习器训练的不太好,一般性质都没训练出来。(用于评估模型的泛化能力)
造成的原因:
算法学习能力低下
怎么解决呢?
优化算法、增大训练次数(我算法好一点学多一点、或者我不搞算法,我多两次总会好点)
直观比较如下图:
**性能度量:**衡量模型泛化能力的评价标准。
错误率: 分类错误的样本数量占样本总数的比例。
精度: 预测正确的样本数量占样本总数的比例。
**查准率:**正确预测的样本数量占预测正确的样本的比例 (单位1:预测正确的样本数量)
**查全率:**正确预测的样本数量占正确样本的比例 (单位1:正确的样本)
对于这两个度量,一般来说一个高了另一个就低了。
误差: 学习器的实际预测输出与样本的真实输出之间的差异。
训练误差:学习器在训练集上的误差。
泛化误差:新样本的误差。
几种曲线的介绍
PR曲线
定义:以查全率为横轴,查准率为纵轴的二维坐标轴
作用:直观显示学习器在样本总体上的查全率、查准率,在进行比较是可以比较两个曲线与两个坐标轴之间的面积来判断哪一个学习器比较好(面积大的好)。
例图如下:
ROC曲线(受试者工作特征)
根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为整理进行预测,每次计算TPR和FPR作为横纵坐标从而绘制得到的二维坐标图。(TPR和FPR计算公式如下)
AUC:ROC曲线与横纵坐标轴的面积,进行判断两个曲线的优劣情况。
PR曲线以及ROC曲线代码实现
PR曲线
这里借鉴一篇博客中PR曲线的实现;
博客地址
关于数据集:乳腺癌数据集的原型是一组病灶造影图片,该数据集的提供者在收集到这些图片的初期,首先对图片进行了分析,从每张图片中提取主要的特征,然后编写图片处理程序,从图片中抽取这些特征。本数据集只关注了10个原始特征,然后又求得每个原始特征的标准差和最大值作为两个衍生特征,这样,最终数据集呈现出的效果便是30个特征。是一个典型的二分类问题!(数据集描述来源:https://blog.csdn.net/m0_54510474/article/details/124581706)
# 乳腺癌数据集
from sklearn.metrics import precision_recall_curve
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_breast_cancer
import matplotlib.pyplot as plt
data = load_breast_cancer() # load_breast_cancer()是sklearn的数据集,下面的X,y是数据集的数据和标签
X = data.data
y = data.targetX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=66) # 分割数据集model = LogisticRegression(solver='liblinear') # 采用liblinear优化算法的逻辑回归分类算法
# 训练模型
model.fit(X_train, y_train) # 表示通过度量样本距离分隔超平面距离的来表示置信度。
scores = model.decision_function(X_test) # 计算不同概率阈值的精确召回对(每个X_test中会计算出一个scores,根据score计算精确-召回对)
precisions, recalls, thresholds = precision_recall_curve(y_test, scores) # 绘图
plt.plot(precisions, recalls)
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.show()
PR曲线:
函数的讲解:
- 逻辑回归算法
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(solver='liblinear')
源码:
sklearn.linear_model.LogisticRegression(penalty='l2', *, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose=0, warm_start=False, n_jobs=None, l1_ratio=None)
多余的参数可以看一下这篇博客:回归函数讲解
这里的solver是定义优化算法的,这里采用的是liblinear,针对线性分类的一个工具,适合小数据集。
- decision_function()
scores = model.decision_function(X_test)
表示通过度量样本距离分隔超平面距离的来表示置信度。但是具体是啥我好想要而不是很明白,先留在这里,万一过几天懂了呢。
现在初步理解就是与线性分类线的距离,用于计算查准率(Precision)和查全率(Recall)
- precision_recall_curve()
from sklearn.metrics import precision_recall_curveprecisions, recalls, thresholds = precision_recall_curve(y_test, scores)
函数源码:
sklearn.metrics.precision_recall_curve(y_true, probas_pred, *, pos_label=None, sample_weight=None)
参数 | 说明 |
---|---|
y_true | array, shape = [n_samples] 真正的二进制标签。 如果标签既不是{-1,1}也不是{0,1},则应该明确给出pos_label。 |
probas_pred | array, shape = [n_samples] 估计的概率或决策函数。 |
pos_label | int or str, default=None 正例类别的标签。当pos_label = None时,如果y_true在{-1,1}或{0,1}中,则pos_label设置为1,否则将引发错误。 |
sample_weight | array-like of shape (n_samples,), default=None |
返回值 | 说明 |
---|---|
precision | array, shape = [n_thresholds + 1] 精度值,以使元素i为score>=thresholds [i]且最后一个元素为1的预测精度。 |
recall | array, shape = [n_thresholds + 1] 降低召回值使元素i为score> = thresholds [i]且最后一个元素为0的预测的召回。 |
thresholds | array, shape = [n_thresholds <= len(np.unique(probas_pred))] 用于计算精度和召回率的决策函数的阈值不断增加。 |
(上述表格转自:sklearn.metrics.precision_recall_curve-scikit-learn中文社区)
ROC曲线
ROC曲线借鉴了这篇博客:https://blog.csdn.net/wxfu2010/article/details/113852352
import numpy as np
from sklearn import metrics
import matplotlib.pyplot as plty = np.array([1, 1, 2, 2])
scores = np.array([0.1, 0.4, 0.35, 0.8])fpr, tpr, thresholds = metrics.roc_curve(y, scores, pos_label=2)# auc的输入为很简单,就是fpr, tpr值(至于这两个怎么算请看上面基本参数的介绍)
auc = metrics.auc(fpr, tpr)#画图
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange',lw=lw, label='ROC curve (area = %0.2f)' % auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver operating characteristic example')
plt.legend(loc="lower right")
plt.show()
ROC曲线:
函数的讲解:
sklearn.metrics.roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=True)
参数 | 说明 |
---|---|
y_true | 数组,存储数据的标签,维度就是样本数,形如[0,1,1,0,1…]这样的,也可以是-1和1,只要有两个值 |
y_score | 数组,存储数据的预测概率值,维度也是样本数,形如[0.38,0.5,0.8]这样的(总之就是一一对应的) |
pos_label | 整型或字符串,当y_true中只有一个值时,比如都是1或者都是0,无法判断哪个是正样本,需要用一个数字或字符串指出 |
sample_weight | 采样权重,这个官方没有仔细说,是一个可选参数,有待考察 |
drop_intermediate | 丢掉一些阈值,以便画roc曲线图 |
返回值 | 说明 |
---|---|
FPR | 数组,随阈值上涨的假阳性率 |
TPR | 数组,随阈值上涨的真正例率 |
thresholds | 数组,对预测值排序后的score列表,作为阈值,排序从大到小 |
PR曲线以及ROC曲线的绘制相关推荐
- 机器学习:python绘制P-R曲线与ROC曲线
Python绘制P-R曲线与ROC曲线 查准率与查全率 P-R曲线的绘制 ROC曲线的绘制 查准率与查全率 P-R曲线,就是查准率(precision)与查全率(recall)的曲线,以查准率作为 ...
- python绘制pr曲线图_利用Python中的numpy包实现PR曲线和ROC曲线的计算!
闲来无事,边理解PR曲线和ROC曲线,边写了一下计算两个指标的代码.在python环境下,sklearn里有现成的函数计算ROC曲线坐标点,这里为了深入理解这两个指标,写代码的时候只用到numpy包. ...
- 机器学习性能度量(1):P-R曲线与ROC曲线,python sklearn实现
最近做实验要用到性能度量的东西,之前学习过现在重新学习并且实现一下. 衡量模型泛化能力的评价标准,这就是性能度量.性能度量反应了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判 ...
- 百面机器学习 #2 模型评估:0102 精确率与召回率,假阳性与真阳性率,PR曲线和ROC曲线
文章目录 1. P-R(Precision-Recall)曲线 F1 score 2. 平方根误差的局限性 3. ROC曲线 ROC曲线绘制 4. AUC predict Positive predi ...
- P-R曲线与ROC曲线使用总结
P-R曲线与ROC曲线总结 作者:jliang https://blog.csdn.net/jliang3 1.P-R曲线 1)实际预测时二分类的四种情况 真阳性/真正类(True Positive, ...
- 机器学习笔记(一)P-R曲线与ROC曲线
P-R曲线与ROC曲线 一.什么是P-R曲线? 二.什么是ROC曲线? 三.P-R曲线与ROC曲线有什么用? 三.绘制P-R曲线代码 一.什么是P-R曲线? 要知道什么是P-R曲线,首先,我们要先了解 ...
- 模型评估指标:P-R曲线和ROC曲线
在机器学习建模中,模型评估指标用于评估不同模型的优劣. 在分类任务中,最简单的评估指标莫过于错误率和精度了,错误率表示的是错误分类的样本个数占总样本个数的比例,精度则是1减去错误率. 错误率和精度的优 ...
- 机器学习中的性能指标:精度、召回率,PR曲线,ROC曲线和AUC,及示例代码
机器学习中的性能指标:精度.召回率.PR曲线,ROC曲线和AUC 精度.召回率 基本概念 F-Score 度量曲线 PR曲线 ROC曲线 PR曲线和ROC曲线的比较 AUC 精度.召回率 基本概念 可 ...
- 机器学习模型性能评估(二):P-R曲线和ROC曲线
上文简要介绍了机器学习模型性能评估的四种方法以及应用场景,并详细介绍了错误率与精度的性能评估方法.本文承接上文,继续介绍模型性能评估方法:P-R曲线和ROC曲线. ...
- 一文详尽混淆矩阵、准确率、精确率、召回率、F1值、P-R 曲线、ROC 曲线、AUC 值、Micro-F1 和 Macro-F1
文章目录 二分类的评价指标 一.混淆矩阵与 TP.TN.FP.FN 二.准确率.精确率.召回率.F1值 三.P-R 曲线 四.ROC 曲线.AUC 值 五.P-R曲线和ROC曲线有什么区别,如何选择? ...
最新文章
- Linux CentOS 7上安装极点五笔
- 【Linux高级驱动】如何分析并移植网卡驱动
- python enumerate用法总结(转)
- byte[]和InputStream的相互转换
- linux下识别内存,c – Linux:识别内存中的页面
- css float用法 有关div溢出
- 凤凰项目:一个IT运维的传奇故事--阅读心得
- 摄影构图的几种基本方法
- 实施工程师面试技巧 –立哥经验
- Linux 上格式化ssd硬盘方法
- 用命令如何返回上级目录
- 计算机桌面来回闪烁,Windows10系统电脑屏幕一直闪烁的解决方案
- 波士顿大学计算机科学与技术专业,BU波士顿大学计算机信息系统硕士Master of Science in Computer Information Systems...
- 批处理遍历当前目录和子目录查找指定后缀名的文件并修改后缀名
- 复化梯形公式c语言sinx x,复化梯形公式和复化辛卜生公式
- Scylla AntDB 安装
- MacBook无故黑屏,按键没反应解决办法
- 前端(五)DOM 文档对象模型
- vbs可以调用python脚本吗?
- js 生成UUID的几种方法