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


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

    所以,评估分类模型时,评估指标与回归模型也很不一样,
    比如,分类模型的评估指标通常包括准确率精确率召回率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度量
  • 相关阅读:
    webrtc opus 音频编码支持SILK和CELT模式
    Mockito搭配junit单元测试
    初步认识JAVA
    算法分析与设计课后练习23
    【MyBatis系列】- 什么是MyBatis
    力扣:92. 反转链表 II(Python3)
    云架构(五)BBF模式
    2022-2023罗戈物流行业年度报告,物流人必看报告!
    目标检测yolov3+文字识别CRNN 实现文本检测和识别
    在WINDOWS中硬件管理中即插即用的含义是什么
  • 原文地址:https://www.cnblogs.com/wang_yb/p/17992500