首页 > 其他分享 >【scikit-learn基础】--『分类模型评估』之系数分析

【scikit-learn基础】--『分类模型评估』之系数分析

时间:2024-01-31 14:37:48浏览次数:23  
标签:分类 jaccard -- scikit 马修斯 score learn np true

前面两篇介绍了分类模型评估的两类方法,准确率分析损失分析
本篇介绍的杰卡德相似系数马修斯相关系数为我们提供了不同的角度来观察模型的性能,
尤其在不平衡数据场景中,它们更能体现出其独特的价值。

接下来,让我们一起了解这两个评估指标的原理与特点。

1. 杰卡德相似系数

杰卡德相似系数Jaccard similarity coefficient)用于衡量两个集合的相似度。
在分类模型中,通常将每个类别看作一个集合,然后计算模型预测结果与实际结果之间的杰卡德相似系数。

杰卡德相似系数能够直观地反映模型预测的准确性,并且对于不平衡数据集具有一定的鲁棒性。
它特别适用于二元分类问题,但也可以扩展到多类分类问题中。

1.1. 计算公式

\(J(y, \hat{y}) = \frac{|y \cap \hat{y}|}{|y \cup \hat{y}|}\)
其中,\(y\)是真实值,\(\hat y\)是预测值。

1.2. 使用示例

import numpy as np
from sklearn.metrics import jaccard_score

n = 100
k = 2
y_true = np.random.randint(0, k, n)
y_pred = np.random.randint(0, k, n)

s = jaccard_score(y_true, y_pred)
print("jaccard score:{}".format(s))

# 运行结果:
jaccard score:0.36585365853658536

上面的示例中,是针对二分类数据(k=2)来计算杰卡德相似系数的。

如果是多分类的数据,需要设置jaccard_scoreaverage参数,否则会报错。
average参数主要有以下选项:

  • binary:仅当目标 是二分类时才适用
  • micro:通过计算总的真阳性假阴性假阳性来计算全局指标
  • macro:计算每个标签的指标,并找到它们的未加权平均值
  • weighted:计算每个标签的指标,并找到其平均值,并按支持度(每个标签的真实实例数)加权
  • samples:计算每个实例的指标,并找到它们的平均值(仅对多标签分类有意义)
import numpy as np
from sklearn.metrics import jaccard_score

n = 100
k = 5
y_true = np.random.randint(0, k, n)
y_pred = np.random.randint(0, k, n)

s1 = jaccard_score(y_true, y_pred, average="micro")
s2 = jaccard_score(y_true, y_pred, average="macro")
s3 = jaccard_score(y_true, y_pred, average="weighted")
print("jaccard score:\nmicro:{}\nmacro:{}\nweighted:{}".format(s1, s2, s3))

# 运行结果:
jaccard score:
micro:0.0989010989010989
macro:0.09772727272727273
weighted:0.09639935064935062

上面的示例是多分类的情况,不设置 average参数的话,会报错。

2. 马修斯相关系数

马修斯相关系数Matthews correlation coefficient)是一种用于衡量二分类模型性能的指标,
它考虑了真阳性(TP)、真阴性(TN)、假阳性(FP)和假阴性(FN)四个方面的信息。

马修斯相关系数对于不平衡数据集具有较好的适应性,并且能够综合考虑模型的真正例率和真负例率。
与准确率、召回率等指标相比,马修斯相关系数在处理不平衡数据集时更为可靠。

2.1. 计算公式

\(MCC = \frac{tp \times tn - fp \times fn}{\sqrt{(tp + fp)(tp + fn)(tn + fp)(tn + fn)}}\)

关于 \(tp\),\(tn\),\(fp\),\(fn\)的概念,参见下表:


实际结果(真) 实际结果(假)
预测结果(真) tp(true positive)真阳性 fp(false positive)假阳性
预测结果(假) fn(false negative)假阴性 tn(true negative)真阴性

2.2. 使用示例

import numpy as np
from sklearn.metrics import matthews_corrcoef

n = 100
k = 2
y_true = np.random.randint(0, k, n)
y_pred = np.random.randint(0, k, n)

s = matthews_corrcoef(y_true, y_pred)
print("matthews corrcoef:{}".format(s))

# 运行结果
matthews corrcoef:0.028231544780468854

上面示例中,用的随机样本数据是二分类(k=2)的,不过,马修斯相关系数对多分类数据也是支持的。

3. 总结

总的来说,杰卡德相似系数马修斯相关系数为我们提供了更全面、更深入的分类模型性能评估视角。
尤其是在处理不平衡数据集时,这两个指标的表现尤为突出。

杰卡德相似系数从集合相似度的角度展现了模型的预测准确性,
马修斯相关系数则综合考虑了各类别的预测情况,为模型的整体性能给出了更为准确的反馈。

标签:分类,jaccard,--,scikit,马修斯,score,learn,np,true
From: https://www.cnblogs.com/wang_yb/p/17999175

相关文章

  • 双重按位非运算符 ~~ 对数字取整
    介绍按位非运算符(~)将操作数的位反转。它将操作数转化为32位的有符号整型。也就是可以对数字进行取整操作(保留整数部分,舍弃小数部分)。~-2//1~-2.222//1并且按位非运算时,任何数字 x(已被转化为32位有符号整型) 的运算结果都是 -(x+1)。那么双重按位非(~~)对数字的运......
  • 用批处理写的Telnet后门永不被杀
    脚本宝典收集整理的这篇文章主要介绍了用批处理写的后门永不被杀,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。代码思路是影子鹰DESERT朋友的,原代码比较麻烦,我做了改进,这个后门优点就是小而且不会被杀,放到SysTEM32目录下就可以了,代码如下: @echo off @attrib +s......
  • el-form的对象数组数组校验
    el-form绑定的是一个对象,但在有些时候提交的表单中会有数组数据,校验有点不符合常理例如这样的一个表单,付款方是个数组,这种怎么校验呢。上代码用的循环el-form,:model绑定循环的item,也就是数组中的单个对象,然后prop绑定参数,rules正常写,然后提交的时候,因为el-form是循环的,所......
  • handler机制探究——Spring MVC的Handler
    Handler机制主要涉及以下几个方面:Handler类:它是用于处理消息的对象,通常用来在不同的线程之间传递消息。Message类:这是消息对象,包含了有关消息的数据以及目标处理器的引用。MessageQueue类:这是一个存储消息的对象,按照一定的顺序排列。Looper类:它的内部是一个死循环,不断地从Me......
  • 予力八六三软件应用现代化,提升DevSecOps效能,探索交付之路
    本文分享自华为云社区《予力八六三软件应用现代化,提升DevSecOps效能,探索全球交付之路》,作者:HuaweiCloudDeveloper。来源:《华为云DTSE》期刊第三季企业服务专刊作者:杨兵华为云中国区资深DTSE,王滨华为云全球生态部DTSE总监,李卓华为云中国区资深DTSE一、解码应用构建价值链2......
  • Canary 在软件发布时代表什么版本
    在软件发布中,"Canary"版本指的是CanaryChannel、CanaryBuild或CanaryRelease,它通常是指一种高频率更新且可能包含最新(但未经充分测试)功能和改进的版本。这种版本面向的是愿意接受较高风险并帮助开发者发现潜在问题的用户群体,比如开发者社区、早期尝鲜者或技术预览计划成员......
  • wpf 数据绑定 INotifyPropertyChanged封装
    BindableBase.cspublicabstractclassBindableBase:INotifyPropertyChanged{publiceventPropertyChangedEventHandlerPropertyChanged;//调用方法:publicstringName{get=>name;set{SetProperty<string>(refname,value);}}......
  • Semaphore源码阅读
    目录简介代码分析成员变量方法SyncNonFairSyncFairSync本人的源码阅读主要聚焦于类的使用场景,一般只在java层面进行分析,没有深入到一些native方法的实现。并且由于知识储备不完整,很可能出现疏漏甚至是谬误,欢迎指出共同学习本文基于corretto-17.0.9源码,参考本文时请打开相应的源......
  • 杂题20240131
    CF1753C思路点拨考虑一共有\(s\)个\(0\),\(n-s\)个\(1\)。最终序列的形态就是\(s\)个\(0\)在最前面,后面全部都是\(1\)。考虑在前\(s\)个位置中有\(k\)个\(1\),那么只需要将这\(k\)个\(1\)移动到后面就可以了。考虑第一次有效操作的概率,有\(\dfrac{n(n-1)......
  • 计算机字符编码
    目录基础知识ASCII码UnicodeUnicode的问题utf8GB2312是什么基础知识计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如'a'用什么表示,称为"编码";反之,将存储在计算机中的二进制......