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

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

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

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

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

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

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

1. 准确率分数

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

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

1.1. 计算公式

<math xmlns="http://www.w3.org/1998/Math/MathML"> 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) </math>accuracy(y,y^)=n1∑i=0n−11(y^i=yi)

其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>n是样本数量, <math xmlns="http://www.w3.org/1998/Math/MathML"> y i y_i </math>yi是真实值, <math xmlns="http://www.w3.org/1998/Math/MathML"> y i ^ \hat{y_i} </math>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. 计算公式

<math xmlns="http://www.w3.org/1998/Math/MathML"> 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) </math>top-k accuracy(y,f^)=n1∑i=0n−1∑j=1k1(f^i,j=yi)

其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>n是样本数量, <math xmlns="http://www.w3.org/1998/Math/MathML"> y i y_i </math>yi是真实值, <math xmlns="http://www.w3.org/1998/Math/MathML"> f ^ i , j \hat{f}_{i,j} </math>f^i,j是对应于第 <math xmlns="http://www.w3.org/1998/Math/MathML"> j j </math>j最大预测分数的第 <math xmlns="http://www.w3.org/1998/Math/MathML"> i i </math>i样本的预测类别。
<math xmlns="http://www.w3.org/1998/Math/MathML"> k k </math>k是允许的猜测次数, <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 ( x ) 1(x) </math>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. 计算公式

<math xmlns="http://www.w3.org/1998/Math/MathML"> 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 </math>balanced-accuracy(y,y^,w)=∑w^i1∑i1(y^i=yi)w^i

其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> n n </math>n是样本数量, <math xmlns="http://www.w3.org/1998/Math/MathML"> y i y_i </math>yi是真实值, <math xmlns="http://www.w3.org/1998/Math/MathML"> y i ^ \hat{y_i} </math>yi^是预测值。

而 <math xmlns="http://www.w3.org/1998/Math/MathML"> 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}} </math>w^i=∑j1(yj=yi)wjwi, <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 ( x ) 1(x) </math>1(x)是指示函数, <math xmlns="http://www.w3.org/1998/Math/MathML"> w i w_i </math>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)真阴性

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

4.1. 计算公式

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

精确率 : <math xmlns="http://www.w3.org/1998/Math/MathML"> precision = t p t p + f p \text{precision} = \frac{tp}{tp + fp} </math>precision=tp+fptp

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

召回率 : <math xmlns="http://www.w3.org/1998/Math/MathML"> recall = t p t p + f n \text{recall} = \frac{tp}{tp + fn} </math>recall=tp+fntp

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

F1度量 : <math xmlns="http://www.w3.org/1998/Math/MathML"> F 1 = 2 × precision × recall precision + recall F_1 = 2 \times \frac{\text{precision} \times \text{recall}}{\text{precision} + \text{recall}} </math>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基础--『监督学习』之支持向量机分类
相关推荐
潮汐退涨月冷风霜36 分钟前
机器学习之非监督学习(四)K-means 聚类算法
学习·算法·机器学习
LQS202039 分钟前
机器学习与深度学习之间的区别
机器学习
B站计算机毕业设计超人42 分钟前
计算机毕业设计Python+Flask微博情感分析 微博舆情预测 微博爬虫 微博大数据 舆情分析系统 大数据毕业设计 NLP文本分类 机器学习 深度学习 AI
爬虫·python·深度学习·算法·机器学习·自然语言处理·数据可视化
羊小猪~~1 小时前
深度学习基础案例5--VGG16人脸识别(体验学习的痛苦与乐趣)
人工智能·python·深度学习·学习·算法·机器学习·cnn
开MINI的工科男3 小时前
深蓝学院-- 量产自动驾驶中的规划控制算法 小鹏
人工智能·机器学习·自动驾驶
AI大模型知识分享4 小时前
Prompt最佳实践|如何用参考文本让ChatGPT答案更精准?
人工智能·深度学习·机器学习·chatgpt·prompt·gpt-3
小言从不摸鱼6 小时前
【AI大模型】ChatGPT模型原理介绍(下)
人工智能·python·深度学习·机器学习·自然语言处理·chatgpt
Lossya10 小时前
【机器学习】参数学习的基本概念以及贝叶斯网络的参数学习和马尔可夫随机场的参数学习
人工智能·学习·机器学习·贝叶斯网络·马尔科夫随机场·参数学习
Trouvaille ~10 小时前
【Python篇】深度探索NumPy(下篇):从科学计算到机器学习的高效实战技巧
图像处理·python·机器学习·numpy·信号处理·时间序列分析·科学计算
qq_5503379913 小时前
研1日记14
人工智能·深度学习·机器学习