数据科学 - 模型检验
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 |
| 实际为负 Negative | TN | FP |
| 实际为正 Positive | FN | TP |
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: 输入ÿ…...
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 成为了一个广泛使用的轻量级消息传输协议,特别适用于资源受限的环境,如移动应用或远程…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
