分类模型的评估和回归模型的评估侧重点不一样,
回归模型一般针对连续型的数据,而分类模型一般针对的是离散的数据。

所以,评估分类模型时,评估指标与回归模型也很不一样,
比如,分类模型的评估指标通常包括准确率精确率召回率F1分数等等。
回归模型的评估指标通常包括均方误差(MSE)、均方根误差(RMSE)和平均绝对误差(MAE)等等,
不过,这些指标衡量的都是预测值与真实值之间的数值差异。

关于回归模型的评估,可以参考之前的文章,本篇开始,主要讨论分类模型的评估。

1. 准确率分数

准确率分数accuracy score)代表了模型正确分类的样本比例,它能够直观地反映出模型在分类任务上的准确度。
不过,在处理不平衡数据集时,需要注意的是,准确率分数并不能完全反映模型的性能。

1.1. 计算公式

\(\texttt{accuracy}(y, \hat{y}) = \frac{1}{n} \sum_{i=0}^{n-1} 1(\hat{y}_i = y_i)\)
其中,\(n\)是样本数量,\(y_i\)是真实值,\(\hat{y_i}\)是预测值。

1.2. 使用示例

from sklearn.metrics import accuracy_score
import numpy as np n = 100
y_true = np.random.randint(1, 10, n)
y_pred = np.random.randint(1, 10, n) s1 = accuracy_score(y_true, y_pred)
s2 = accuracy_score(y_true, y_pred, normalize=False)
print("准确率比例:{},准确率计数:{}".format(s1, s2)) # 运行结果
准确率比例:0.16,准确率计数:16

上例中,预测值真实值是随机生成的,所以你的运行结果不一定和我这个一样。
accuracy_score默认是计算正确的比率,如果加上参数normalize=False,则计算正确的数量

2. top-k 准确率分数

top-k 准确率分数top-k accuracy score)用于衡量模型在前 k 个预测结果中的正确率。
不同的k值会得到不同的top-k准确率,这可以帮助我们更全面地了解模型的性能。

2.1. 计算公式

\(\texttt{top-k accuracy}(y, \hat{f}) = \frac{1}{n} \sum_{i=0}^{n-1} \sum_{j=1}^{k} 1(\hat{f}_{i,j} = y_i)\)
其中,\(n\)是样本数量,\(y_i\)是真实值,\(\hat{f}_{i,j}\)是对应于第\(j\)最大预测分数的第\(i\)样本的预测类别。
\(k\)是允许的猜测次数,\(1(x)\)是指示函数。
关于指示函数是什么,可以参考:https://en.wikipedia.org/wiki/Indicator_function

2.2. 使用示例

from sklearn.metrics import top_k_accuracy_score
import numpy as np n = 100
y_true = np.random.randint(1, 10, n)
y_score = np.random.rand(n, 9) s1 = top_k_accuracy_score(y_true, y_score, k=2)
s2 = top_k_accuracy_score(y_true, y_score, k=2, normalize=False)
print("top-k 准确率比例:{},top-k 准确率计数:{}".format(s1, s2)) # 运行结果
top-k 准确率比例:0.23,top-k 准确率计数:23

top-k 准确率分数计算时,不是用真实值和预测值,用的是真实值top-k中预测值的正确率。

3. 平衡准确率分数

平衡准确率分数balanced accuracy score)特别适用于针对不平衡数据集时的性能评估,
它可以避免某一类样本的预测性能被过度夸大,从而能够更准确地评估模型的性能。

不过,平衡准确率适用于二元分类问题,对于多类分类问题可能需要使用其他扩展的平衡性能指标进行评估。

3.1. 计算公式

\(\texttt{balanced-accuracy}(y, \hat{y}, w) = \frac{1}{\sum{\hat{w}_i}} \sum_i 1(\hat{y}_i = y_i) \hat{w}_i\)
其中,\(n\)是样本数量,\(y_i\)是真实值,\(\hat{y_i}\)是预测值。
而 \(\hat{w}_i = \frac{w_i}{\sum_j{1(y_j = y_i) w_j}}\),\(1(x)\)是指示函数, \(w_i\)是对应的样本权重。

3.2. 使用示例

from sklearn.metrics import balanced_accuracy_score
import numpy as np n = 100
y_true = np.random.randint(1, 10, n)
y_pred = np.random.randint(1, 10, n) s = balanced_accuracy_score(y_true, y_pred)
print("平均准确率:{}".format(s)) # 运行结果
平均准确率:0.17929799866074375

4. 精确率、召回率和 F1 度量

介绍精确率召回率F1 度量之前,先介绍几个概念。


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

其中,tptn是预测结果与实际结果相符fpfn是预测结果与实际结果不符

4.1. 计算公式

基于上面的概念,下面定义精确率召回率F1 度量了。

精确率:\(\text{precision} = \frac{tp}{tp + fp}\)
它用于衡量模型的查准性能,即模型预测为的样本中有多少是真正的

召回率:\(\text{recall} = \frac{tp}{tp + fn}\)
它用于衡量模型的查全性能,即模型能够找出多少真正的

F1度量:\(F_1 = 2 \times \frac{\text{precision} \times \text{recall}}{\text{precision} + \text{recall}}\)
它是精确率和召回率的调和平均数,用于综合评价模型的性能。

4.2. 使用示例

from sklearn.metrics import precision_score, recall_score, f1_score
import numpy as np n = 100
y_true = np.random.randint(0, 2, n)
y_pred = np.random.randint(0, 2, n) p = precision_score(y_true, y_pred)
r = recall_score(y_true, y_pred)
f1 = f1_score(y_true, y_pred)
print("精确率:{}\n召回率:{}\nF1度量:{}".format(p, r, f1)) # 运行结果
精确率:0.4489795918367347
召回率:0.4782608695652174
F1度量:0.46315789473684216

5. 总结

本篇归纳总结了分类模型中关于准确率相关的一些评估方法:

  • 准确率分数
  • top-k 准确率分数
  • 平衡准确率分数
  • 精确率,召回率和 F1度量

【scikit-learn基础】--『回归模型评估』之准确率分析的更多相关文章

  1. (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探

    目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...

  2. 机器学习之路:python 集成回归模型 随机森林回归RandomForestRegressor 极端随机森林回归ExtraTreesRegressor GradientBoostingRegressor回归 预测波士顿房价

    python3 学习机器学习api 使用了三种集成回归模型 git: https://github.com/linyi0604/MachineLearning 代码: from sklearn.dat ...

  3. SPSS分析技术:无序多元Logistic回归模型;美国总统大选的预测历史及预测模型

    SPSS分析技术:无序多元Logistic回归模型:美国总统大选的预测历史及预测模型 在介绍有序多元Logistic回归分析的理论基础时,介绍过该模型公式有一个非常重要的假设,就是自变量对因变量多个类 ...

  4. Poisson回归模型

    Poisson回归模型也是用来分析列联表和分类数据的一种方法,它实际上也是对数线性模型的一种,不同点是对数线性模型假定频数分布为多项式分布,而泊松回归模型假定频数分布为泊松分布. 首先我们来认识一下泊 ...

  5. 人工智能_4_k近邻_贝叶斯_模型评估

    机器学习常用算法 k近邻算法 求出未知点 与周围最近的 k个点的距离 查看这k个点中大多数是哪一类 根号((x已知-x未知)^2+(y已知-y未知)^2) 即平面间2点距离公式 收异常点影响较大,因此 ...

  6. (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探

    一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...

  7. 逻辑回归模型(Logistic Regression, LR)基础

    逻辑回归模型(Logistic Regression, LR)基础   逻辑回归(Logistic Regression, LR)模型其实仅在线性回归的基础上,套用了一个逻辑函数,但也就由于这个逻辑函 ...

  8. 『高性能模型』轻量级网络ShuffleNet_v1及v2

    项目实现:GitHub 参考博客:CNN模型之ShuffleNet v1论文:ShuffleNet: An Extremely Efficient Convolutional Neural Netwo ...

  9. 回归模型效果评估系列1-QQ图

    (erbqi)导语 QQ图全称 Quantile-Quantile图,也就是分位数-分位数图,简单理解就是把两个分布相同分位数的值,构成点(x,y)绘图:如果两个分布很接近,那个点(x,y)会分布在y ...

  10. 『高性能模型』HetConv: HeterogeneousKernel-BasedConvolutionsforDeepCNNs

    论文地址:HetConv 一.现有网络加速技术 1.卷积加速技术 作者对已有的新型卷积划分如下:标准卷积.Depthwise 卷积.Pointwise 卷积.群卷积(相关介绍见『高性能模型』深度可分离 ...

随机推荐

  1. 火山引擎云原生数据仓库 ByteHouse 技术白皮书 V1.0 (Ⅲ)

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,<火山引擎云原生数据仓库 ByteHouse 技术白皮书>正式发布.白皮书简述了 ByteHou ...

  2. SpringBoot 自定义初始化任务 Runner

    在项目启动的时候需要做一些初始化的操作,比如初始化线程池,提前加载好加密证书等.可以通过实现Runner接口完成以上工作. 两者只是参数上的区别 方式一 实现 CommandLineRunner 接口 ...

  3. 【Go】函数高级 包的使用 gin框架入门 if-else 循环 switch 数组

    目录 昨日回顾 今日内容 1 函数高级 2 包的使用 3 gin框架使用 4 if-else 5 循环 6 switch 7 数组 昨日回顾 # 1 go 基础数据类型 -数字:整数,正整数,浮点数, ...

  4. Linux CentOS 7 离线安装.NET环境

    下载 下载.NET 例如: aspnetcore-runtime-6.0.15-linux-x64.tar.gz 复制 复制到如下目录: /usr/local/dotnet/aspnetcore-ru ...

  5. RSAC创新沙盒十强出炉,这家SCA公司火了

    引言 近日,全球网络安全行业创新风向标RSAC创新沙盒公布了本年度入围十强的名单,软件供应链安全企业Endor Labs凭借基于依赖关系建立应用开发生命周期的解决方案获得了广泛关注. Endor La ...

  6. vue+iviews 动态表格(table组件)

    iviews官网上关于table的使用方法是固定表头的使用方法,如何生成动态的table网上找了好多也没有特别合适的,综合几位博主的文章经过尝试终于实现了,分享出来供大家参考 一.先看官网上的样例 官 ...

  7. C#设计模式15——观察者模式的写法

    是什么: 观察者模式是一种设计模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象状态发生改变时,它的所有依赖者都能够得到相应的通知并作出相应的反应.观察者模式也被称为发布-订阅模式. 为什么 ...

  8. C#设计模式03——简单工厂的写法

    什么是C#简单工厂? C#简单工厂是一种创建对象的设计模式,它定义一个工厂类来创建指定类型的对象,而不是在客户端代码中直接创建对象.简单工厂模式通常使用静态方法来生成对象,并且这些静态方法通常被称为工 ...

  9. java项目实战-mybatis-基本用法02接口绑定实现类-day23

    目录 1. 复习 什么是接口 什么是类? 2. mybatis接口绑定实现类 来实现查询 4. 参数的传递 5 插入数据 1. 复习 什么是接口 什么是类? public interface Spea ...

  10. json 解析:marshal 和 unmarshal

    Go 使用 encoding/json 包的 marshal 和 unmarshal 实现 json 数据的编解码.分别记录如下: 1. marshal 定义结构体: type OCP struct ...