当前位置: 首页 > news >正文

数据科学 - 模型检验

1. 前言

模型检验是数据科学项目中至关重要的步骤,确保模型的质量,可靠性和实用性。

模型检验的主要目的是评估模型的性能,验证其在实际应用中的效果,以及防止模型出现过拟合,欠拟合或其他潜在问题。

在日常学习工作中,我们常常使用sklearn中的metrics包,富含了许多模型检验函数。

#安装方式1:命令行与终端安装
pip install -U scikit-learn#安装方式2:基于Anaconda环境
conda install scikit-learn
from sklearn.metrics import ###

2. 分类模型

2.1 评价指标

精准率(Accuracy)

正确分类样本数量与总样本数量的百分比

accuracy_score(y_true,y_pred)

 

精确率(Precision)

正确预测为正类的样本数占所有预测为正类的样本数的比例

•适用场景:任务关注的是预测为正类的样本是否真的为正类时

precision_score(y_true,y_pred,average='None/macro/micro/weighted')
参数用途适用场景
binary适用于二分类问题,只会计算正类(通常标签为1)的精确率二分类问题
micro计算全局精确率,所有类别加总进行计算多分类问题
macro计算每个类别的Precision,然后取平均每个类别给予相同的权重
weighted计算每个类别精确率,按照各个类别样本数量进行加权平均类别样本数量不平衡时
samples计算每个样本的精确率,然后对所有样本取平均多标签分类问题,其中每个样本可以同时属于多个类别

 

召回率(Recall)

正确预测为正类的样本占所有实际为正类的样本数的比例

•适用场景:关注的是所有正类样本是否被找出来时

recall_socre(y_true,y_pred,average='binary')

参数同precision

F1-score

2 * Recall*Precision / (Recall+Precision)

•适用场景:平衡Precision与Recall,尤其是样本类别分布不均时适用。

f1_score(y_true,y_pred,average='binary')

分类报告

生成包含精确率,召回率,F1-score和支持度的分类报告。

from sklearn.metrics import classification_report
classification_report(y_true,y_pred)

 

2.2 ROC曲线

roc曲线横坐标与纵坐标也是两个评价指标,在每个阈值的情况下,模型指标数值也会随之改变,依次描点得来。

横坐标:FPR = FP / (FP+TN)表示为实际为负类样本中,被错误预测为正类的比例

纵坐标:Recall - 正确预测为正类的样本占所有实际为正类的样本数的比例

换个理解方式,横坐标向右移动,代表模型预测负类样本错误率就越高

纵坐标向上移动,模型预测正类样本的正确率就越高

所以根据ROC曲线,越靠近(0,1)的点,模型预测效果就越好。

from sklearn.metrics import roc_curve,roc_auc_score
fpr,tpr,thresholds = roc_curve(y_true,y_proba)

注意:此处所填充数据不是y_pred,而是y_proba预测概率,以此确定在不同阈值下模型的分类效果

model.predict_proba(X_test)
y_proba = model.predict_proba(X_test)[:,1]
#返回一个二维数组,例如[0.7,0.3];表示70%概率属于第一个类别(0,负类),30%概率为正类(1)
#清洗数据时一般默认0为负类,1为正类
import matplotlib.pyplot as plt
plt.figure()
plt.plot(fpr,tpr,color='blue')
plt.plot([0,1],[0,1],'--',color='red')
plt.plot(best_fpr,best_tpr,marker='o',markersize=8,color='black')
plt.text(best_fpr,best_tpr+0.1,'best threshold')
plt.xlabel('FPR')
plt.ylabel('TPR')
plt.title('ROC curve')

基于最靠近(0,1)的点选择最佳阈值: 

 

AUC

表示ROC曲线与坐标轴之间的面积,面积越大,说明该模型预测效果越好

from sklearn.metrics import roc_auc_socre
roc_auc_score(y_true,y_proba)

 更深入了解请参考:超简单白话文机器学习 - 模型检验与评估(含算法介绍,公式,源代码实现以及调包实现)_机器学习模型检验-CSDN博客

2.3 混淆矩阵

混淆矩阵是一种用于评估分类模型性能的工具,特别是在二分类问题中。直观展示模型在不同类别上的预测结果,了解模型分类准确率以及各种类型的错误。

列表示样本实际类别,行表示样本预测类别。

基于预测与真实判断时真假,预测值决定P与N。

实际|预测预测为负 Negative预测为正 Positive
实际为负 NegativeTNFP
实际为正 PositiveFNTP
form sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_true,y_pred)

这样生成出来的混淆矩阵较为简陋,数据分析有时需要让数据更加直观,可视图更加直观

seaborn

import seaborn as ins
sns.heatmap(cm,annot=True,fmt='d',cmap='YlGnBu',cbar=True)
#annot指定在图中是否显示数值
#fmt数值显示类型 .2f显示小数
#cmap配色方案,例如'Viridis','coolwarm','Blues'
#cbar是否显示颜色条

ConfusionMatrixDisplay

from sklearn.metrics import ConfusionMatrixDisplay
CM = ConfusionMatrixDisplay(cm)
CM.plot(cmap='')

也可以直接从模型中生成混淆矩阵

ConfusionMatrixDisplay.from_estimator(model,X_test,y_test,cmap='Blues')
plt.show()

 

3. 回归模型

3.1 评价指标

指标函数用途
均方误差(MSE)mean_squared_error(y_true,y_pred,squared=True)计算模型均方误差,预测值与实际值之间的误差;squared=False时计算RMSE(MSE取平方根)
平均绝对误差(MAE)mean_absolute_error(y_true,y_pred)计算模型的平均绝对误差
中位数绝对误差median_absolute_error(y_true,y_pred)计算模型中位数绝对误差

3.2 系数

R²(决定系数)

决定系数(Coefficient of Determination),通常表示为 R²,是一种用于评估回归模型拟合优度的统计指标。它表示因变量的变异性能够由模型解释的比例,即模型对数据的拟合程度。

R² 的取值范围在 0 到 1 之间。一个较高的 R² 值表示模型能够较好地解释因变量的变异性,即模型的拟合程度较好。

计算方式如下:

其中SSres表示预测值与实际值之间差异的平方和(越小越好),模型无法解释的因变量的剩余变异性,即模型无法完全拟合的部分; 1 - SSres则表示模型可以解释的部分: 

 

SStot表示实际值与均值之间差异的平方和,其意义在于没有考虑任何自变量的情况下,因变量的总变异性: 

 

R² 只能衡量模型对因变量的拟合优度,但不能判断模型是否具有因果关系、是否过拟合或是否适合应用于其他数据集。 

from sklearn.metrics import r2_score
r2 = r2_score(y_true,y_predict)#或者使用model.score方法
r2_alternative = model.score(X_test,y_test)

4. 参考资料:

超简单白话文机器学习 - 模型检验与评估(含算法介绍,公式,源代码实现以及调包实现)_机器学习模型检验-CSDN博客

均方误差(MSE)、均方根误差(RMSE)、平均绝对误差(MAE)、决定系数(R²)解释-CSDN博客

相关文章:

数据科学 - 模型检验

1. 前言 模型检验是数据科学项目中至关重要的步骤,确保模型的质量,可靠性和实用性。 模型检验的主要目的是评估模型的性能,验证其在实际应用中的效果,以及防止模型出现过拟合,欠拟合或其他潜在问题。 在日常学习工作…...

【GaussDB(DWS)】数仓部署架构与物理结构分析

数仓架构与物理结构分析 一、部署架构二、物理结构三、测试验证 一、部署架构 华为数据仓库服务DWS,集群版本8.1.3.x 集群拓扑结构: 上述拓扑结构为DWS单AZ高可靠部署架构,为减少硬件故障对系统可用性的影响,建议集群部署方案遵…...

git做版本管理的时候,中途添加了新的内容在.gitignore中,怎么让git不再跟踪

当您在 .gitignore 文件中添加了新的路径模式后,Git 将不再跟踪这些路径下的新文件。但是,如果这些路径下的文件已经被 Git 跟踪(即它们已经被提交到仓库),您需要执行一些额外的步骤来让 Git 停止跟踪这些文件。 以下…...

Unity新输入系统 之 PlayerInput(真正的最后封装部分)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​ 首先你应该了解新输入系统的基本单位和输入配置文件 Unity新输入系统 之 InputAction(输入配置文件最基本的…...

跨部门协作:观测云在促进业务与技术团队合作中的作用

在当今的企业环境中,业务与技术团队之间的紧密合作对于推动创新和提升效率至关重要。观测云平台作为一个强大的数据监控和分析工具,在这方面发挥着至关重要的作用,它通过提供统一的数据视图和协作工具,促进了跨部门间的有效协作。…...

OceanBase V4.3 列存引擎之场景问题汇总

在OceanBase 4.3版本发布后(OceanBase社区版 V4.3 免费下载),其新增的列存引擎,及行列混存一体化的能力,可以支持秒级实时分析,引发了用户、开发者及业界人士的广泛讨论。本文选取了这些讨论中较为典型的一…...

Spring中的Aware接口及应用场景

Spring框架提供了一些Aware接口,例如ApplicationContextAware, BeanFactoryAware, EnvironmentAware等,这些接口允许你的Bean获取Spring容器的资源。 例如,如果你的Bean实现了ApplicationContextAware接口,那么Spring在启动的时候…...

设计模式 - 建造者模式

💝💝💝首先,欢迎各位来到我的博客!本文深入理解设计模式原理、应用技巧、强调实战操作,提供代码示例和解决方案,适合有一定编程基础并希望提升设计能力的开发者,帮助读者快速掌握并灵活运用设计模式。 💝💝💝如有需要请大家订阅我的专栏【设计模式】哟!我会定…...

MySQL数据分析进阶(十二)设计数据库——PART4

;※食用指南:文章内容为‘CodeWithMosh’SQL进阶教程系列学习笔记,笔记整理比较粗糙,主要目的自存为主,记录完整的学习过程。(图片超级多,慎看!) 【中字】SQL进阶教程 |…...

在 Spring Boot 中使用桥接模式实现灵活的报表生成服务

在软件开发中,桥接模式是一种结构型设计模式,用于将抽象部分与它的实现部分分离,使得这两部分可以独立变化。这种模式非常适合处理需要灵活配置和扩展的场景,比如报表生成服务。本文将详细介绍如何使用桥接模式来实现一个灵活的报…...

算法:外卖调度

题目 有N个餐厅和M个外卖员,每个餐厅在某个时间点会产生一个外卖订单,这些订单都有产生时间、所需送达时间和优先级。外卖员在空闲时会选择最优先的订单来配送,直到所有订单都被送达。具体规则如下: 对于每个餐厅的订单,优先级高…...

leetcode50. Pow(x, n),快速幂算法

leetcode50. Pow(x, n),快速幂算法 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000 示例 2: 输入&#xff…...

Xinstall神器来袭,轻松搞定CPA推广渠道统计!

在数字化营销日益盛行的今天,CPA(按行动付费)推广已成为众多企业营销的重要手段。然而,随着渠道流量和获客途径的不断变化,CPA推广渠道统计的痛点也日益凸显。别担心,Xinstall来帮你解决问题! …...

011 | efinance分析豆一主连期货

👉👉👉 《玩转Python金融量化专栏》👈👈👈 订阅本专栏的可以下载对应的代码和数据集 🚀 上一篇🌟 下一篇⬅️ 010 东方财富帖子标题情绪分析012 akshare分析NYBOT棉花历史数据 ➡️豆一主连期货(通常简称“豆一”)是指中国期货市场上以大豆为标的的期货合约…...

【Python】函数入门(下)

3))* ** ​​​​​​注意:也遵循位置传参在前面,按关键字传参在后面。 代码示例: def func(*args,**kwargs):print(args,kwargs) 该函数中的参数会自动根据传参的方式不同(即:按位置…...

git的基本概念和使用原理

Git是一个分布式版本控制系统,用于跟踪文件的更改并协调多个开发人员之间的工作。以下是Git的基本概念和使用原理及方式: 目录 基本概念 使用原理 基本操作示例 基本概念 版本库(Repository): 版本库是Git用来保存…...

手写简化版的vue-router

vue-router作为vue全家桶之一的重要插件,有必要去深究一下,今天我们就从0到1手写一个简化版本。 开始之前,我们使用路由插件时是先进行下载路由 npm i vue-router ,然后在main.js中使用app.use导入router插件。想要手写vue-rou…...

分享一个基于uni-app的蛋糕商城订购小程序的设计与实现(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…...

Python绘图入门:使用Matplotlib绘制柱状图

Python绘图入门:使用Matplotlib绘制柱状图 柱状图是一种常见的数据可视化方式,能够直观地展示不同类别之间的数据差异。在Python中,Matplotlib是一个非常强大且灵活的绘图库,它不仅能绘制简单的图表,还能创建复杂的多…...

Qt5编译qmqtt库使用MQTT协议连接华为云IOT完成数据上传与交互

一、前言 随着物联网技术的发展,越来越多的设备通过网络互相连接,形成了庞大的智能系统。这些系统能够收集、分析并响应各种数据,从而实现自动化控制和智能化管理。在这个背景下,MQTT 成为了一个广泛使用的轻量级消息传输协议,特别适用于资源受限的环境,如移动应用或远程…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

测试markdown--肇兴

day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...