sklearn基础--『分类模型评估』之准确率分析

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

所以,评估分类模型 时,评估指标与回归模型 也很不一样,

比如,分类模型的评估指标通常包括准确率 、精确率 、召回率 和F1分数 等等。

而回归模型 的评估指标通常包括均方误差 (MSE)、均方根误差 (RMSE)和平均绝对误差 (MAE)等等,

不过,这些指标衡量的都是预测值与真实值之间的数值差异。

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

1. 准确率分数

准确率分数 (accuracy score)代表了模型正确分类的样本比例,它能够直观地反映出模型在分类任务上的准确度。

不过,在处理不平衡数据集时,需要注意的是,准确率分数并不能完全反映模型的性能。

1.1. 计算公式

accuracy ( y , y ^ ) = 1 n ∑ i = 0 n − 1 1 ( y ^ i = y i ) \texttt{accuracy}(y, \hat{y}) = \frac{1}{n} \sum_{i=0}^{n-1} 1(\hat{y}_i = y_i) accuracy(y,y^)=n1∑i=0n−11(y^i=yi)

其中, n n n是样本数量, y i y_i yi是真实值, y i ^ \hat{y_i} yi^是预测值。

1.2. 使用示例

python 复制代码
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. 计算公式

top-k accuracy ( y , f ^ ) = 1 n ∑ i = 0 n − 1 ∑ j = 1 k 1 ( f ^ i , j = y i ) \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) top-k accuracy(y,f^)=n1∑i=0n−1∑j=1k1(f^i,j=yi)

其中, n n n是样本数量, y i y_i yi是真实值, f ^ i , j \hat{f}_{i,j} f^i,j是对应于第 j j j最大预测分数的第 i i i样本的预测类别。
k k k是允许的猜测次数, 1 ( x ) 1(x) 1(x)是指示函数。

关于指示函数是什么,可以参考:en.wikipedia.org/wiki/Indica...

2.2. 使用示例

python 复制代码
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. 计算公式

balanced-accuracy ( y , y ^ , w ) = 1 ∑ w ^ i ∑ i 1 ( y ^ i = y i ) w ^ i \texttt{balanced-accuracy}(y, \hat{y}, w) = \frac{1}{\sum{\hat{w}_i}} \sum_i 1(\hat{y}_i = y_i) \hat{w}_i balanced-accuracy(y,y^,w)=∑w^i1∑i1(y^i=yi)w^i

其中, n n n是样本数量, y i y_i yi是真实值, y i ^ \hat{y_i} yi^是预测值。

而 w ^ i = w i ∑ j 1 ( y j = y i ) w j \hat{w}_i = \frac{w_i}{\sum_j{1(y_j = y_i) w_j}} w^i=∑j1(yj=yi)wjwi, 1 ( x ) 1(x) 1(x)是指示函数, w i w_i wi是对应的样本权重。

3.2. 使用示例

python 复制代码
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)真阴性

其中,tp和tn是预测结果与实际结果相符 ;fp和fn是预测结果与实际结果不符。

4.1. 计算公式

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

精确率 : precision = t p t p + f p \text{precision} = \frac{tp}{tp + fp} precision=tp+fptp

它用于衡量模型的查准性能 ,即模型预测为真 的样本中有多少是真正的真。

召回率 : recall = t p t p + f n \text{recall} = \frac{tp}{tp + fn} recall=tp+fntp

它用于衡量模型的查全性能 ,即模型能够找出多少真正的真。

F1度量 : F 1 = 2 × precision × recall precision + recall F_1 = 2 \times \frac{\text{precision} \times \text{recall}}{\text{precision} + \text{recall}} F1=2×precision+recallprecision×recall

它是精确率和召回率的调和平均数,用于综合评价模型的性能。

4.2. 使用示例

python 复制代码
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度量

关于分类模型的内容可参考之前的文章:

  1. sklearn基础--『监督学习』之K-近邻分类
  2. sklearn基础--『监督学习』之逻辑回归分类
  3. sklearn基础--『监督学习』之贝叶斯分类
  4. sklearn基础--『监督学习』之决策树分类
  5. sklearn基础--『监督学习』之随机森林分类
  6. sklearn基础--『监督学习』之支持向量机分类
相关推荐
言乐614 分钟前
Python根据关联词搜索模型
开发语言·人工智能·python·机器学习·django
7yewh29 分钟前
SLAM 非线性优化(5)
人工智能·机器学习
Rocky Ding*1 小时前
MaskGIT技术深度解析:图像生成如何从逐Token排队走向掩码并行预测
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·maskgit
Rocky Ding*3 小时前
Muse技术深度解析:用掩码并行生成图像,速度、语义与编辑能力如何同时成立
论文阅读·人工智能·深度学习·机器学习·aigc·ai-native·muse
唠点键盘之外的9 小时前
15 微调 vs RAG:到底怎么选
人工智能·机器学习·面试·aigc
硅谷秋水10 小时前
EmbodiedMemory-Bench:面向长时程具身任务的具身记忆基准测试
机器学习·语言模型·机器人
计算机源码社16 小时前
基于大数据技术的城市空气质量时序趋势与站点特征分析系统 面向监测站点的城市空气污染时空异质性分析与可视化系统
大数据·机器学习·数据挖掘·数据分析·毕业设计·课程设计·数据可视化
xx_xxxxx_16 小时前
论文阅读-RoTTA
论文阅读·人工智能·深度学习·机器学习
西索斯coding17 小时前
grok-4.7 调用一直 429 怎么办?不是额度用完——是 RPM 和 TPM 双桶限流,附响应头读取代码和退避策略
大数据·人工智能·机器学习·ai
盘古开天166619 小时前
PPO算法原理详解(下):Clip机制深入剖析与实践指南
人工智能·算法·机器学习