机器学习——分类评价指标

【说明】文章内容来自《机器学习——基于sklearn》,用于学习记录。若有争议联系删除。

1、评价指标

        对于模型的评价往往会使用损失函数和评价指标,两者的本质是一致的。一般情况下,损失函数应用于训练过程,而评价指标应用于测试过程。对于回归问题,往往使用均方误差等指标评价模型,也使用回归损失函数作为评价指标。而分类问题的评价指标一般会选择准确率、ROC曲线和AUC等,其评价指标如下:

术语sklearn函数
混淆矩阵confusion_matrix
准确率accuracy_score
召回率reacall_score
f1_scoref1_score
ROC曲线roc_curve
AUCroc_auc_score
分类评估报告classification_report

2、混淆矩阵

        在机器学习领域,混淆矩阵(confusion matrix)是衡量分类模型准确度的方法中最基本、最直观、计算最简单的方法。混淆矩阵又称为可能性表格或错误矩阵,用来呈现算法性能的可视化效果,通常应用于监督学习。混淆矩阵由n行n列组成,其每一列表预测值,每一行代表实际的类别。例如,一个人得病了,但检查结果说他没病,那么他“假没病”,也叫假阴性(FN);一个人得病了,医生判断他有病,那么他是“真有病”,也叫阳性(TP);一个人没得病,医生检查结果却说他有病,那么他是“假有病”,也叫假阳性(FP);一个人没得病,医生检查结果也说他没病,那么他是“真没病”,也叫真阴性(TN)4种结局就是2X2=4的混淆矩阵,如表所示。

        FN、TP、FP、TN共包含4个字母P、N、T、F,英文分别是 Positive、Negative、True、False。True和 False 代表预测本身的结果是正确还是不正确,Positive 和 Negative则是代表预测的方向是正向还是负向。
        每一行之和表示该类别的真实样本数量,每一列之和表示被预测为该类别的样本数量。预测性分类模型肯定是越准越好。因此混淆矩阵中TP与 TN的数值越大越好,而FP与FN的数值越小越好。
混淆矩阵具有如下特性:

  • 样本全集=TPUFPUFNUTN。
  • 任何一个样本属于且只属于4个集合中的一个,即它们没有交集。

2.1 混淆矩阵示例

        某系统用来对猫(cat)、狗(dog)、免子(rabbit)进行分类。现共有27只动物,包括8只猫、6条狗和13只兔子。混淆矩阵如表所示。

        在这个混淆矩阵中,实际有8只猫,但是系统将其中3只猫预测成了狗;实际有6条狗,其中有一条狗被预测成了免子,两条狗被预测成了猫;实际有13只兔子,其中有2只兔子被预测成了狗。
        sklearn,metrics模块提供了confusion_matrix函数,格式如下:

sklearn.metrics.confusion_matrix(y_true, y_pred,labels)

【参数说明】

  • y_true:真实目标值
  • y_pred:估计器预测目标值
  • labels:指定类别对应的数字

示例:

from sklearn.metrics import confusion_matrix
y_true = [2,0,2,2,0,1]
y_pred = [0,0,2,2,0,2]
print('confusion_matrix\n', confusion_matrix(y_true, y_pred))
y_true = ['cat', 'ant', 'cat', 'cat', 'ant', 'bird']
y_pred = ['ant', 'ant', 'cat', 'cat', 'ant', 'cat']
print('confusion_matrix\n', confusion_matrix(y_true, y_pred, labels = ['ant','bird', 'cat']))

【运行结果】

真实值中,共0,1,2三个特征。

2.2 准确率

准确率(accuracy)是最常用的分类性能指标。准确率是预测正确的样本数与总样本数的比值。其计算公式:

ACC= \frac{TP+TN}{P+N}

sklearn.metrics模块提供了accuracy_score函数,格式如下:

 sklearn.metrics.accuracy_score(y_true, y_pred, normalize)

【参数说明】

  • y_true:真实目标值
  • y_pred:估计器预测目标值
  • normalize:是否正则化。默认为True,返回正确分类的比例;False返回正确分类的样本数。

示例:

import numpy as np
from sklearn.metrics import accuracy_score
y_true = [0,1,2,3]
y_pred = [0,2,1,3]
print(accuracy_score(y_true, y_pred))
print(accuracy_score(y_true, y_pred, normalize = False))

2.3 精确率

        精确率(precision)又称为查准率。精确率只针对预测正确的正样本而不是所有预测正确的样本,是正确预测的正样本数与预测正样本总数的比值,其计算公式如下:

precision = \frac{TP}{TP+FP}

sklearn.metrics模块提供了precision_score函数,格式如下:

sklearn.metrics.precision_score(y_true, y_pred)

示例:

import numpy as np
from sklearn.metrics import precision_score
y_true = [1,0,1,1]
y_pred = [0,1,1,0]
p = precision_score(y_true, y_pred)
print(p)

2.4 召回率

        召回率(recall)是有关覆盖面的度量,它反映有多少正例被分为正例,又称查全率。查准率和召回率是一对矛盾的度量。查准率高时,召回率往往偏低;而召回率高时,查准率往往偏低。
召回率是正确预测的正例数与实际正例总数之比,计算公式如下

Recall = \frac{TP}{TP+FN}
sklearn.metrics模块提供了recall_score函数,格式如下:

sklearn.metrics.recall _score(y_true, y_pred, average)

        以信息检索为例,刚开始在页面上显示的信息是用户可能最感兴趣的信息,此时查准率高,但只显示了部分数据,所以召回率低;随着用户不断地下拉滚动条显示其余信息,信息与用户兴趣的匹配程度逐渐降低,查准率不断下降,召回率逐渐上升;当下拉到信息底部时,此时的信息是最不符合用户兴趣的,因此查准率最低,但所有的信息都已经展示,召回率最高。

3、F1分数

F1分数(F1 score)用于衡量二分类模型的精确度,是精确率和召回率的调和值,其变化范围为0~1。F1分数的计算公式如下:

F1=\frac{2*TP}{2*TP+FN+FP}=\frac{2*precision*Recall}{Precision+Recall}

sklearn.metrics 模块提供了f1_score函数。格式如下:

sklearn.metrics.f1_score(y_true, predictions, average = 'micro

【参数说明】

  • y_true:真实目标值
  • predictions:估计器预测目标值

示例:

from sklearn import metrics
y_test = [0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2]
y_pred = [0,0,1,1,0,0,0,2,2,0,1,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,1,1,2,2]
F1 = metrics.f1_score(y_test, y_pred, average = 'micro')
print("F1", F1)

4、ROC曲线

        ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,用于描述混淆矩阵中FPR-TPR两个量之间的相对变化情况。ROC曲线的横轴是FPR,纵轴是TPR。ROC曲线用于描述样本的真实类别和预测概率。

ROC曲线中的4个点如下:

  • 点(0,1):即 FPR=0,TPR=1,意味着FN=0且FP=0,所有的样本都正确分类
  • 点(1,0):即 FPR=1,TPR=0,最差分类器,避开了所有正确答案。
  • 点(0,0):即 FPR=TPR=0,FP=TP=0,分类器把每个样本都预测为负类。
  • 点(1,1):即 FPR=TPR=1,分类器把所有样本都预测为正类。

sklearn,metrics 模块提供了roc_curve函数,格式如下:

sklearn.metrics.roc_ curve(y_true, y_score)

【参数说明】

  • y_true:每个样本的真实类别,必须为0(反例)、1(正例)标记。
  • y_score:预测得分,可以是正类的估计概率

示例:

import numpy as np
from sklearn import metrics
y = 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)
print(fpr)
print(tpr)
print(thresholds)
from sklearn.metrics import auc
print(metrics.auc(fpr, tpr))

5、AUC

        AUC(Area Under Curve)是指 ROC曲线下的面积,由于ROC曲线一般都处于y=x这条直线的上方,所以AUC 的取值范围为0.5~1。AUC 只能用于评价二分类,直观地评价分类器的好坏,值越大越好。
AUC 对模型性能的判断标准如下:

  • AUC=1,是完美分类器。采用这个预测模型时,存在至少一个阈值能得出完美预测。在绝大多数预测的场合,不存在完美分类器。
  • 0.5<AUC<1,优于随机猜测。若对这个分类器(模型)设定合适的阈值,它就才预测价值。
  • AUC=0.5,跟随机猜测一样(例如抛硬币),模型没有预测价值。
  • AUC<0.5,比随机猜测还差。但是,只要总是反预测而行,就优于随机猜测。

sklearn.metrics模块提供了roc_auc_score函数,格式如下:

sklearn.metrics.roc_auc_score(y_true, y_score)

【参数说明】

  • y_true:每个样本的真实类别,必须为0(反例)、1(正例)标记。
  • y_score:预测得分,可以是正类的估计概率。

示例:

import numpy as np
from sklearn.metrics import roc_auc_score
y_true = np.array([0,0,1,1])
y_score = np.array([0.1,0.4,0.35,0.8])
print(roc_auc_score(y_true, y_score))

6、分类评估报告

        Sklearn 中的classification_report函数用于显示主要分类指标的文本报告,显示每个类的精确度、召回率、F1值等信息。classification_report函数格式如下:

sklearn.metrics.classification _report(y_true, y_pred, labels, target_names)

【参数说明】

  • y_true:真实目标值。
  • y_pred:估计器预测目标值。
  • labels:指定类别对应的数字。
  • target_names:目标类别名称。

示例:

from sklearn.metrics import classification_report
y_true = [0,1,2,2,2]
y_pred = [0,0,2,2,1]
target_names = ['class 0','class 1','class 2']
print(classification_report(y_true, y_pred, target_names = target_names))

【运行结果】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/237975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Xcode】解决Unable to process request - PLA Update available

出现场景 IOS更新app时&#xff0c;使用Xcode上传新版本的包时&#xff0c;提示无法上传。 Unable to process request -PLA update available you currently dont have access to this membership resource. To resolve this issue ,agree to the latest program license a…

Flutter ExpansionPanelList 去除展开后的间隔距离,及属性

可展开列表中&#xff0c;展开后条目有一个间距&#xff0c;可以 使用materialGapSize: 0&#xff0c;来去掉 // child: ExpansionPanelList(//expandedHeaderPadding: EdgeInsets.zero,//头部顶部间隔// materialGapSize: 15,//展开后的间距// animationDuration: const …

实在智能成功完成近2亿元C轮融资,全面迎接2024年Agent智能体应用元年

在这个最冷的季节&#xff0c;杭州实在智能科技有限公司&#xff08;以下简称“实在智能”&#xff09;依然表现火爆&#xff0c;近日&#xff0c;实在智能成功完成C轮融资近2亿元人民币&#xff0c;由金泰富资本和安吉智慧谷共同领投、安吉两山国创跟投。 在此轮融资以前&…

61权限提升-RedisPostgre令牌窃取进程注入

主要讲解redis数据库和postgresql数据库&#xff0c;然后还要两个windows的提权方式令牌窃取和进程注入。 postgresql是基于两个cve的漏洞&#xff0c;redis的提权方式第一种是利用任务执行的反弹shell&#xff0c;第二个是写一个ssh-keygen的公钥使用私钥登录&#xff0c;这是…

[SWPUCTF 2021 新生赛]Do_you_know_http已

打开环境 它说用WLLM浏览器打开&#xff0c;使用BP抓包&#xff0c;发送到重发器 修改User-Agent 下一步&#xff0c;访问a.php 这儿他说添加一个本地地址&#xff0c;它给了一个183.224.40.160&#xff0c;我用了发现没用&#xff0c;然后重新添加一个地址&#xff1a;X-Forwa…

QListView的setResizeMode,setViewMode,setFlow

参考&#xff1a; qt的QListwiget设置横向的排列_qlistwidget 横排-CSDN博客 希望实现类似的效果&#xff1a; 感觉关键是搞清楚这三句&#xff1a; list.setViewMode(QListView::IconMode);list.setFlow(QListView::LeftToRight);list.setResizeMode(QListView::Adjust); …

mysql自增序列 关于mysql线程安全 独享内存 溢出 分析

1 MySQL锁概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&#xff0c;锁冲突也是影响数据库并发访问性能的一个重要因素。 相对其他数据库而言&#xff0c;MySQL的锁机制比较简单&#xff0c…

nginx 离线安装 https反向代理

这里写自定义目录标题 安装步骤1.安装nginx所需依赖1.1 安装gcc和gcc-c1.1.1下载依赖包1.1.2 上传依赖包1.1.3安装依赖 1.2 安装pcre1.2.1 下载pcre1.2.2 上传解压安装包1.2.3 编译安装 1.3 下载安装zlib1.3.1 下载zlib1.3.2 上传解压安装包1.3.3 编译安装 1.4 下载安装openssl…

STM32G4x FLASH 读写配置结构体(LL库下使用)

主要工作就是把HAL的超时用LL库延时替代&#xff0c;保留了中断擦写模式、轮询等待擦写&#xff0c;我已经验证了部分。 笔者用的芯片为STM32G473CBT6 128KB Flash&#xff0c;开环环境为CUBEMXMDK5.32&#xff0c;因为G4已经没有标准库了&#xff0c;笔者还是习惯使用标准库的…

企业招股书API,轻松获取公司招股书信息

前言 随着互联网的普及和信息技术的不断发展&#xff0c;获取公司招股书信息变得越来越便捷。企业招股书API作为一种新型的技术手段&#xff0c;为投资者提供了更加高效、准确、全面的招股书信息。本文将介绍企业招股书API的功能和优势&#xff0c;帮助投资者轻松获取公司招股…

什么是多边形网格以及如何编辑它?

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 介绍 多边形网格是 3D 建模中经常使用的一个词&#xff0c;它的含义…

Ionic实战二十七:移动端录音方案及Nginx部署配置

文章目录 1.最终效果预览2.实现思路说明3.移动端外壳集成iframe4.视频页nginx配置5.组态页iframe集成6.组态页Nginx配置7.Nginx启动及关闭8.H5页面录音1.最终效果预览 2.实现思路说明 摄像头对接的海康的或者大华,将设备集成到青柿视频平台中,这样视频的播放用video标签即可…

文件夹数据同步工具 Sync Folders Pro mac支持选项

Sync Folders Pro for Mac 是一款功能强大的文件夹同步工具&#xff0c;旨在帮助用户在 Mac 计算机和移动设备之间创建双向同步。这款软件支持各种文件系统和设备&#xff0c;如 iPhone&#xff0c;iPad&#xff0c;iPod&#xff0c;Android 等。通过这款软件&#xff0c;用户可…

模型评估方法

目录 数据集切分 交叉验证 交叉验证实例 混淆矩阵 实例 代码实现 阈值 全局阈值处理 自适应阈值处理 阈值对结果的影响 ROC曲线 数据集切分 数据集切分是指将一个数据集分割成训练集和测试集的过程。常用的方法是随机切分&#xff0c;即将数据集中的样本按照一定比…

OpenAI 官方 Prompt 工程指南:写好 Prompt 的六个策略

其实一直有很多人问我&#xff0c;Prompt 要怎么写效果才好&#xff0c;有没有模板。 我每次都会说&#xff0c;能清晰的表达你的想法&#xff0c;才是最重要的&#xff0c;各种技巧都是其次。但是&#xff0c;我还是希望发给他们一些靠谱的文档。 但是&#xff0c;网上各种所…

APEX后台弱密码增强改造出现的问题及解决方法

为了加强APEX后台密码的安全性和可靠性&#xff0c;对其进行弱密码改造&#xff0c;通过改写登录函数&#xff0c;判断密码可靠性&#xff0c;在密码不符合条件&#xff08;密码长度必须大于8位小于16位&#xff0c;其包含数字、大小写字母与特殊符号&#xff09;时跳转到密码修…

【Docker】基于华为 openEuler 应用 Docker 镜像体积压缩

书接 openEuler 系列文章&#xff08;可以翻看测试系列&#xff09;&#xff0c;本次跟大家说说如何将 Java 包轻量化地构建到 openEuler 镜像中且保持镜像内操作系统是全补丁状态。 之前我们都是使用现成的 jdk 镜像进行构建的&#xff0c;如下图&#xff1a; FROM ibm-seme…

智能数字人1688直播软件系统源码有哪些适用的场景?

智能数字人1688直播软件系统源码适用于多个场景&#xff0c;小编给大家列举了一些。 以下是部分代码的示例&#xff1a; 适用场景&#xff1a; 1.电商直播&#xff1a;1688智能数字人直播软件系统源码可以用于电商直播平台&#xff0c;为商家提供智能化的直播服务。数字人主播…

macOS制作dmg包

macOS制作dmg包 准备&#xff1a;磁盘工具、以及要制作的软件&#xff0c;这里以Firefox为例 图片素材 背景图&#xff1a; 找到Firefox&#xff0c;点击显示简介&#xff0c;查看包的大小 打开磁盘工具 文件–>新建映像–>空白映像 填写信息&#xff0c;大小…

nodejs微信小程序+python+PHP个性化书籍推荐系统-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…