分类模型、回归模型的常见评价指标

news2024/10/6 8:21:36

文章目录

  • 分类模型的评价指标
    • 1. Recall@k
      • 公式
      • 举例
      • 代码
    • 2. Precision@k
      • 公式
      • 举例
      • 代码
    • 3. F1@k
      • 公式
      • 代码
    • 4.[其它常见的分类模型评价指标](https://blog.csdn.net/LiuRuiaby35646/article/details/136711918)
  • 回归模型的评价指标
    • 1.均方误差(Mean Square Error)
      • 公式
      • 代码
    • 2.均方根误差(Root Mean Square Error)
      • 公式
      • 代码
    • 3.平均绝对误差(Mean Absolute Error)
      • 公式
      • 代码
    • 4.决定系数:R2(R-Square)
      • 公式
      • 代码
      • 为什么有时候R2会出现负数
    • 5. 校正决定系数(Adjusted R-Square)
      • 代码
      • 为什么有了R2,还要引进校正决定系数
    • 6. 皮尔逊相关系数(Pearson Correlation Coefficient)
      • 代码
      • 局限性
    • 7.斯皮尔曼秩相关系数(Spearman's Rank Correlation Coefficient)
      • 代码
      • 局限性
    • 总结


分类模型的评价指标

1. Recall@k

Recall@k 是信息检索和推荐系统中常用的评价指标,用于评估系统在前 k 个返回结果中检索到相关项的能力。具体来说,Recall@k 衡量的是在返回的前 k 个结果中有多少是相关的。

公式

Recall@k = (在前 k 个结果中相关项的数量) / (总相关项的数量)

举例

真实情况:
疾病A的治疗药物是:药物1,药物2,药物3,药物4.
疾病B的治疗药物是:药物5,药物6,药物7

模型预测情况:
疾病A的治疗药物是:药物2,药物5,药物1,药物6,药物3,药物7(按照推荐的可能性排序)
疾病 B的治疗药物是:药物7,药物8,药物5,药物6(按照推荐的可能性排序)

K=3,则选取模型推测结果的前三个,即:
疾病A:药物2,药物5,药物1
疾病B:药物7,药物8,药物5
所以:
对于疾病A:药物2,药物1是相关项
对于疾病B:药物7,药物5是相关项

recall@k = (2/4 + 2/3) /2 = 0.583

代码

def calculate_recall_at_k(predicted_associations, k):
    recall_scores = []
    for disease in true_associations:
        true_set = set(true_associations[disease])
        predicted_list = predicted_associations[disease][:k]
        predicted_set = set(predicted_list)
        recall = len(true_set & predicted_set) / len(true_set)
        recall_scores.append(recall)
    return sum(recall_scores) / len(recall_scores)

# Example data
true_associations = {
    'DiseaseA': ['Drug1', 'Drug2', 'Drug3', 'Drug4'],
    'DiseaseB': ['Drug5', 'Drug6', 'Drug7']
}

predicted_associations = {
    'DiseaseA': ['Drug2', 'Drug5', 'Drug1', 'Drug6', 'Drug3', 'Drug7'],
    'DiseaseB': ['Drug7', 'Drug8', 'Drug5', 'Drug6']
}

average_recall_at_k = calculate_recall_at_k(true_associations, predicted_associations, 3)
print(f'Average Recall@{3}: {average_recall_at_k}')
Average Recall@3: 0.5833333333333333

2. Precision@k

Precision@k 是另一个常用的评价指标,用于评估推荐系统或信息检索系统在前 k 个返回结果中相关项的比例。具体来说,Precision@k 衡量的是在前 k 个返回结果中,相关项占的比例。

公式

Precision@k = (在前 k 个结果中相关项的数量) / k

举例

真实情况:
疾病A的治疗药物是:药物1,药物2,药物3,药物4.
疾病B的治疗药物是:药物5,药物6,药物7

模型预测情况:
疾病A的治疗药物是:药物2,药物5,药物1,药物6,药物3,药物7(按照推荐的可能性排序)
疾病 B的治疗药物是:药物7,药物8,药物5,药物6(按照推荐的可能性排序)

K=3,则选取模型推测结果的前三个,即:
疾病A:药物2,药物5,药物1
疾病B:药物7,药物8,药物5
所以:
对于疾病A:药物2,药物1是相关项
对于疾病B:药物7,药物5是相关项
precision@k = (2/3+ 2/3)/2 = 0.667

代码

def precision_at_k(true_associations, predicted_associations, k):
    precision_scores = []
    for disease, true_drugs in true_associations.items():
        if disease in predicted_associations:
            predicted_drugs = predicted_associations[disease][:k]
            true_positives = set(predicted_drugs) & set(true_drugs)
            precision = len(true_positives) / k
            precision_scores.append(precision)
    return sum(precision_scores) / len(precision_scores)

# 示例数据
true_associations = {
    'DiseaseA': ['Drug1', 'Drug2', 'Drug3', 'Drug4'],
    'DiseaseB': ['Drug5', 'Drug6', 'Drug7']
}

predicted_associations = {
    'DiseaseA': ['Drug2', 'Drug5', 'Drug1', 'Drug6', 'Drug3', 'Drug7'],
    'DiseaseB': ['Drug7', 'Drug8', 'Drug5', 'Drug6']
}

# 计算 Precision@k
average_precision_at_k = precision_at_k(true_associations, predicted_associations, 3)
print(f'Average Precision@{3}: {average_precision_at_k}')
输出:0.6667

3. F1@k

F1@k 是信息检索和推荐系统中常用的综合评价指标,它结合了 Precision@k 和 Recall@k,以提供对模型性能的更全面的评估。F1@k 的定义是 Precision@k 和 Recall@k 的调和平均数。F1@k 的取值范围在 0 到 1 之间,值越大表示模型的性能越好。

公式

在这里插入图片描述

代码

def f1_at_k(true_associations, predicted_associations, k):
    precision = precision_at_k(true_associations, predicted_associations, k)
    recall = recall_at_k(true_associations, predicted_associations, k)
    if precision + recall == 0:
        return 0.0
    return 2 * (precision * recall) / (precision + recall)
average_f1_at_k = f1_at_k(true_associations, predicted_associations, 3)

4.其它常见的分类模型评价指标

回归模型的评价指标

在这里插入图片描述

1.均方误差(Mean Square Error)

均方误差(Mean Squared Error,MSE)是统计学和机器学习中常用的损失函数和评价指标,用于评估预测值与真实值之间的差异。它计算的是预测值与真实值之间的平方差的平均值。MSE 越小,表示预测值与真实值之间的差异越小,模型的预测效果越好。

公式

在这里插入图片描述

代码

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
mse = mean_squared_error(y_true, y_pred)

2.均方根误差(Root Mean Square Error)

均方根误差(Root Mean Squared Error,RMSE)是评估预测模型性能的一种常用指标,尤其在回归分析中。它是均方误差(MSE)的平方根,衡量预测值与实际值之间的差异。RMSE 保留了 MSE 的优点,并使得误差的度量单位与原始数据相同,这有助于直观理解误差的大小。

公式

在这里插入图片描述

代码

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
rmse = np.sqrt(mse)

3.平均绝对误差(Mean Absolute Error)

平均绝对误差(Mean Absolute Error,MAE)是评估回归模型预测性能的常用指标之一。它衡量的是预测值与实际值之间的平均绝对差异,即预测值与实际值之间误差的绝对值的平均值。MAE 直观且易于理解,因为它的单位与原始数据相同,并且不会像均方误差(MSE)那样放大异常值的影响。

公式

在这里插入图片描述

代码

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
mae = mean_absolute_error(y_true, y_pred)

4.决定系数:R2(R-Square)

决定系数(Coefficient of Determination),通常用R2表示,是统计学中用于评估回归模型拟合优度的重要指标。它衡量的是模型解释因变量变异的比例,即模型的解释力。决定系数的取值范围在 0 到 1 之间,值越接近 1,表示模型对数据的拟合程度越高。

公式

在这里插入图片描述

代码

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
r2 = r2_score(y_true, y_pred)

为什么有时候R2会出现负数

负的 R2表示模型比均值模型表现更差,是模型不合适、过度拟合、数据异常或预测值不当的信号。在这种情况下,需要重新评估模型选择、数据预处理或特征工程,以提高模型的拟合效果和泛化能力。

5. 校正决定系数(Adjusted R-Square)

调整后的 R2(Adjusted R-squared) 是对传统 R2决定系数的一种修正,它考虑了模型中自变量的数量,旨在提供一个更加准确的模型拟合优度评估。调整后的R2 特别适用于多元回归模型,在比较不同的回归模型时,调整后的R2可以避免因增加变量而导致的R2人为增大现象。

代码

Adjusted_R2::1-((1-r2_score(y_test,y_predict))*(n-1))/(n-p-1)

为什么有了R2,还要引进校正决定系数

不断添加变量,使模型变得复杂,R²会变大(模型的拟合优度提升,而这种提升是虚假的),而R2*则不一定变大,因为其随意添加变量不一定能让模型拟合度上升。

6. 皮尔逊相关系数(Pearson Correlation Coefficient)

皮尔逊相关系数(Pearson Correlation Coefficient)是一种统计量,用于衡量两个变量之间线性关系的强度和方向。其取值范围从 -1 到 1。
1 表示两个变量之间存在完全正线性关系。
-1 表示两个变量之间存在完全负线性关系。
0 表示两个变量之间没有线性关系。

代码

from scipy.stats import spearmanr, pearsonr
pearson_corr, _ = pearsonr(y_pred, y_true)

局限性

1.仅衡量线性关系:皮尔逊相关系数只适用于线性关系,无法捕捉非线性关系。如果数据之间存在非线性关系,皮尔逊相关系数可能会低,即使回归模型可能很好地拟合了数据。
2.对异常值敏感:皮尔逊相关系数对异常值非常敏感。异常值可能会显著影响相关系数的值,从而给出误导性的评估。
3.不考虑模型的偏差和方差:皮尔逊相关系数无法衡量模型的偏差(bias)和方差(variance),这对于全面评估模型性能非常重要。

7.斯皮尔曼秩相关系数(Spearman’s Rank Correlation Coefficient)

斯皮尔曼相关系数,是一种非参数统计度量,用于评估两个变量的单调关系的强度和方向。与皮尔逊相关系数不同,斯皮尔曼相关系数不要求数据满足线性关系和正态分布条件,因此更适合处理非线性和非正态的数据。

代码

from scipy.stats import spearmanr, pearsonr
spearman_corr, _ = spearmanr(y_pred, y_true)

局限性

线性回归模型:对于线性回归模型,皮尔逊相关系数或决定系数(R2)更适合,因为它们直接衡量线性关系的强度。
误差度量:斯皮尔曼秩相关系数无法直接反映预测值与实际值之间的误差大小。均方误差(MSE)、均方根误差(RMSE)和平均绝对误差(MAE)等指标更适合用于度量预测误差。

总结

相比较于均方误差,均方根误差,平均绝对误差,决定系数,校正决定系数来说,皮尔逊相关系数和斯皮尔曼秩相关系数并没有那么适合用于回归模型的评估。

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

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

相关文章

柳叶刀:5Kg负重巡飞无人机技术详解

一、引言 随着无人机技术的不断发展,巡飞无人机在军事侦察、环境监测、边境巡逻等领域的应用日益广泛。其中,“柳叶刀”作为一款5Kg负重巡飞无人机,凭借其独特的机体结构、高效的动力系统、先进的飞行控制系统等技术优势,在众多无…

多粒度封锁-封锁粒度、多粒度封锁模式

一、引言 1、若采用封锁技术实现并发控制,事务在访问数据库对象前要在数据库对象上加锁,为提高事务的并发程度,商用DBMS会采用一种多粒度封锁方法 2、事务可访问的数据库对象可以是逻辑单元,包括关系、关系中的元组、关系的属性…

SAP_MM模块-采购信息记录变更文档的三种查询方式

最近有用户在问采购信息记录变更的信息怎么去查找,想要看看是谁更改了价格,于是就给她查了一下,顺便做个记录,SAP中的业务数据或者主数据的变更信息查询方法,都是比较类似的,学会了这三个方法,其…

STM32介绍

本内容是基于江协科技STM32视频学习之后,并参考【重写】简析stm32启动过程-CSDN博客和STM32 最小系统_stm32最小系统-CSDN博客以及其他资料综合整理而成。 1. STM32 1.1 STM32简介 STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器;STM32常应用在…

TCP一定可靠吗

背景 公司某个服务发送TCP报文后,得到的响应是非预期数据 原因竟然是:TCP包的 payload 数据某个bit位被翻转,但是 checksum 的值一样,错误的包被分发给了上层服务 Checksum介绍 IP 头有自己的 Checksum,TCP、UDP 也有自己的 Checksum,分别校验不同部分的数据 IP 头的 …

【Linux系统】动态库和静态库 动态库加载

认识动态库静态库 我们有没有使用过库呢?-- 用过c、c的标准库 c的各种函数,c的各种STL容器,我们使用他们内部必须得有具体实现。 Linux: .so(动态库) .a(静态库) Windows: .dll(动态库) .lib(静态库) 库是拿来给别人使用的,所…

Spring源码十六:Bean名称转化

在上一篇Spring源码十五:Bean的加载 中我们通过前面的案例方法,找到了Spring真正开始创建Bean的入口,也就是doGetBean方法。该方法是Spring框架中Bean创建与获取的核心逻辑,实现了复杂的Bean生命周期管理。通过单例缓存、合并Bean…

文章解读与仿真程序复现思路——太阳能学报EI\CSCD\北大核心《计及电-热-氢负荷与动态重构的主动配电网优化调度》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【双一流高校主办,Springer-LNICST出版,EI稳定检索】2024年应用计算智能、信息学与大数据国际会议(ACIIBD 2024,7月26-28)

2024年应用计算智能、信息学与大数据国际学术会议(ACIIBD 2024)将于2024年7月26-28日在中国广州举办。会议将聚焦于计算智能及其应用、信息、大数据等相关的研究领域, 广泛邀请国内外知名专家学者,共同探讨相关学科领域的最新发展…

Maya崩溃闪退常见原因及解决方案

Autodesk Maya 是一款功能强大的 3D 计算机图形程序,被电影、游戏和建筑等各个领域的设计师广泛使用。然而,Maya 就像任何其他软件一样可能会发生崩溃问题。在前文中,小编给大家介绍了3ds Max使用V-Ray渲染时的崩溃闪退解决方案: …

电路基础知识汇总

1.0 串连,并联,混连 串联的定义 电路串联是一种电路元件的连接方式,其中各个元件沿着单一路径互相连接,形成一个连续的链。在串联电路中,每个节点最多只连接两个元件,这意味着电流只有一条路径可以通过整个…

“来来来,借一步说话”,让前端抓狂的可视化大屏界面。

可视化大屏的前端开发难度要远远高于普通前端,尤其是当设计师搞出一些花哨的效果,很容易让UI和前端陷入口水大战中。 可视化大屏的前端开发相比普通前端开发的难度要高,主要是因为以下几个方面: 1. 数据量大: 可视化…

01:spring

文章目录 一:常见面试题1:什么是Spring框架?1.1:spring官网中文1.2:spring官网英文 2:谈谈自己对于Spring IOC和AOP的理解2.1:IOCSpring Bean 的生命周期主要包括以下步骤: 2.2&…

STM32-输入捕获IC和编码器接口

本内容基于江协科技STM32视频学习之后整理而得。 文章目录 1. 输入捕获IC1.1 输入捕获IC简介1.2 频率测量1.3 输入捕获通道1.4 主从触发模式1.5 输入捕获基本结构1.6 PWMI基本结构 2. 输入捕获库函数及代码2.1 输入捕获库函数2.2 6-6 输入捕获模式测频率2.2.1 硬件连接2.2.2 硬…

DevEco Studio无法识别本地模拟器设备的解决方法

目录 场景 解决办法 方式1 方式2 场景 有很多小伙伴遇到过安装了手机模拟器, 但是开发工具设备栏不识别手机设备的问题, 如下图,明明模拟器都安装了,并启动, 但为什么设备栏不显示呢? 解决后的截图,应该是这样(其实跟 android 类似 )

拓扑排序,PageRank(markov),实对称矩阵等

拓扑排序 多件事情有先后顺序,如何判断哪个先哪个后 拓扑排序算法: 1.读入图时,需要记录每个顶点的入度,以及相邻的所有顶点 2.将入度为0的顶点入队(先进先出) 3.取出队首元素a,&#xf…

检测到弱密码:并非所有密码套件均支持完全前向保密解决方案

问题 检测到弱密码:并非所有密码套件均支持完全前向保密(弱密码套件 - ROBOT 攻击:服务器支持易受攻击的密码套件) 背景介绍 HTTP 协议自身没有加密机制,但可以通过与 TLS (Transport Layer Security) / SSL (Secur…

QThread moveToThread的妙用

官方文档描述 总结就是移动到线程的对象不能有父对象,执行start即起一个线程,示例是将myObject移动到主线程中。QT中这种方式起一个线程是非常简单的。 示例描述以及代码 描述往Communicate线程中频繁添加任务,等任务结束的时候统计计算的结…

用C#调用Windows API向指定窗口发送按键消息详解与示例

文章目录 1. 按键消息的定义及功能2. 引入所需的命名空间3. 定义Windows API函数4. 定义发送消息的方法5. 获取窗口句柄6. 调用API发送按键消息7. 使用示例注意事项总结 在C#中调用Windows API向指定窗口发送按键消息是一种常见的操作,这通常用于自动化脚本、游戏辅…

中国科学技术大学发布了2024年少年班录取名单

7月7日,中国科学技术大学发布了2024年少年班录取名单公示,来自上海的12岁“小孩哥”刘尧进入名单。 据澎湃新闻此前报道,刘尧是因为此前通过了中科大少年班的校测考试,提前拿到了“高考体验券”。他所在的上海市实验学校&#xff…