sklearn分类任务模型评价指标汇总与AUC-ROC曲线及代码示例

2023-10-29

1. 分类指标

二分类可以参考下图:
在这里插入图片描述

准确率 = 预测对的样本数 / 全部样本数
精确率 = 被预测出的正例样本数 / 预测为正例的样本数
召回率 = 预测且真的是正例的样本数 / 正例的样本数
二分类F1 = 2 * 精确率 * 召回率 /(精确率 + 召回率)

多分类中F1一般用Macro F1Micro F1

  • Macro F1:将n分类的评价拆成n个二分类的评价,计算每个二分类任务的F1 score,这些计算出来的F1 score求平均即为Macro F1
  • Micro F1:将n分类的评价拆成n个二分类的评价,将n个二分类评价的TP、FP、RN对应相加(看混淆矩阵),计算得出每组的准确率与召回率,最后按照二分类计算F1的方法,代入公式得出的F1值即为Micro F1

因为Macro F1计算时每个样本的F1权重相同,最后求平均会受样本数量少的类别影响大,在数据各类样本不均衡的情况下,采用Micro F1较为合理,其他情况两者都行,都是F1越大越好

2. 整合工具函数

使用工具方法:

import matplotlib.pyplot as plt


def get_score(true_data, result_prediction, save_roc_path=None, model_name=None):
    """
    分类问题的得分辅助函数
    :param true_data: 真实值,是要预测的目标
    :param result_prediction: 预测值,用模型预测出来的值
    :param save_roc_path: 保存roc曲线的路径
    :param model_name: 模型名
    :return:
    """
    from sklearn.metrics import accuracy_score
    from sklearn.metrics import precision_score
    from sklearn.metrics import recall_score, f1_score
    from sklearn.metrics import roc_curve, auc

    acc = accuracy_score(true_data, result_prediction) # 准确率
    prec = precision_score(true_data, result_prediction) # 精确率
    recall = recall_score(true_data, result_prediction) # 召回率
    f1 = f1_score(true_data, result_prediction) # F1

    fpr, tpr, thersholds = roc_curve(true_data, result_prediction)
    roc_auc = auc(fpr, tpr)

    plt.plot(fpr, tpr, 'k--', label='ROC (area = {0:.2f})'.format(roc_auc), lw=2)
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('ROC Curve')
    plt.legend(loc="lower right")
    if save_roc_path:
        plt.savefig(save_roc_path)
    plt.show()
    score_list = [acc, prec, recall, f1, roc_auc]
    print('模型{}:'.format(model_name), score_list)
    return score_list

3. 使用示例

import matplotlib.pyplot as plt
import numpy as np


def get_score(true_data, result_prediction, save_roc_path=None, model_name=None):
    """
    分类问题的得分辅助函数
    :param true_data: 真实值,是要预测的目标
    :param result_prediction: 预测值,用模型预测出来的值
    :param save_roc_path: 保存roc曲线的路径
    :param model_name: 模型名
    :return:
    """
    from sklearn.metrics import accuracy_score
    from sklearn.metrics import precision_score
    from sklearn.metrics import recall_score, f1_score
    from sklearn.metrics import roc_curve, auc

    acc = accuracy_score(true_data, result_prediction)
    prec = precision_score(true_data, result_prediction)
    recall = recall_score(true_data, result_prediction)
    f1 = f1_score(true_data, result_prediction)

    fpr, tpr, thersholds = roc_curve(true_data, result_prediction)
    roc_auc = auc(fpr, tpr)

    plt.plot(fpr, tpr, 'k--', label='ROC (area = {0:.2f})'.format(roc_auc), lw=2)
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('ROC Curve')
    plt.legend(loc="lower right")
    if save_roc_path:
        plt.savefig(save_roc_path)
    plt.show()
    score_list = [acc, prec, recall, f1, roc_auc]
    print('模型{}:'.format(model_name), score_list)
    return score_list


if __name__ == '__main__':
    my_score = get_score(
        true_data=np.random.randint(0, 2, size=100),  # 假设为真实值
        result_prediction=np.random.randint(0, 2, size=100),  # 假设为预测值
    )

返回值为:

模型None: [0.53, 0.6136363636363636, 0.47368421052631576, 0.5346534653465346, 0.5391676866585067]

这里列表中的值依次为:[准确率,精确率,召回率,F1,roc-auc],并且得到ROC曲线:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn分类任务模型评价指标汇总与AUC-ROC曲线及代码示例 的相关文章

随机推荐

  • iOS项目技巧+封装过程

    前言 接手一个外包项目 发现问题颇多 下面是对整个项目封装过程的记录 当前项目存在的问题 1 接口前缀太多 切换环境不方便 2 通用方法没有进行封装 gt 支付方法哪里用到写哪里 3 扩展性和容错率太低 许多数组取值是直接根据数组下标来取的
  • Java IO 学习总结(四)BufferedReader 缓冲字符流

    Java IO 学习总结 一 输入流 输出流 Java IO 学习总结 二 File 类 Java IO 学习总结 三 BufferedInputStream Java IO 学习总结 四 BufferedReader 缓冲字符流 Java
  • CSS常用函数补充(var、clac、blur、gradient)

    文章目录 一 var 1 1 简介 1 2 使用 1 3 规则 二 calc 2 1 简介 2 2 使用 三 blur 3 1 简介 3 2 使用 3 2 1 filter 3 2 2 backdrop filter 四 gradient
  • [深入研究4G/5G/6G专题-55]: L3信令控制-4-软件功能与流程的切分-CU网元的信令

    目录 第1章 软件架构 1 1 总体架构 1 2 微服务架构 1 3 基本模型 第2章 5G CP IF 控制面对外的公共接口
  • 收藏一些很炫的html特效

    文字颜色变换
  • get;get属性器

    get set是用来扩展域的 也就是C里的变量 只是用起来更加灵活而己 看以下代码 using System public class cls private int book 定义一个域 也可以叫变量 只是面向对像里都这么叫 使用起来也更
  • 人工智能(AI)产生影响

    人工智能 AI 的快速发展已经开始对各个行业产生了深远的影响 作为一种人工智能技术的应用 自然语言处理模型也将对文章创作产生影响 以下是人工智能对文章创作行业可能产生的影响 1 帮助提高文章的质量和效率 自然语言处理模型已经可以模仿人类创作
  • DM JDBC 使用 Hikaricp连接池框架开发示例

    一 DM JDBC 配置指南 达梦数据库提供的JDBC驱动windows放置路径 D dmdbms drivers jdbc 具体数据库安装路径以实际为准 JDK1 5版本 使用 DmJdbcDriver15 jar JDK1 6版本 使用
  • Vue 3.0 全家桶 + Vite 从零配置开发环境、生产环境

    上篇文章我们对比了 Vite 与 Webpack 的差异 接下来 准备将项目中用到的 Webpack 5 0 替换为 Vite 2 0 我们先着手从零配置开发 生产环境 文章目录 一 初始化 1 初始化 package json 2 安装
  • 对抗验证概述

    了解如何实施对抗性验证 以建立分类器来确定您的数据是来自训练还是测试集 如果可以这样做 则您的数据有问题 并且对抗验证模型可以帮助您诊断问题 如果您要在Kaggle上研究一些获胜的解决方案 则可能会注意到对 对抗性验证 的引用 像这样 它是
  • QT5无法输入中文,如何解决???

    环境 UBUNTU 12 04 LTS 最近在Ubuntu下安装了QT5 0 2版本 在尝试完跑实例程序后 自己想做一个Socket的TCP IP通信例子 但是悲剧的发现QT5中竟然不能切换输入法到中文 所做尝试包括 1 换输入法fctix
  • 分页组件封装

    scss 分页 el pagination text align right margin top 20px span el pagination total position absolute left 0 is background e
  • 白盒测试基本方法

    白盒测试的概述 由于逻辑错误和不正确假设与一条程序路径被运行的可能性成反比 由于我们经常相信某逻辑路径不可能被执行 而事实上 它可能在正常的情况下被执行 由于代码中的笔误是随机且无法杜绝的 因此我们要进行白盒测试 白盒测试又称结构测试 透明
  • Maven : has broken classes path unknown

    1 美图 2 背景 windows下 因为要整理Maven 的pom文件 我加入了一个
  • Java提高篇——equals()方法和“==”运算符

    equals 超类Object中有这个equals 方法 该方法主要用于比较两个对象是否相等 该方法的源码如下 public boolean equals Object obj return this obj 我们知道所有的对象都拥有标识
  • wsl子系统Ubuntu18.04,cuDNN安装

    如果觉得本篇文章对您的学习起到帮助作用 请 点赞 关注 评论 留下您的足迹 本文主要wls子系统Ubuntu18 04安装cuDNN 安装cudnn坑巨多 因此记录以备日后查看 同时 如果能够帮助到更多人 也不胜荣幸 文章目录 一 下载安装
  • Xcopy 复制文件和目录,包括子目录

    Xcopy 复制文件和目录 包括子目录 语法 xcopy Source Destination w p c v q f l g d mm dd yyyy u i s e t k r h a m n o x exclude file1 fil
  • Spring FeignClient 遇到的参数问题(RequestParam.value() was empty on parameter 0)

    报错 Caused by java lang IllegalStateException RequestParam value was empty on parameter 0 代码 PostMapping value org getOrg
  • 下载徐小明新浪博客全部博文链接

    利用爬虫把徐小明新浪博客里的所有博文链接爬下来 保存到脚本所在路径的csv文件中 python2 7代码 把起始博文目录链接换成其他的也是完全可以的 详细内容请关注微信公众号 岛城窝窝 代码如下 usr bin env python cod
  • sklearn分类任务模型评价指标汇总与AUC-ROC曲线及代码示例

    文章目录 1 分类指标 2 整合工具函数 3 使用示例 1 分类指标 二分类可以参考下图 准确率 预测对的样本数 全部样本数 精确率 被预测出的正例样本数 预测为正例的样本数 召回率 预测且真的是正例的样本数 正例的样本数 二分类F1 2