Sklearn中的算法效果评估手段

news2024/12/25 1:52:36

我们曾在《算法效果评估:均方根误差(RMSE)/ 标准误差》一文中介绍过评估算法效果使用的主要方法:均方根误差(RMSE),但在实际应用中,评估算法效果还有更多内容,本文我们以《Hands-On ML》一书第二章中介绍的房价预测案例,细致地介绍一下Sklearn中的度量一个算法表现/效果好坏的手段。

在模型选择阶段,我们通常会尝试不同的算法,然后评估它们的表现,并选择最好的一种算法。这个过程大致可以分为如下几步:

  • 第一步:选择一个算法,使用准备好的训练数据进行训练(拟合),得到经过训练的模型(可简单理解为一个函数);
  • 第二步:使用模型对数据进行预测,得到预测结果;
  • 第三步:将预测结果和准备好的标注数据(labels)进行比对,比对的方法就是计算预测数据和标注数据之间的:均方根误差(RMSE),根据均方根误差的大小来度量算法优劣

然后,使用另一个算法重复上述操作,直至选出最优算法。其中,在第三步的度量过程中,人们首先会想到的做法是:直接拿训练数据做一次预测,看一下均方根误差,因为训练数据是现成的,顺手就可以完成。但是,当我们实际去这样做的时候,很快就会发现这一做法存在“巨大缺陷”,因为很多模型在预测自己的训练数据集时通常都表现得非常好,一旦应用于新数据的预测上,效果就会大幅下滑,这就是所谓的“过拟合”,如果在算法验证阶段不换用一些新数据做一下对比测试,你就无法检测出模型的过拟合问题,换句话说就是:总是使用训练数据进行预测永远无法全面可信地度量算法效果。

这个时候,你可能会想到:我们在数据预处理时不是有切分过训练数据集和测试数据集吗,这时候可以拿来用了呀?确实如此,但是在当下这个阶段(模型选择阶段),还不需要搬出测试数据集),因为仅仅依靠训练数据集1,我们一样有办法来规避这个问题,同时还能更全面有效的进行评估,这套方法的基本思路是:

将训练数据集切分成n等份,以10份为例,保留1份(10%)作为测试数据,使用另外9份(合在一起,90%)数据训练模型,训练完成后用那1份预留数据进行测试,得到一个评估结果(RMSE),作为模型本轮的得分;然后进行第二轮操作:再次保留1份(10%)测试数据(是此前没被当作测试数据的数据,也就是第一轮9份训练数据中的一份),使用其余9份数据训练模型,训练完成后用这1份预留数据进行测试,得到第二轮的评估结果(RMSE),如此反复,总共可以执行10次验证,进而会得到10个成绩(RMSE)。我们可以观察这10次测试成绩的均值和标准差,它们能更好的反应算法的效果。(注意:上述切分方方案仅限于模型选择阶段对算法效果的评估上,在模型正式的训练环节,一定是使用全部的训练数据集,已便获得最好的训练效果。)

以上给出的设计思路就是Sklearn中名为“K-fold”的模型效果交差验证功能(一个函数),K-fold就是n等份的意思,用我们的例子说就是“10等份”交叉验证。以下是《Hands-On ML》一书第二章使用K-fold交差验证法评估决策树在预测房价上的性能表现:

from sklearn.model_selection import cross_val_score
tree_rmses = -cross_val_score(tree_reg, housing, housing_labels,
                              scoring="neg_root_mean_squared_error", cv=10)

其中,cv指定了切分的份数,也就决定了验证的轮数,进而决定了结果数组tree_rmses的元素数量。scoring是指定打分标准,这里选择的是“负的均方根误差”(neg指的是negtive),为什么是负的呢?因为没有正的!这里有一个Sklearn的知识点:在scoring的可选值列表中,只有neg_root_mean_squared_error,没有root_mean_squared_error,原因是:Sklearn的cross-validation期望所有的评估保持一致的风格和习惯,即:数值越大表示效果越好(greater is better,在对于按得分排序非常友好),正是出于这种约定,Sklearn只提供“负的均方根误差”,因为均方根误差都是正值,且其值越小表示算法效果越好,为了适配上述规则(也便于按分数排序),所以故意取了均方根误差的负值。实际上,Sklearn中所有值越小表示效果越好的度量值都附加了求负运算,并在名称前追加了neg前缀以示区分:

请添加图片描述

如果是输出给人看,只要简单地在负值上再做一次求负操作,负负得正,就拿到标准的均方根误差了,就像上面示例代码中那样。


  1. 《Hands-On ML》在第2版时只使用训练数据集做cross-validation,但是到了第3版就使用全体(训练+测试)数据集进行验证了,因为这只发生在验证阶段,对正式的模型训练没有影响,所以,本着数据量越大效果越好的原则,第3版使用全体(训练+测试)数据集进行验证其实是更好的 ↩︎

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

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

相关文章

VsCode安装及修改插件存储位置

【官网】: https://code.visualstudio.com/ 【修改插件仓库】: 创建名为VSCODE_EXTENSIONS的环境变量,内容指向自定义的文件夹即可(位置无需限制)。 【需要安装的插件】:

SBOM的介绍与syft和grype的使用

文章目录SBOM介绍工具syftgrypeSBOM介绍 SBOM(软件物料清单)是给定产品的中所有软件组件(专有和开源代码)、开源许可证和依赖项的清单。它提供了对软件供应链以及可能存在的任何许可证合规性、安全性和质量风险的可见性。 SBOM可…

Hystrix如何达到高可用

小型电商网站的页面展示采用页面全量静态化的思想。数据库中存放了所有的商品信息,页面静态化系统,将数据填充进静态模板中,形成静态化页面,推入Nginx服务器。用户浏览网站页面时,取用一个已经静态化好的html页面,直接返回回去,不涉及任何的业务逻辑处理。 用户每次浏览…

python输出不重复的字符

项目场景: 输入一个字符串,把最左边的10个不重复的字符(大小写算不同字符)挑选出来。 如不重复的字符不到10个,则按实际数目输出。问题描述 输出一个字符串,包含字符串s最左边10个不重复的字符。不到10个…

Canal与Kafka数据传输协议protocol buffer

1.写在前面 实时数仓开发中,利用Canal伪装slave获取MySQL的增量数据,获取后的数据由Kafka生产者接收,交由Flink实时流计算。传输数据量较大时,会占用内存及带宽,所以考虑将数据序列化和反序列化操作,这里介…

KNN(K-近邻)算法

1、概述 KNN(K−NearestNeighbor)KNN \left( K-Nearest Neighbor \right)KNN(K−NearestNeighbor)是机器学习中最基础的算法之一。既可以用于分类也可以用于回归,KNNKNNKNN通过测量不同特征值之间的距离来进行分类。 2、实例理解 如果k3k 3k3,绿色圆点…

【Cocos新手入门】使用 cocos creator 创建单行文本输入框及多行文本输入框

本篇文章主要讲解使用 cocos creator 创建单行文本输入框及多行文本输入框,并绑定文本框获取文本输入数据的方法。 作者:任聪聪 日期:2023年2月2日 cocos引擎版本2.4.3 实际效果 单行文本效果、多行文本效果 说明:如果不清楚按钮…

jquery:表单请求、序列化+案例

表单请求提交原则name相同的表单提交,name出现多次,对应不同表单的值没有name,含有disabled(禁用)禁止提交多选单选下拉列表需要设置value属性才能取值表单提交事件名称写法描述提交方式method“get”get不安全取数据&…

30. 面向对象高级编程

1. __solts__ 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。 from types import MethodTypeclass Student:def __init__(self):passdef set_num(sel…

OSCP_VULHUB_Matrix3

文章目录简介扫描ida汇编ssh登录/提权简介 下载地址: https://download.vulnhub.com/matrix/Machine_Matrix_v3.ova 环境: VMware 16虚拟机软件 Matrix3靶机IP地址:192.168.132.145 Kali的IP地址:192.168.132.139 Matrix3靶机与…

Shiro基础知识与集成应用

1、Shiro可以完成: 【认证、授权、加密、会话管理】、与Web集成、缓存等2、特点: 易于使用、全面、灵活、强力支持Web、兼容性强、社区支持 外部观看内部观看3、 登录认证:1)身份验证:一般需要提供如身份ID等一些标识信息来表明登录者的身份,如提供email…

Druid(德鲁伊)数据库连接池

文章目录一.数据库连接池的必要性(一).传统数据库连接模式的的步骤(二).传统数据库连接模式存在的问题二.数据库连接池技术(一).数据连接池的思想:(二).数据库连接池的任务:(三).数据库连接池的规模:(四).工作原理:(五).数据库连接…

5 -【Faster R-CNN】之 AnchorGenerator 代码精读

【Faster R-CNN】之 AnchorGenerator 代码精读1、anchor 的 size 和 aspect_ratios2、计算以中心坐标为 (0, 0) 的 anchor3、将 anchor 映射到原图上4、代码汇总anchor 的作用:anchor 是用来做辅助计算的,用于和 (上节课说的,由RP…

共享模型之内存(一)

1.Java内存模型 1>.JMM即Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等; 2>.JMM体现在以下几个方面: ①.原子性 - 保证指令不会受到线程上下文切换的影响; ②.可见性 - 保证指令不会受cpu缓存的影响; ③.有序…

大型会场活动线上保障方案

背景 为保证活动上线后的质量,大型会场活动上线前通常会预设一些线上可能出现的问题,提前制定保障方案。 这些与活动保障相关的问题可能与App端上的容器环境有关,也可能与大盘用户设备特征有关,问题的处理方案会影响活动的线上效…

《啊哈算法图的遍历》(14张图解)

目录 前言 一,dfs和bfs是什么 二,城市地图--图的深度优先遍历 三,最少转机--图的广度优先遍历 前言 🌼说爱你(超甜女声版) - 逗仔 - 单曲 - 网易云音乐 1月22日一个女孩加了我,她和我聊音…

adb常用指令合集

adb文件管理指令 1.复制设备里的文件到电脑 adb pull <设备里的文件路径> [电脑上的目录] 电脑上的目录 参数可以省略&#xff0c;默认复制到当前目录 例&#xff1a;adb pull /data/tsplogtool /home/jxq/文档/场景魔方 2.复制电脑里的文件到设备 adb push <电脑上的…

浅谈未来10年IT行业的变局与抉择,一文带你认识元宇宙

一. 困局据国家就业部门最新统计数据报告&#xff0c;2022年应届毕业生的数量首次突破1000万大关。其中研究生达到130万&#xff0c;985、211等名校毕业生75万&#xff0c;普通本科毕业生470万&#xff0c;专科生460万&#xff0c;另外还有几十万的归国留学生&#xff01;但这还…

《从0开始学大数据》之Spark性能优化案例

基于软件性能优化原则和 Spark 的特点&#xff0c;Spark 性能优化可以分解为下面几步。 性能测试&#xff0c;观察 Spark 性能特性和资源&#xff08;CPU、Memory、Disk、Net&#xff09;利用情况。分析、寻找资源瓶颈。分析系统架构、代码&#xff0c;发现资源利用关键所在&a…

【前端】Vue项目:旅游App-(17)home:页面滚动显示搜索栏、节流、时间同步

文章目录目标过程与代码页面滚动到目标位置显示搜索框优化&#xff1a;节流搜索栏显示时间同步效果总代码修改或添加的文件search-bar.vueuseScroll.jsstore的main.jsformatDate.jshome.vue参考本项目博客总结&#xff1a;【前端】Vue项目&#xff1a;旅游App-博客总结 目标 …