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

系列文章目录

机器学习(一) -- 概述

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

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

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

未完待续……


目录

系列文章目录

前言

三、分类模型评估指标

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、分类报告


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


前言

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_scoref1_score(y_true,y_predict)from sklearn.metrics import fbeta_scoreprint(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 pltplt.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 曲线衡量出的模型性能。

!!!注意: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)))

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

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

相关文章

数据库——SQL DDLDML使用

1.实验内容及原理 1. 在 Windows 系统中安装 VMWare 虚拟机&#xff0c;在 VMWare 中安装 Ubuntu 系统,并在 Ubuntu 中搭建 LAMP 实验环境。 2. 使用 MySQL 进行一些基本操作&#xff1a; &#xff08;1&#xff09;登录 MySQL&#xff0c;在 MySQL 中创建用户&#xff0c;…

云原生架构未来发展趋势,探索容器技术未来的发展趋势

云原生架构未来发展趋势&#xff0c;探索容器技术未来的发展趋势 云原生架构未来发展趋势容器技术发展趋势无处不在的计算催生新一代容器实现深入分布式云&#xff08;从多云/混合云&#xff0c;到分布式云&#xff09;云原生操作系统Kubernetes已经成为云时代的操作系统从无状…

直流有刷电机的简单高性能控制方法

提出问题 在STM32——直流电机PI调速一文中推导了直流有刷电机的数学模型&#xff0c;在不考虑电流环的情况下&#xff0c;可做降阶处理&#xff0c;视同一个一阶系统&#xff0c;通过简单的 P I PI PI控制使得电机有着不错的响应&#xff0c;但仍然存在两个问题&#xff0c;一…

网站迁移和SEO:损害排名的常见错误

正在规划站点迁移&#xff1f; 迁移是更困难的 - 通常是可怕的 - SEO任务之一。 为了让它发挥作用&#xff0c;你需要避免常见的陷阱&#xff0c;这些陷阱可能会影响你的知名度&#xff0c;并导致流量和收入的损失。 8 月 11 日&#xff0c;我主持了一场赞助的搜索引擎杂志网…

PD SINK协议芯片系列产品介绍对比-ECP5701、FS312A、CH221K、HUSB238、AS225KL

目录 一、 ECP5701 二、 FS312A 三、 CH221K 四、 HUSB238 五、 AS225KL 在如今快节奏生活不断蔓延的背景下&#xff0c;人们对各种事情的处理也渐渐地开始要求在保证质量的情况下&#xff0c;不断加快。手机快充就是一个典型的例子&#xff0c;从开始的18W&#xff0c;30…

linux usb 驱动介绍

通用串行总线(USB)是一个在主机和许多外设之间的连接. 最初它被创建来替代许多慢速和不同的总线- 并口, 串口, 和键盘连接--有一个单个的所有设备都可以连接的总线类型. [45] USB 已经成长超出了这些 慢速连接并且现在支持几乎每种可以连接到 PC 的设备. USB 规范的最新版本增加…

并行算法举例

谷歌的三大马车中的两辆分别是MapReduce GFS 这些我们在后边都会学到。 补充shuffle的作用 将map中的内容&#xff0c;具备相同内容的key被放到一组 问题1 矩阵乘法 第一轮j相同放在一起。 第二轮ik相同的放在一起。 问题2 求和问题 问题3 不重复元素

【机器学习基础】DBSCAN

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;相对完整的机器学习基础教学&#xff01; ⭐特别提醒&#xff1a;针对机器学习&#xff0c;特别开始专栏&#xff1a;机器学习python实战…

C++_string类

目录 一、string的模拟实现 1、初始化字符串 2、拷贝构造 3、赋值重载 4、迭代器 5、比较字符串 6、尾插字符、字符串 7、resize 8、中间插入数据、删除数据 8.1 插入数据 8.2 删除数据 9、查找数据 10、打印对象&#xff08;流插入、流提取&#xff09; 结语&a…

centos7部署minio单机版

一、目标 在centos7上部署minio单机版 二、centos7部署minio 1、下载minio mkdir /usr/local/minio cd /usr/local/minio wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod x minio 2、新建minio存储数据的目录 mkdir -p /data/minio/data3、新建…

ASP.NETCore WebAPI 入门 杨中科

ASP.NETCore WebAPI入门1 回顾 mvc开发模式 前端代码和后端代码是混在一个项目之中 WEB API 1、什么是结构化的Http接口。Json。 2、Web API项目的搭建。 3、Web API项目没有Views文件夹。 4、运行项目&#xff0c;解读代码结构。 5、【启用OpenAPI支持】→>swagger,在界…

Spring的IOC解决程序耦合

目录 1.配置项目 1.1配置pom.xml 1.2Spring常用功能的Jar包依赖关系 1.3简单代码 2.IOC 2.1.applicationContext.xml 2.2.测试 3.DI 3.1概述 3.2.构造函数注入 3.3set方法注入 3.4自动注入 3.5注入集合类型的属性 1.配置项目 1.1配置pom.xml <?xml version&…

【算法每日一练]-动态规划(保姆级教程 篇14) #三倍经验 #散步 #异或和 #抽奖概率

目录 今日知识点&#xff1a; 金字塔的正反dp两种方案&#xff0c;转移方程取决于dp的具体含义 取模实现循环走m步回到原点的方案 在统计上升子序列的时候使用最小结尾元素进行标记&#xff0c;一举两得 将亏本的概率转换各种情况的方案&#xff0c;然后统计亏本的情况的方…

数字孪生技术详解

在线工具推荐&#xff1a;3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 数字孪生技术正在迅速彻底改变企业的运营方式。借助数字孪生技术&#xff0c…

【Nginx】在线安装与离线安装

目录 1、下载nginx news 1.2、 安装包 2、 在线安装 第一步&#xff0c;安装pcre 第二步&#xff0c;安装openssl 、zlib 、 gcc 依赖 第三步&#xff0c;安装nginx 第四步&#xff0c;关闭防火墙&#xff0c;访问nginx ​编辑 3、 离线安装 第一步 安装pcre 第二步…

【KingbaseES】实现MySql函数Median

本方法只支持在聚合函数窗口中调用 不支持在GROUP BY中使用&#xff0c;使用plsql写的玩意新能都会稍微差一些 建议使用原生方法修改 CREATE OR REPLACE FUNCTION _final_median(numeric[])RETURNS numeric AS $$SELECT AVG(val)FROM (SELECT valFROM unnest($1) valORDER BY …

vue中动态出来返回的时间秒数,在多少范围显示多少秒,多少范围显示分,小时等等

在Vue中&#xff0c;你可以使用计算属性&#xff08;computed property&#xff09;或过滤器&#xff08;filter&#xff09;来根据动态返回的时间秒数来显示不同的时间单位&#xff0c;比如秒、分、小时等等。 下面是一个使用计算属性的示例&#xff1a; <template>&l…

【Python小游戏】消消乐丨喜羊羊与灰太狼(完整代码)

文章目录 写在前面喜羊羊与灰太狼PyGame入门消消乐注意事项写在后面写在前面 本期内容:基于pygame实现喜羊羊与灰太狼版消消乐小游戏 实验环境 python3.11及以上pycharmpygame安装pygame的命令: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pygame喜羊羊与灰…

毛虫目标检测数据集VOC格式550张

毛虫&#xff0c;一种令人惊叹的生物&#xff0c;以其独特的外貌和习性&#xff0c;成为了自然界中的一道亮丽风景。 毛虫的外观非常特别&#xff0c;身体呈圆柱形&#xff0c;表面覆盖着许多细小的毛发&#xff0c;这使得它们在叶子上伪装得非常好。它们的头部有一对坚硬的颚…

select for update会锁表还是行锁还是其它

select for update含义 select查询语句是不会加锁的&#xff0c;但是 select for update除了有查询的作用外&#xff0c;还会加锁呢&#xff0c;而且它是悲观锁哦。至于加了是行锁还是表锁&#xff0c;这就要看是不是用了索引/主键啦。 没用索引/主键的话就是表锁&#xff0c…