【scikit-learn基础】--『分类模型评估』之系数分析
前面两篇介绍了分类模型评估的两类方法,准确率分析和损失分析,
本篇介绍的杰卡德相似系数和马修斯相关系数为我们提供了不同的角度来观察模型的性能,
尤其在不平衡数据场景中,它们更能体现出其独特的价值。
接下来,让我们一起了解这两个评估指标的原理与特点。
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_score的average参数,否则会报错。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. 总结
总的来说,杰卡德相似系数和马修斯相关系数为我们提供了更全面、更深入的分类模型性能评估视角。
尤其是在处理不平衡数据集时,这两个指标的表现尤为突出。
杰卡德相似系数从集合相似度的角度展现了模型的预测准确性,
而马修斯相关系数则综合考虑了各类别的预测情况,为模型的整体性能给出了更为准确的反馈。
【scikit-learn基础】--『分类模型评估』之系数分析的更多相关文章
- 分类模型评估之ROC-AUC曲线和PRC曲线
http://blog.csdn.net/pipisorry/article/details/51788927 在样本分布及其不均匀的情况下,建议用PRC...可以看下这个精确率.召回率.F1 值.R ...
- 笔记︱风控分类模型种类(决策、排序)比较与模型评估体系(ROC/gini/KS/lift)
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 本笔记源于CDA-DSC课程,由常国珍老师主讲 ...
- 风控分类模型种类(决策、排序)比较与模型评估体系(ROC/gini/KS/lift)
python信用评分卡建模(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_ca ...
- Scikit-learn:模型评估Model evaluation
http://blog.csdn.net/pipisorry/article/details/52250760 模型评估Model evaluation: quantifying the qualit ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- 『高性能模型』轻量级网络ShuffleNet_v1及v2
项目实现:GitHub 参考博客:CNN模型之ShuffleNet v1论文:ShuffleNet: An Extremely Efficient Convolutional Neural Netwo ...
- 2017-2018-2 20155303『网络对抗技术』Exp9:Web安全基础
2017-2018-2 『网络对抗技术』Exp9:Web安全基础 --------CONTENTS-------- 一.基础问题回答 1.SQL注入攻击原理,如何防御? 2.XSS攻击的原理,如何防御 ...
- 『高性能模型』HetConv: HeterogeneousKernel-BasedConvolutionsforDeepCNNs
论文地址:HetConv 一.现有网络加速技术 1.卷积加速技术 作者对已有的新型卷积划分如下:标准卷积.Depthwise 卷积.Pointwise 卷积.群卷积(相关介绍见『高性能模型』深度可分离 ...
- 『高性能模型』轻量级网络MobileNet_v2
论文地址:MobileNetV2: Inverted Residuals and Linear Bottlenecks 前文链接:『高性能模型』深度可分离卷积和MobileNet_v1 一.Mobil ...
随机推荐
- AtCoder Beginner Contest 171 AK!
这一场好神奇!能AK了 AB水题, C - One Quadrillion and One Dalmatians 把一个数字转化为字母,规则为 \([1,26]\) 对应 \([a,z]\) , 27 ...
- 2017年第八届 蓝桥杯C组 C/C++决赛题解
蓝桥杯历年国赛真题汇总:Here 1.哥德巴赫分解 哥德巴赫猜想认为:不小于4的偶数都可以表示为两个素数的和. 你不需要去证明这个定理,但可以通过计算机对有限数量的偶数进行分解,验证是否可行. 实际上 ...
- vue prop 会接收不同的数据类型
refAge: { type: Number, default: 0 }, refName: { type: String, default: '' }, hotDataLoading: { type ...
- Threejs实现一个园区
一.实现方案 单独贴代码可能容易混乱,所以这里只讲实现思路,代码放在最后汇总了下. 想要实现一个简单的工业园区.主要包含的内容是一个大楼.左右两片停车位.四条道路以及多个可在道路上随机移动的车辆.遇到 ...
- poj 3246 简单线段树
线段树还真有点难写... #include <iostream> #include <cstdio> #include <cstring> #include < ...
- Python数据可视化-动态柱状图可视化
Python数据可视化-动态柱状图可视化 一.基础柱状图 通过Bar构建基础柱状图 """ 演示基础柱状图的开发 """ from pyec ...
- Meta AI新发布的超大规模语言模型-OPT-175B
Meta AI在2022年5月3日新发布的OPT-175B模型,该模型是现阶段第一个模型参数超过千亿级别的开放模型,其次该模型与GPT-3相比,更加开放及便于访问. 具体开放性表现在如下几个方面: ...
- Linux查看文件内容与处理文件
Linux查看文件内容与处理文件 目录 Linux查看文件内容与处理文件 查看文件内容 1.查看文件类型 2.查看整个文件 3.查看部分文件 处理文件 1.创建空文件 2.过滤文件内容 3.统计文件内 ...
- chorm如何静音特定网页
如图所示,右键想要静音的网页标签,选择将这个网页静音即可
- 【C++】const 常类型
常引用 格式:const 类型说明符 &引用名 注意:常引用所引用的对象不能修改 常对象 格式:类名 const 对象名 或 const 类名 对象名 注意:常对象其数据成员在生存期内不能修改 ...