24/9/16 算法笔记 评估模型

评估机器学习模型的性能是一个关键步骤,它可以帮助我们了解模型在实际应用中的表现。以下是一些常用的评估模型的方法:

  1. 准确率(Accuracy)

    • 最常见的评估指标,表示正确预测的样本数占总样本数的比例。
  2. 精确度(Precision)

    • 表示预测为正类别中实际为正类别的比例,适用于处理类别不平衡的问题。
  3. 召回率(Recall)

    • 表示实际为正类别中被正确预测为正类别的比例,也称为真正例率(True Positive Rate)。
  4. F1分数(F1 Score)

    • 精确度和召回率的调和平均数,用于综合考虑精确度和召回率。
  5. 混淆矩阵(Confusion Matrix)

    • 一个表格,用于显示实际类别与模型预测类别之间的关系。
  6. ROC曲线和AUC值

    • 接收者操作特征曲线(ROC Curve)和曲线下面积(AUC)用于评估分类器的性能,特别是在不同阈值设置下。
  7. 交叉验证(Cross-Validation)

    • 将数据集分成多个子集,通过在不同的子集上训练和测试模型来评估模型的稳定性和泛化能力。
  8. 均方误差(MSE)和均方根误差(RMSE)

    • 用于回归任务,衡量模型预测值与实际值之间的差异。
  9. 平均绝对误差(MAE)

    • 另一种衡量预测值与实际值差异的指标,对异常值的敏感度较低。
  10. 对数损失(Log Loss)

    • 用于评估分类模型的概率预测,也称为交叉熵损失。
  11. 模型的解释性

    • 使用特征重要性、部分依赖图(PDP)、LIME等方法来解释模型的预测。
  12. 在线学习评估

    • 在模型部署后,通过实时数据继续评估模型的性能。

1.准确率(Accuracy)是评估分类模型性能的一种常见方法,它衡量的是模型正确预测的样本数占总样本数的比例。

# 预测测试集
y_pred = model.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)

2.精确度(Precision)是分类模型性能评估的另一个重要指标,特别是在处理数据集不平衡的情况下。精确度衡量的是模型预测为正类别(positive class)的样本中,实际为正类别的比例。

# 预测测试集
y_pred = model.predict(X_test)# 计算精确度
precision = precision_score(y_test, y_pred)

3.召回率(Recall)是分类问题中评估模型性能的一个重要指标,尤其在数据集不平衡的情况下。召回率也被称为真正率(True Positive Rate, TPR)或灵敏度(Sensitivity),它衡量的是模型正确识别的正类别样本占所有实际正类别样本的比例。

召回率的计算公式如下:

其中:

  • TP(True Positives)是模型正确预测为正类别的样本数量。
  • FN(False Negatives)是模型错误预测为负类别的实际正类别样本数量。

召回率的取值范围是0到1(或者以百分比表示,从0%到100%),召回率越高,表示模型识别正类别的能力越强。

召回率的重要性:

  • 在某些应用中,如医疗诊断、欺诈检测等,错过一个正类别样本(假阴性)的代价可能非常高,因此召回率是一个关键指标。
  • 高召回率意味着较少的正类别样本被漏检。

召回率与精确率的关系:

召回率和精确率(Precision)通常是一对权衡的指标。提高召回率可能会降低精确率,反之亦然。精确率衡量的是模型预测为正类别的样本中实际为正类别的比例。

# 假设y_true是真实标签,y_pred是模型预测的标签
y_true = [0, 1, 0, 1, 0]
y_pred = [0, 1, 0, 0, 1]# 计算召回率
recall = recall_score(y_true, y_pred)
如果你处理的是多分类问题,可以通过设置average参数来计算全局召回率,例如average='macro'计算宏平均召回率,average='micro'计算微平均召回率。
  • 在类别不平衡的数据集中,准确率(Accuracy)可能会产生误导,因为它不能反映模型对少数类别的识别能力。在这种情况下,召回率、精确率和其他指标更为重要。

4.F1分数(F1 Score)是分类问题中评估模型性能的另一个重要指标,尤其是在数据集不平衡的情况下。F1分数是精确率(Precision)和召回率(Recall)的调和平均数,它试图在精确率和召回率之间找到一个平衡。

F1分数的计算公式如下:

其中:

  • Precision 是模型预测为正类别中实际为正类别的比例。
  • Recall 是所有实际正类别中,模型正确预测为正类别的比例。

F1分数的取值范围也是从0到1(或者以百分比表示,从0%到100%),F1分数越高,表示模型的性能越好。

F1分数的重要性:

  • F1分数对于评估那些对假阳性(False Positives, FP)和假阴性(False Negatives, FN)都敏感的任务非常有用。
  • 当精确率和召回率同等重要时,F1分数是一个合适的指标。

在分类问题中,特别是在二分类问题中,假阳性(False Positive, FP)和假阴性(False Negative, FN)是两种类型的预测错误,它们的定义如下:

  1. 假阳性(False Positive, FP)

    • 也称为第一类错误。
    • 指的是模型错误地将负类别(实际为负)预测为正类别的情况。
    • 在医学检测中,如果一个健康的人被错误地诊断出患有某种疾病,这就是一个假阳性。
  2. 假阴性(False Negative, FN)

    • 也称为第二类错误。
    • 指的是模型错误地将正类别(实际为正)预测为负类别的情况。
    • 在医学检测中,如果一个实际患病的人被错误地诊断为健康,这就是一个假阴性。

5.混淆矩阵(Confusion Matrix)是一个用于评估分类模型性能的工具,特别是在二分类问题中。它展示了模型的预测结果与实际标签之间的关系。混淆矩阵通常包含四个基本要素:真正例(True Positives, TP)、假正例(False Positives, FP)、真负例(True Negatives, TN)和假负例(False Negatives, FN)。

# 假设y_true是真实标签,y_pred是模型预测的标签
y_true = [0, 1, 0, 1, 0]
y_pred = [0, 1, 1, 0, 0]# 计算混淆矩阵
cm = confusion_matrix(y_true, y_pred)

这就是一个绘制的混淆矩阵

这个任务中错误还是非常少的了。

6.ROC曲线(Receiver Operating Characteristic Curve)是一种用于评估二分类模型性能的工具,它通过绘制不同阈值下的真正例率(True Positive Rate, TPR)和假正例率(False Positive Rate, FPR)来表示模型的分类能力。真正例率也称为召回率或灵敏度,而假正例率是1减去特异性。ROC曲线下的面积(AUC)是衡量模型性能的一个重要指标,AUC值越高,模型的分类性能越好。

AUC(Area Under the Curve)的值介于0和1之间,可以解释为随机选取一个正样本和一个负样本,模型将正样本排在负样本前面的概率。AUC值越高,表示模型的分类能力越好。AUC值为0.5时,表示模型的分类能力等同于随机猜测,而AUC值接近1时,表示模型具有很高的分类准确性。

在实际应用中,AUC是一个重要的性能指标,因为它不依赖于特定的分类阈值,可以全面地评价模型的分类能力。AUC适用于各种不同的场景,包括医学诊断、信用评估、欺诈检测等领域。通过ROC曲线和AUC值,我们可以比较不同模型的性能,选择最适合的模型来解决特定的分类问题。

在Python中,可以使用scikit-learn库中的roc_curveauc函数来计算ROC曲线和AUC值。以下是一个简单的示例代码:

# 假设y_true是真实标签,y_scores是模型预测的分数
y_true = [0, 1, 0, 1]
y_scores = [0.1, 0.4, 0.35, 0.8]# 计算ROC曲线
fpr, tpr, thresholds = roc_curve(y_true, y_scores)# 计算AUC值
roc_auc = auc(fpr, tpr)# 绘制ROC曲线
plt.figure()
lw = 2
plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

7。交叉验证(Cross-Validation)是一种统计学方法,用于评估并提高模型的泛化能力。它通过将数据集分成几个子集,然后使用其中的一部分进行训练,剩余的部分用于验证,这个过程重复多次,每次选择不同的子集作为验证集。最常用的交叉验证方法是k折交叉验证(k-fold cross-validation)。

交叉验证的步骤:

  1. 数据分割:将整个数据集随机分成k个大小相等的子集。
  2. 训练与验证:对于每一个子集:
    • 将该子集作为验证集,剩余的k-1个子集合并作为训练集。
    • 训练模型并调整参数。
    • 使用模型对验证集进行预测,并记录性能指标。
  3. 性能评估:计算所有k次验证的性能指标的平均值,这提供了模型泛化能力的估计。

k折交叉验证的优点:

  • 高效利用数据:所有数据点都被用于训练和验证,提高了数据的利用效率。
  • 减少偏差:通过多个训练集和验证集的组合,减少了模型评估的偏差。
  • 评估模型稳定性:可以评估模型在不同数据子集上的表现,了解模型的稳定性。

k折交叉验证的缺点:

  • 计算成本高:需要训练k次模型,对于大型数据集或复杂模型,这可能是计算密集型的。
  • 随机性:数据的随机分割可能导致不同的结果,因此可能需要多次运行以获得稳定的估计。
from sklearn.model_selection import cross_val_score
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target# 创建模型
model = LogisticRegression()# 进行5折交叉验证
scores = cross_val_score(model, X, y, cv=5)# 打印每次验证的准确率
print(scores)# 打印平均准确率
print("平均准确率: {:.2f}%".format(scores.mean() * 100))

8.均方误差(Mean Squared Error, MSE)和均方根误差(Root Mean Squared Error, RMSE)是回归问题中最常用的性能评估指标,用于衡量模型预测值与实际值之间的差异。

均方误差(MSE)

MSE 是预测误差的平方和的平均值,它可以量化模型预测值与实际值之间的偏差。MSE 的计算公式如下:

其中:

  • n 是样本数量。
  • yi​ 是第 ii 个样本的实际值。
  • y^​i​ 是第 ii 个样本的预测值。

MSE 的值越小,表示模型的预测越准确。

均方根误差(RMSE)

RMSE 是 MSE 的平方根,它以与原始数据相同单位的测量尺度来表示预测误差的大小。RMSE 的计算公式如下:

RMSE 与 MSE 相似,都是衡量预测误差的指标,但 RMSE 更直观,因为它与数据的测量尺度相同。

优点

  • MSE 和 RMSE 都很直观,易于理解和解释。
  • 它们都对所有的预测误差进行惩罚,且对较大的误差惩罚更多(因为误差被平方)。

缺点

  • MSE 和 RMSE 对大的预测误差给予更大的权重,这可能导致模型对少数大的预测误差过于敏感。
  • 它们不能直接反映出预测值与实际值之间的关系。

9.平均绝对误差(Mean Absolute Error, MAE)是另一种常用的回归问题性能评估指标,用于衡量模型预测值与实际值之间差异的平均大小。MAE 是所有单个观察值与真实值差的绝对值的平均。

MAE的计算公式如下:

其中:

  • nn是样本数量。
  • yi​ 是第 ii 个样本的实际值。
  • y^​i​ 是第 ii 个样本的预测值。
  • ∣yi​−y^​i​∣ 是实际值与预测值之差的绝对值。

MAE的优点:

  • 直观易懂:MAE 表示预测误差的平均大小,易于理解和解释。
  • 稳健性:与 MSE 和 RMSE 相比,MAE 对异常值(outliers)的敏感度较低,因为它不将误差平方或开方。

MAE的缺点:

  • 不惩罚大误差:MAE 给予所有大小的误差相同的权重,不区分大误差和小误差。
from sklearn.metrics import mean_absolute_error# 假设y_true是真实值,y_pred是预测值
y_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]# 计算MAE
mae = mean_absolute_error(y_true, y_pred)
print("MAE:", mae)

10.对数损失(Logarithmic Loss,也称为Log Loss或Logistic Loss)是用于评估分类模型性能的指标,特别是在二分类问题中。它衡量的是模型预测概率与实际标签之间的差异。对数损失对于所有错误预测都给予惩罚,但对那些与实际标签差异较大的预测给予更大的惩罚。

对数损失的计算公式如下:

对于二分类问题,对于每个样本 ii,其真实标签为 yiyi​(0或1),模型预测为该样本属于正类(1)的概率为 p^i。对数损失计算公式为:

其中:

  • n 是样本数量。
  • yi​ 是第 ii 个样本的实际标签。
  • p^​i​ 是模型预测第 i 个样本为正类的概率。
  • log⁡ 是自然对数。

对数损失的特点:

  • 敏感性:对数损失对错误的预测非常敏感,尤其是当预测概率接近于0或1时,对数损失会变得非常大。
  • 概率输出:对数损失要求模型输出概率估计,而不是类别标签。这使得它适用于那些输出概率预测的模型,如逻辑回归。
  • 惩罚:对数损失通过取对数来惩罚那些与实际标签差异较大的预测。
from sklearn.metrics import log_loss# 假设y_true是真实标签,y_pred_proba是模型预测的正类概率
y_true = [0, 1, 0, 1]
y_pred_proba = [0.1, 0.9, 0.2, 0.8]# 计算对数损失
logloss = log_loss(y_true, y_pred_proba)
print("Log Loss:", logloss)

对数损失是评估模型在二分类问题上性能的有用指标,尤其是当你的模型输出概率预测时。它可以帮助我们了解模型对于正类的预测准确性。

11.模型的解释性

LIME(Local Interpretable Model-agnostic Explanations)和SHAP(SHapley Additive exPlanations)都是用于解释机器学习模型预测的工具,但它们在方法和应用上有所不同。

LIME通过在模型预测附近对数据进行局部扰动,然后使用一个简单的模型(如线性模型)来解释原始模型的预测。这种方法适用于任何类型的模型,并且可以提供对单个预测的解释。LIME的一个关键特点是它能够为每个预测提供一个直观的解释,例如,它可以用来解释图像分类器对特定图像的预测,或者文本分类器对特定文本的处理。

SHAP则基于合作博弈论中的Shapley值,为每个特征分配一个值,表示该特征对模型预测的贡献。SHAP值具有可加性,这意味着可以对特征的贡献进行累加,以得到模型的最终预测。SHAP适用于各种类型的模型,包括线性模型、树模型和深度学习模型,并且可以提供全局或局部的解释。

在实际应用中,如果你需要对单个预测进行解释,LIME可能是一个更好的选择。如果你需要理解模型的整体行为,或者需要对模型的每个预测进行解释,SHAP可能更适合你的需求。

使用LIME解释模型:

import lime
import lime.lime_tabular
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier# 假设你已经有了一个训练好的模型和数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
model = RandomForestClassifier()
model.fit(X_train, y_train)# 创建LIME解释器
explainer = lime.lime_tabular.LimeTabularExplainer(X_train, feature_names=list(X.columns))# 解释单个预测
sample = X_test.iloc[0].values.reshape(1, -1)
explanation = explainer.explain_instance(sample, model.predict_proba)
explanation.show_in_notebook(show_table=True)

使用SHAP解释模型:

import shap# 创建SHAP解释器
explainer = shap.Explainer(model, X_train)
shap_values = explainer(X_test)# 可视化第一个预测的解释
shap.plots.waterfall(shap_values[0])

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

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

相关文章

Linux命令:文本处理工具sed详解

目录 一、概述 二、用法 1、基本语法 2、常用选项 3、命令格式 4、编辑命令 5、获取帮助 三、 示例 1、替换字符串 2、删除行 (1)删除包含"string"的所有行 ​编辑 (2)删除从第1行到第10行的所有行 3、插…

MySQL篇(运算符)(持续更新迭代)

目录 一、简介 二、运算符使用 1. 算术运算符 1.1. 加法运算符 1.2. 减法运算符 1.3. 乘法与除法运算符 1.4. 求模(求余)运算符 2. 比较运算符 2.1. 等号运算符 2.2. 安全等于运算符 2.3. 不等于运算符 2.4. 空运算符 2.5. 非空运算符 2.6.…

java -- JDBC

一.JDBC概述: 过java语言操作数据库中的数据。 1.JDBC概念 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于 执行SQL语句的Java API。JDBC是Java访问数据库的标准规范,可以 为不同的关系型数据库提供统一访问,它由…

CORS跨域请求共享

参考文章: https://xz.aliyun.com/t/12001?time__1311GqGxRGiti%3Dd052x%2BxCwx7qGIxpbDulE%3DoD https://blog.csdn.net/weixin_46622976/article/details/128452494 跨域资源共享 自己的理解,一般来讲,我们使用未授权的接口漏洞,都是因…

Django学习实战篇四(适合略有基础的新手小白学习)(从0开发项目)

前言: 在本章中,我们开始编写面向用户的界面,其中只涉及简单的HTML结构,不会做太多美化,目的就是把后台创建的数据展示到前台。 从技术上来讲,这一节将涉及Django 中function view和 class-based view 的用…

robosuite基础教程(一)——基本概念

robosuite和robomimic都是由ARISE Initiative开发的开源工具,旨在推进机器人学习和机器人操作领域的研究。 一、基本概念 robosuite是一个由MuJoCo物理引擎驱动的模拟框架,专为机器人学习设计。它提供了一套基准环境,是Advancing Robot Int…

Linux实操笔记2 Ubuntu安装Nginx的不同方法

今天来了解Ubuntu或者说Linux系统安装Nginx的几种办法。包括从Ubuntu的库安装到官方源码编译安装。 一、Nginx是什么? 以下是来自Nginx中文文档的内容。 Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比…

瓶中水位检测系统源码分享

瓶中水位检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

研1日记13

正态分布: toTenor:转数字变为0-1 加载模型: model youmodel() model.load("路径") 测试单个样本:

模特妙善:一位多才多艺的短视频达人,绽放新光彩

模特妙善,在当今多元化的网络时代,短视频已成为人们生活中不可或缺的一部分。而在这一领域中,有一位以其独特魅力和多才多艺而备受瞩目的达人,她就是妙善,本名高艳芳。 模特妙善,出生于山西省的著名景点——…

fiddler抓包01:工具介绍

课程大纲 fiddler是一款常见的抓包工具,可以对web端和移动端的接口请求进行抓包(截获)、分析、编辑、模拟等,还可以导出jmeter、Loadrunner测试脚本。 1、原理 fiddler作为代理服务器,拦截请求和服务器响应。 2、使用…

PCIe进阶之TL:Request Handling Rules

1 Handling of Received TLPs 本节介绍接收到的 TLP 在数据链路层经过完整性验证之后,这些 TLP 在事务处理层时的处理方式。这些规则如下图所示: 接收侧会忽略保留字段。如果 Fmt 字段显示存在至少一个 TLP Prefix : (1)通过检查后续 DWORD 的第一个字节中的 Fmt 字段,…

【数据结构】第八节:链式二叉树

个人主页: NiKo 数据结构专栏: 数据结构与算法 源码获取:Gitee——数据结构 一、二叉树的链式结构 typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left; // 左子树根节点struct BinaryT…

day01 - Java基础语法

第一章 Java概述 1995年美国Sun推出Java,2009年Sun公司被甲骨文收购 Java之父:詹姆斯高斯林(James Gosling) Java编译器将源程序编译成与平台无关的字节码文件(class文件),然后由JVM对字节码文件解释执行。不同操作系统&#xf…

71、哪吒开发板试用结合oak深度相机进行评测

基本思想:收到intel的开发板-小挪吒,正好手中也有oak相机,反正都是openvino一套玩意,进行评测一下,竟然默认是个window系统,哈哈

鸿蒙媒体开发系列01——资源分类访问

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。 1、概述 应用开发过程中,经常需要用到颜色、字体、间距、图片等资源&am…

Vue3+Element Plus:使用el-dialog,对话框可拖动,且对话框弹出时仍然能够在背景页(对话框外部的页面部分)上进行滚动以及输入框输入信息

【需求】 使用Element Plus中的el-dialog默认是模态的(即它会阻止用户与对话框外部的元素进行交互),对话框弹出时仍然能够在背景页(对话框外部的页面部分)上进行滚动以及输入框输入信息,且对话框可拖动 【…

双三次插值及MATLAB实现

一、双三次插值的概念 双三次插值(Bicubic interpolation),又叫双立方插值。在数值分析这个数学分支中,双三次插值是二维空间中最常用的插值方法。在这种方法中,函数f在点 (x0 ,y0) 的值不仅考虑其直接邻接点对其的影响…

mybatis开启日志

步骤很详细,直接上教程 配置文件的文件格式可能有所不同,这里列举两种 配置方法 一. application.properties(默认 # 配置mybatis的日志信息 mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl二. application.y…

基于python+django+vue的在线学习资源推送系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…