首页 > 其他分享 >【scikit-learn基础】--『回归模型评估』之准确率分析

【scikit-learn基础】--『回归模型评估』之准确率分析

时间:2024-01-28 09:44:05浏览次数:21  
标签:-- top scikit 准确率 score learn true 模型 accuracy

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

所以,评估分类模型时,评估指标与回归模型也很不一样,
比如,分类模型的评估指标通常包括准确率精确率召回率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度量

标签:--,top,scikit,准确率,score,learn,true,模型,accuracy
From: https://www.cnblogs.com/wang_yb/p/17992500

相关文章

  • C# 继承、多态性、抽象和接口详解:从入门到精通
    C#继承在C#中,可以将字段和方法从一个类继承到另一个类。我们将“继承概念”分为两类:派生类(子类)-从另一个类继承的类基类(父类)-被继承的类要从一个类继承,使用:符号。在以下示例中,Car类(子类)继承了Vehicle类(父类)的字段和方法:示例classVehicle//基类(父类){......
  • abc152F - Tree and Constraints
    abc152F-TreeandConstraints题意:给定一棵树,要求对每条边染成黑色或者白色,其中有m个限制,第i个限制形如ai,bi,表示ai到bi的路径上至少有一条黑色边,求方案数。看到数据第一反应是状压,但是好像没办法搞。于是考虑容斥,能想到容斥的话就差不多做完了,每次标记一下两个点和他们的lc......
  • 通达信潜伏主升主图指标公式源码
    X_1:=1;X_2:=ma(CLOSE,60);X_3:=MA(CLOSE,120);DRAWBAND(X_2,RGB(90,0,0),X_3,RGB(0,90,0));MA5:MA(CLOSE,5);MA10:MA(CLOSE,10);MA20:MA(CLOSE,20);MA60:MA(CLOSE,60);MA120:MA(CLOSE,120);DRAWKLINE(HIGH,OPEN,LOW,CLOSE);X_4:=REF(CLOSE,1);X_5:=IF((CLOSE-X_4)......
  • 通达信分时机构买卖指标公式源码副图
    {指标介绍:量能用四种颜色的小短柱表示,绿色若,红色较强,粉红色强,青色更强,浅红色最强。中间的红色是量堆。下方的红色带及绿色带也是代表量能。底部的白色小箭头是买点,红色箭头一般是当天的最低点。上方的绿色小箭头是当天的最高点。出现红色西线关注,出现白色细线及"突"可以追进去......
  • 通达信盲点套利模型指标公式源码副图
    预涨幅10%:=REF(C,1)*1.10,COLORYELLOW;预涨幅09%:=REF(C,1)*1.09,COLORYELLOW;{DRAWTEXT(CURRBARSCOUNT=1,预涨幅12%,'预涨幅12%'),COLORBLacK,LINETHICK3;}预涨幅08%:=REF(C,1)*1.08,COLORYELLOW;{DRAWTEXT(CURRBARSCOUNT=1,预涨幅08%,'预涨幅8%'),COLORWHITE,LINETHIC......
  • 八上数学概念
    八年级上学期数学概念在某个变化过程中有两个变量,设为x和y,如果在变量x的允许取值范围内,变量y随着变量x的变化而变化,它们之间存在确定的依赖关系,那么变量y叫做变量x的函数,x叫做自自变量表达两个变量之间依赖关系的数学式子称为函数解析式如果两个变量的每一组对应值的比值是一......
  • typespec 简单试用
    typespec是一个强大的api描述框架,以下是一个简单的试用安装typespec可以安装为全局cli命令npminstall-g@typespec/compiler使用创建项目tspinit//后续按照提示操作,可以选择http安装依赖tspinstall......
  • STM32CubeMX教程27 SDIO - 读写SD卡
    1、准备材料正点原子stm32f407探索者开发板V2.4STM32CubeMX软件(Version6.10.0)keilµVision5IDE(MDK-Arm)ST-LINK/V2驱动逻辑分析仪nanoDLA野火DAP仿真器XCOMV2.6串口助手2、实验目标使用STM32CubeMX软件配置STM32F407开发板SDIO读写4线SD卡,实现轮询方式读写SD卡、以中......
  • Python手相识别教程16四种元素手型分类
    16四种元素分类16.1火、水、气、土虽然手掌的七种原型是评估性格的首选指南,但从多个角度看手掌也是明智之举。七种原型可以让我们看到人类大家庭中更广泛的差异。原型与原型之间的相互结合,以及基本修饰语的应用,可以让我们深入了解我们正在阅读的人的手相。虽然七种原型提供了......
  • python pandas字符处理一
    s=pd.Series(['lower','CAPITALS','thisisasentence','SwApCaSe'])s.str.lower()#转为小写s.str.upper()#转为大写s.str.title()#标题格式,每个单词大写s.str.capitalize()#首字母大写s.str.swapcase()#大小写互换s.str.casefold()#转为小......