当前位置: 首页 > 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 成为了一个广泛使用的轻量级消息传输协议,特别适用于资源受限的环境,如移动应用或远程…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

React Native 导航系统实战(React Navigation)

导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

GitHub 趋势日报 (2025年06月06日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...