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

机器学习详解(11):分类任务的模型评估标准

模型评估是利用不同的评估指标来了解机器学习模型的性能,以及其优势和劣势的过程。评估对于确保机器学习模型的可靠性、泛化能力以及在新数据上的准确预测能力至关重要。

文章目录

  • 1 介绍
  • 2 评估准则
  • 3 分类指标
    • 3.1 准确率 (Accuracy)
    • 3.2 精确率 (Precision)
    • 3.3 召回率 (Recall)
    • 3.4 F1 分数 (F1-Score)
    • 3.5 ROC曲线与AUC
  • 4 总结

1 介绍

过拟合和欠拟合是导致机器学习算法性能不佳的两个主要原因。

  • 过拟合:模型在训练数据上表现得非常好,但对新数据泛化能力很差。模型过于复杂,捕捉了数据中的噪声和无关信息,而非真正的规律。
  • 欠拟合:模型过于简单,未能从训练数据中学习到充分的模式和规律,导致训练集和测试集上的性能都很差。

在这里插入图片描述

以下是过拟合和欠拟合的对比:

特性过拟合欠拟合
模型复杂度过高过低
训练集性能极好较差
测试集性能较差较差
原因学习了数据中的噪声和细节未能充分学习数据中的规律
解决方法简化模型、正则化、增加数据量、早停增加模型复杂度、延长训练时间、优化特征

2 评估准则

评估指标根据分类、回归、排序、聚类、主题建模等任务的不同而有所不同。以下是一些常见的指标:

  • 分类指标:Accuracy, Precision, Recall, F1-score, ROC, AUC 等
  • 回归指标:MSE, MAE, R²
  • 排序指标:MRR, DCG, NDCG
  • 统计指标:Correlation
  • 计算机视觉指标:PSNR, SSIM, IoU
  • 自然语言处理指标:Perplexity, BLEU 分数
  • 深度学习相关指标:Inception 分数, Frechet Inception 距离

本篇文章,我们将讨论分类指标

3 分类指标

当目标变量是类别型时,我们面对的是分类问题。选择最合适的指标取决于不同的因素,例如数据集的特性(是否存在类别不平衡)以及分析目标等。

混淆矩阵 (Confusion Matrix)

混淆矩阵是一种用于衡量分类模型性能的工具。通过对预测值和实际值的比较,将结果划分为以下四种情况:

  • T P TP TP (True Positive):模型预测为正类,实际也为正类。
  • T N TN TN (True Negative):模型预测为负类,实际也为负类。
  • F P FP FP (False Positive):模型预测为正类,实际为负类(误报)。
  • F N FN FN (False Negative):模型预测为负类,实际为正类(漏报)。

在这里插入图片描述

分类模型的性能可以通过以下指标进行评估。 根据混淆矩阵有准确率、精确率和召回率几个定义,假设 T P = 10 , T N = 12 , F P = 1 , F N = 2 TP = 10, TN = 12, FP = 1, FN = 2 TP=10,TN=12,FP=1,FN=2,我们下面介绍一下这几个定义,并在例子中据此数据计算。

3.1 准确率 (Accuracy)

准确率表示所有预测中正确预测的比例,公式为: A c c u r a c y = T P + T N T P + T N + F P + F N Accuracy = \frac{TP + TN}{TP + TN + FP + FN} Accuracy=TP+TN+FP+FNTP+TN

例: A c c u r a c y = 10 + 12 10 + 12 + 1 + 2 = 88 % Accuracy = \frac{10 + 12}{10 + 12 + 1 + 2} = 88\% Accuracy=10+12+1+210+12=88%

  • 通俗解释:老师判卷子时,看所有题中有多少题答对了,比如答对了88%,准确率就是88%。
  • 局限性:当类别分布不平衡时,准确率可能会误导。例如,若正类占比很低,仅预测所有数据为负类也可能获得高准确率。

3.2 精确率 (Precision)

精确率衡量预测为正类中实际为正类的比例,公式为: P r e c i s i o n = T P T P + F P Precision = \frac{TP}{TP + FP} Precision=TP+FPTP

例: P r e c i s i o n = 10 10 + 1 = 91 % Precision = \frac{10}{10 + 1} = 91\% Precision=10+110=91%

  • 通俗解释:医生诊断病人时,关注确诊为病的人里有多少是真正生病的,比如确诊10个,9个真生病了,精确率是90%。
  • 适用场景:当误报的代价较高时(如医疗诊断中的误报),需要关注精确率。

3.3 召回率 (Recall)

召回率衡量实际为正类中被正确预测为正类的比例,公式为: R e c a l l = T P T P + F N Recall = \frac{TP}{TP + FN} Recall=TP+FNTP

例: R e c a l l = 10 10 + 2 = 83 % Recall = \frac{10}{10 + 2} = 83\% Recall=10+210=83%

  • 通俗解释:警察追逃犯时,关注所有逃犯里抓住了多少,比如有12个逃犯,抓住了10个,召回率是83%。
  • 适用场景:当漏报的代价较高时(如安全检测中的漏报),需要关注召回率。

3.4 F1 分数 (F1-Score)

F 1 F1 F1 分数是精确率和召回率的调和平均,用于综合考虑两者的表现,公式为: F 1 = 2 ⋅ P r e c i s i o n ⋅ R e c a l l P r e c i s i o n + R e c a l l F1 = 2 \cdot \frac{Precision \cdot Recall}{Precision + Recall} F1=2Precision+RecallPrecisionRecall

例: 已知 P r e c i s i o n = 91 % Precision = 91\% Precision=91%, R e c a l l = 83 % Recall = 83\% Recall=83%,则 F 1 = 2 ⋅ 0.91 ⋅ 0.83 0.91 + 0.83 = 0.87 F1 = 2 \cdot \frac{0.91 \cdot 0.83}{0.91 + 0.83} = 0.87 F1=20.91+0.830.910.83=0.87

  • 适用场景:在搜索引擎中既要确保返回结果相关(精确率),又要尽可能多覆盖目标(召回率)。

3.5 ROC曲线与AUC

ROC(Receiver Operating Characteristic)曲线是一种用于评估分类模型性能的图形工具,特别是在二分类任务中非常常用。它通过显示模型在不同阈值下的分类能力来帮助理解模型的区分能力。ROC曲线绘制了以下两个指标之间的关系:

  • True Positive Rate (TPR):真阳性率,也称为敏感度(Recall),公式为: $ TPR = \frac{TP}{TP + FN} $

  • False Positive Rate (FPR):假阳性率,公式为: $ FPR = \frac{FP}{FP + TN} $

通过调整分类阈值,模型在不同的TPR和FPR之间取得平衡,绘制成ROC曲线。

ROC Curve

  • 不同阈值对应的点在图上不一定连续,而是通过将所有可能的阈值下的 T P R TPR TPR F P R FPR FPR 计算出来的离散点连接起来形成的曲线。

AUC (Area Under the Curve)
AUC表示ROC曲线下的面积,值范围为0到1:

  • AUC = 1:理想模型,能完美区分正负样本。
  • AUC = 0.5:随机猜测模型,无分类能力。
  • AUC < 0.5:分类性能低于随机模型(可能因模型异常或标签反转)。

AUC value

优点

  • 不受类别不平衡影响。
  • 提供模型在不同阈值下的整体性能概览。

4 总结

模型评估是确保机器学习模型性能可靠和泛化能力强的关键步骤。通过准确率、精确率、召回率、F1分数和ROC-AUC等指标,能够全面了解分类模型的表现及其在不同场景下的优劣势。选择合适的评估指标,结合实际需求和任务特性,是构建高效模型的核心。


http://www.kler.cn/a/456665.html

相关文章:

  • 正弦函数解析(sin.rs)
  • ubuntu 使用samba与windows共享文件[注意权限配置]
  • 【Java项目】基于SpringBoot的【人职匹配推荐系统】
  • NLP基础知识 - 向量化
  • Presence:Colyseus用于管理实时分布式数据的工具
  • Java 同步锁性能的最佳实践:从理论到实践的完整指南
  • Python学习(2):注释、数字、文本、列表
  • 【漏洞复现】CVE-2022-41678 Arbitrary JMX Service Invocation with Web Interface
  • JS实现Table表格数据跑马灯效果
  • 游戏开发-UE4高清虚幻引擎教程
  • 硬件设计-时钟振荡器
  • R数据分析:工具变量回归的做法和解释,实例解析
  • VSCode 插件开发实战(七):插件支持了哪些事件,以及如何利用和监听这些事件
  • MarkItDown的使用(将Word、Excel、PDF等转换为Markdown格式)
  • 【视觉惯性SLAM:七、ORB-SLAM2:ORB特征提取】
  • php中laravel基于rabbit的异步队列实践与原理
  • 代码随想录算法【Day4】
  • Docker和Kubernetes(K8s)区别
  • js正则表达式 校验邮箱,非法字符限制输入
  • 在Linux的世界中怎么玩转定时器任务
  • WebSocket 在实时比分推送中的应用
  • JVM调优实践篇
  • 虚幻5 UE5 UNREALED_API d虚幻的
  • gesp(二级)(17)洛谷:B4064:[GESP202412 二级] 寻找数字
  • Linux快速入门-一道简单的Makefile编程题目
  • windows C#-显式实现接口成员