机器学习(四) -- 模型评估(2)

系列文章目录

机器学习(一) -- 概述

机器学习(二) -- 数据预处理(1-3)

机器学习(三) -- 特征工程(1-2)

机器学习(四) -- 模型评估(1-4)

未完待续……


目录

机器学习(四) -- 模型评估(1)

---

系列文章目录

前言

三、分类模型评估指标

1、错误率与精度(准确率)

2、查准率(精确率)、查全率(召回率)与F1值(F1_score)

2.1、混淆矩阵(confusion matrix)

2.2、查准率(precision,精确率)

2.3、查全率(recall,召回率)

2.4、P-R图

2.5、F1值(F1_score)

2.6、其他

3、ROC与AUC

4、分类报告

--- 

 机器学习(四) -- 模型评估(3)


前言

tips:这里只是总结,不是教程哈。

“***”开头的是给好奇心重的宝宝看的,其实不太重要可以跳过。

此处以下所有内容均为暂定,因为我还没找到一个好的,让小白(我自己)也能容易理解(更系统、嗯应该是宏观)的讲解顺序与方式。

第一文主要简述了一下机器学习大致有哪些东西(当然远远不止这些),对大体框架有了一定了解。接着我们根据机器学习的流程一步步来学习吧,掐掉其他不太用得上我们的步骤,精练起来就4步(数据预处理,特征工程,训练模型,模型评估),其中训练模型则是我们的重头戏,基本上所有算法也都是这一步,so,这个最后写,先把其他三个讲了,然后,在结合这三步来进行算法的学习,兴许会好点(个人拙见)。


衡量模型泛化能力的评价标准就是性能度量(模型评估指标、模型评价标准),而针对不同的任务有不同的评价指标。按照数据集的目标值不同,可以把模型评估分为分类模型评估、回归模型评估和聚类模型评估。

三、分类模型评估指标

错误率与精度(准确率)、混淆矩阵、查准率(精确率)、查全率(召回率)与F1值(F1_score)、PR曲线、ROC与AUC

1、错误率与精度(准确率)

概述里面就说过了,这是分类任务中最常用的两种性能度量。

错误率(error rate):分类错误的样本数/样本总数

(公式还是要知道的,Ⅱ(*)是指示函数,在*为真(假)时取值为1(0))

精度(accuracy,准确率):1-错误率=分类正确的样本数/样本总数

from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split


# 引入数据集
iris = load_iris()

# 划分数据集以及模型训练
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=134)

# 模型训练
model = DecisionTreeClassifier()
model.fit(x_train, y_train)

模型训练那一部分可以先不用管,我们现在主要是了解性能度量。

from sklearn.metrics import accuracy_score
# 精度
accuracy_score(y_test, model.predict(x_test))

 

为了更形象一点,我们直接使用自制数据。

2、查准率(精确率)、查全率(召回率)与F1值(F1_score)

2.1、混淆矩阵(confusion matrix)

混淆矩阵是衡量分类型模型准确度中最基本,最直观,计算最简单的方法。如下,是一个二分类问题结果的混淆矩阵。

真实情况预测结果
P(正例)N(反例)
正例TP(真正例)FN(假反例)
反例FP(假正例)TN(真反例)

 预测结果是我们看到的,也就是经过模型计算出来的结果,TP+FP+TN+FN=样例总数。

API:

from sklearn.metrics import confusion_matrix

还是用刚才的自制数据来看哈,就很明了了。

三分类问题在用混淆矩阵时,得到的是一个 3 X 3 的矩阵。此时预测结果和真实情况不再以正例、反例命名,而是数据集真实的分类结果。用鸢尾花结果来看。

2.2、查准率(precision,精确率)

分类正确的正样本个数占预测结果为正的样本个数的比例。

P=\frac{TP}{TP+FN}

API:

from sklearn.metrics import precision_score

2.3、查全率(recall,召回率)

分类正确的正样本个数占真实值为正的样本个数的比例。

R=\frac{TP}{TP+FN}

API:

from sklearn.metrics import recall_score

!!!注意:precision_score 和 recall_score 方法默认用来计算二分类问题,若要计算多分类问题,则需要设置 average 参数。
average:评价值的平均值的计算方式。
        可以接收[None, 'binary' (default), 'micro', 'macro', 'weighted']
        'micro', 'macro':微和宏,下面会说到。
        ' weighted ' : 相当于类间带权重。各类别的P × 该类别的样本数量(实际值而非预测值)/ 样本总数量

查准率和查全率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。

2.4、P-R图

( P-R 曲线只能用于二分类问题)以查准率为纵轴、查全率为横轴作图,就得到查准率-查全率曲线,简称“P-R 曲线”,显示该曲线的图称为“P-R”图。

若一个学习器的 P-R 曲线被另一个学习器的 P-R 曲线完全“包住”,则可断言后者的性能优于前者。

若两个学习器的 P-R 曲线发生了交叉,例如学习器 A 与 B,则难以一般性地断言两者孰优孰劣,只能在具体的查准率或查全率条件下进行比较。

平衡点(Break-Even Point,简称 BEP):查准率=查全率时的取值。综合考虑查准率、查全率的性能度量,基于该方法则可断言学习器 A 优于学习器 B。

2.5、F1值(F1_score)

F1值是基于查准率与查全率的调和平均(harmonic mean)定义的:

n为样例总数。

在一些应用中,对查准率和查全率的重视程度有所不同,会相应地添加权重。

Fβ则是加权调和平均定义:

其中β>0 度量了查全率对查准率的相对重要性。
        β=1时退化为标准的 F1;
        β>1 时查全率有更大影响;
        β<1 时查准率有更大影响。

API

from sklearn.metrics import f1_score
from sklearn.metrics import fbeta_score
from sklearn.metrics import f1_score

f1_score(y_true,y_predict)



from sklearn.metrics import fbeta_score

print(fbeta_score(y_test, model.predict(x_test), beta=1, average='weighted'))

# 查全率有更大影响
print(fbeta_score(y_test, model.predict(x_test), beta=2, average='weighted'))

# 查准率有更大影响
print(fbeta_score(y_test, model.predict(x_test), beta=0.5, average='weighted'))

2.6、其他

很多时候我们有多个二分类混淆矩阵,需要进行多次训练/测试,每次得到一个混淆矩阵;或是在多个数据集上进行训练/测试,希望估计算法的“全局”性能,甚或是执行多分类任务,每两两类别的组合都对应一个混淆矩阵。总之,希望在 n 个二分类混淆矩阵上综合考察查准率和查全率。

所以就有了

宏查准率(macro-P)、宏查全率(macro-R)和宏F1(macro-F1)

微查准率(micro-P)、微查全率(micro-R)和微F1(micro-F1)

宏:先计算再平均

微:先平均再计算 

print(f1_score(y_test, model.predict(x_test), average='macro'))


print(f1_score(y_test, model.predict(x_test), average='micro'))

3、ROC与AUC

很多学习器为测试样本产生一个实值或概率预测,然后将这个预测值与一个“分类阈值”进行比较,大于阈值则分为正类,否则为负类。

分类阈值也就是截断点(cut point)。分类过程就相当于在排序中以某个“截断点”将样本分为两部分,前一部分判作正例,后一部分则判作反例。

在不同的应用任务中,可根据任务需求来采用不同的截断点。
        查准率:选择排序中靠前的位置进行截断。
        查全率:选择排序中靠后的位置进行截断。

ROC 全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,以“真正例率(True Positive Rate,简称 TPR)”为纵轴,以“假正例率(False Positive Rate,简称 FPR)”为横轴作图,就得到了“ROC曲线”。

API:

from sklearn.metrics import roc_curve
from sklearn.metrics import roc_curve
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = 'SimHei' # 设置字体为SimHei # 显示中文
plt.rcParams['axes.unicode_minus']=False # 修复负号问题


fpr,tpr,thresholds=roc_curve(y_true,y_predict)

plt.plot(fpr, tpr)
plt.axis("square")
plt.xlabel("假正例率/False positive rate")
plt.ylabel("正正例率/True positive rate")
plt.title("ROC curve")
plt.show()

AUC(Area Under ROC Curve): ROC 曲线下的面积大小。该值能够量化地反映基于 ROC 曲线衡量出的模型性能。AUC值(面积)越大的分类器,性能越好。

!!!注意:roc_curve() 同 precision_recall_curve(),都只能用于二分类问题,但 roc_auc_score() 方法支持计算多分类问题的 auc 面积。

4、分类报告

scikit-learn 中提供了一个非常方便的工具,可以给出对分类问题的评估报告,Classification_report() 方法能够给出精确率(precision)、召回率(recall)、F1 值(F1-score)和样本数目(support)。

API:

from sklearn.metrics import classification_report
from sklearn.metrics import classification_report

# 自制数据
print(classification_report(y_true,y_predict))

# 鸢尾花数据
print(classification_report(y_test, model.predict(x_test)))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot 物业管理系统

springboot mysql mybatisthymeleaf 基础信息管理 房屋信息 用户信息 业主信息 租房信息 公告管理 日常管理 财务管理

Linux环境vscode clang-format格式化:vscode clang format command is not available

问题现象 vscode安装了clang-format插件&#xff0c;但是使用就报错 问题原因 设置中配置的clang-format插件工具路径不正确。 解决方案 确认本地安装了clang-format工具&#xff1a;终端输入clang-format&#xff08;也可能是clang-format-13等版本&#xff0c;建议tab自…

qt-C++笔记之QProcess

qt-C笔记之QProcess code review! 文章目录 qt-C笔记之QProcess一.示例&#xff1a;QProcess来执行系统命令ls -l命令并打印出结果说明 二.示例&#xff1a;QProcess来执行系统命令ls -l命令并打印出结果&#xff0c;代码进一步丰富三.示例&#xff1a;使用 QProcess 在 Qt 中…

SQL 基础知识点

1. 数据库相关术语 数据库&#xff08;database&#xff09;&#xff1a;保存有组织的数据的容器&#xff08;通常是一个文件或一组文件&#xff09;。数据表&#xff08;table&#xff09; &#xff1a;某种特定类型数据的结构化清单。模式&#xff08;schema&#xff09;&am…

“数据要素×”正式来袭|美创“全栈能力、深入场景”保障数据价值安全释放

千呼万唤&#xff0c;1月4日&#xff0c;国家数据局等17部门联合印发的《“数据要素”三年行动计划&#xff08;2024—2026年&#xff09;》&#xff08;下称《三年行动计划》&#xff09;正式发布&#xff01; 作为国家数据局成立以来公开发布的首个重磅文件&#xff0c;《三年…

服务器迁移上云

一、服务器迁移上云 1、服务器迁移概念&#xff1a; 服务器迁移一般来说是将物理服务器从一个地点&#xff08;物理机房&#xff09;移动到另一个地点&#xff0c;或将数据从一台服务器移动到另一台服务器的过程。 物理服务器迁移场景&#xff1a; ● 机房搬迁&#xff1a;…

跨境电商企业客户服务优化指南:关键步骤与实用建议

随着全球经济一体化的加强&#xff0c;跨境电子商务产业在过去几年蓬勃发展。但是&#xff0c;为应对激烈竞争&#xff0c;提供全方面的客户服务成为了跨境电子商务卖家在市场中获得优势的关键因素之一。本文将介绍跨境电商企业优化客户服务有哪些步骤&#xff1f;以助力企业提…

图形化少儿编程的优点、现状以及未来发展趋势

随着科技的不断发展&#xff0c;越来越多的儿童开始接触编程。图形化少儿编程作为一门新兴的编程教育方式&#xff0c;越来越受到家长和教育者的关注。6547网将探讨图形化少儿编程的优点、现状以及未来发展趋势。 一、图形化少儿编程的优点 图形化少儿编程的最大优点在于其简单…

Unity | 渡鸦避难所-6 | 有限状态机控制角色行为逻辑

1 有限状态机简介 有限状态机&#xff08;英语&#xff1a;finite-state machine&#xff0c;缩写&#xff1a;FSM&#xff09;&#xff0c;简称状态机&#xff0c;是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型 在游戏开发中应用有限状态机&#xff…

(偏门)LINUX挂载硬盘等命令报错:READ FPDMA QUEUED

记录一个比较偏门的问题&#xff1a; 在linux中查看硬盘挂载情况&#xff1a; fdisk -l或创建分区&#xff1a; fdisk /dev/sdbgdisk /dev/sdb时报错&#xff1a; READ FPDMA QUEUED 或 WRITE FPDMA QUEUED 构建文件系统、挂载分区时还会卡死。 看网上的解决办法关闭NCQ&am…

2000-2022年上市公司过度负债数据(含原始数据+测算代码+结果)

2000-2022年上市公司过度负债数据&#xff08;含原始数据测算代码结果&#xff09; 1、时间&#xff1a;2000-2022年 2、指标&#xff1a;证券代码、年份、证券简称、行业名称、行业代码、制造业取两位代码&#xff0c;其他行业用大类、国企为1&#xff0c;否则为0、企业规模…

element plus 表格组件怎样在表格中显示图片

官方给的&#xff1a; <el-table-column label"Thumbnail" width"180"><template #default"scope"><div style"display: flex; align-items: center"><el-image :preview-src-list"srcList"/><…

Thrift

官网&#xff1a;Apache Thrift - Home tutorial&#xff1a;Apache Thrift - Index of tutorial/ 游戏匹配服务 服务分为三部分&#xff1a;分别是game&#xff0c;match_system&#xff0c;save_servergame为match_client端&#xff0c;通过match.thrift接口向match_system完…

QT如何修改项目名称

#打开项目 这里以项目start1为例 修改start1为hds 首先删除这个文件 之后打开CmakeLists.txt文件修改里面的项目名称把里面含有start1的全部写成hds。一般是3个地方 重新打开hds文件 configure Project一下 可以看到跑出来是一样的。到此项目的名称就改过来了。

spring-boot项目启动类错误: 找不到或无法加载主类 com.**Application

问题&#xff1a;Springboot项目启动报错&#xff1a;错误: 找不到或无法加载主类 com.**Application 解决步骤&#xff1a; 1.File–>Project Structure 2.Modules–>选中你的项目–点击“-”移除 3.重新导入&#xff1a;点击“”号&#xff0c;选择Import Module&…

linux-6.0 内核存储栈全景图

linux 存储栈原图地址&#xff1a;https://www.thomas-krenn.com/en/wiki/Linux_Storage_Stack_Diagram

Linux下配置静态ip地址

问题&#xff1a;虚拟机重启后ip地址动态更新&#xff0c;导致连shell十分麻烦 解决&#xff1a; 1. 进入配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 2.1 修改配置 BOOTPROTOstatic ONBOOTyes2.2 新增配置 #ip地址(自定义) IPADDR192.168.149.131 #子网掩码 …

苹果怎么录制屏幕?这个技能你值得拥有!

苹果设备广受欢迎&#xff0c;而其中一个强大的功能就是屏幕录制。无论是记录游戏过程、演示操作步骤&#xff0c;还是创作教学视频&#xff0c;苹果都提供了多种方式来满足用户的屏幕录制需求。可是您知道苹果怎么录制屏幕吗&#xff1f;本文将深入介绍两种在苹果设备上进行屏…

Simpy简介:python仿真模拟库-02/5

一、说明 关于python下的仿真库&#xff0c;本篇为第二部分&#xff0c;是更进一步的物理模型讲解&#xff0c;由于这部分内容强依赖于第一部分的符号介绍&#xff0c;因此&#xff0c;有以下建议&#xff1a; 此文为第二部分&#xff0c;若看第一部分。建议查看本系列的第一部…

群晖Synology Drive同步文件时过滤指定文件夹“dist“, “node_modules“

群晖Synology Drive同步文件时过滤指定文件夹"dist", “node_modules” mac用户 安装Synology Drive创建同步任务修改Synology Drive配置 打开/Users/[用户名]/Library/Application Support/SynologyDrive/data/session/[同步任务序号&#xff0c;第一个同步任务就…