跳转到主要内容

热门内容

今日:


总体:


最近浏览:


Chinese, Simplified

category

介绍


机器学习(ML)模型在从图像识别到自然语言处理的领域中变得越来越普遍。开发和部署二元分类模型需要了解其性能,通常使用准确性、精确度、召回率、F1分数、ROC-AUC和PR-AUC等指标进行评估。这些指标提供了对模型性能不同要素的见解,例如精确度和召回率之间的权衡、处理不平衡数据集的能力以及正确分类样本的能力。然而,采用这些指标需要了解其潜在的计算、局限性以及对特定问题的适用性。

本文将通过探索这些关键指标在不同用例中的潜在计算和相关性,帮助您理解这些关键指标。我们还将讨论每个指标的优缺点,以及如何将其与其他指标结合使用,以提供更全面的模型性能视图。

二元分类度量


注:

  • 真阳性(TP):模型正确预测阳性类别
  • 真负(TN):模型正确预测负类
  • 假阳性(FP):模型预测为阳性,但实际为阴性。
  • 假阴性(FN):模型预测为阴性,但实际为阳性


这些术语生成了混淆矩阵,该矩阵将用于推导评估指标,如以下部分所示。

准确


准确性是一个ML指标,用于衡量模型做出的正确预测占预测总数的比例。它是评估分类模型性能的最广泛使用的指标之一。其公式如下:

准确

准确性是一个简单直观的指标,易于理解和解释。当类是平衡的时,这尤其有用,这意味着正负样本的数量大致相等。在这种情况下,准确性可以很好地全面评估模型的性能。

示例实现:

from sklearn.metrics import accuracy_score
y_true = [0, 1, 0, 1, 0, 1, 1, 0] 
y_pred = [1, 1, 0, 1, 0, 0, 1, 0]
accuracy = accuracy_score(y_true, y_pred)
print("Accuracy Score:", accuracy)

 

在这个例子中,我们有两个数组y_true和y_pred,表示二元分类问题的真标签和预测标签。然后,我们使用scikit-learn的accuracy_score函数通过传递真实和预测标签来计算精度。在这种情况下,0.75的准确度得分意味着它在所有情况下都正确地对两个类别的75%进行了分类。

然而,当类不平衡时,准确性可能会产生误导。例如,如果95%的样本是阴性的,只有5%是阳性的,那么一个总是预测阴性的模型将达到95%的准确率。尽管如此,这对积极的班级来说还是无用的。在这种情况下,应使用其他指标,如精确度、召回率、F1得分和精确度召回曲线下的面积来评估模型的性能。

精确


精度是指模型做出的所有积极预测中,真正的积极预测所占的比例。它只是衡量积极预测的准确性。

精确

示例实现:

from sklearn.metrics import precision_score
y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1]
y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1]
precision = precision_score(y_true, y_pred)
print("Precision Score:", precision)


精确

在这个例子中,我们有两个数组y_true和y_pred,表示二元分类问题的真标签和预测标签。然后,我们使用scikit-learn的precision_score函数通过传递真实和预测标签来计算精度。在这种情况下,精度得分为0.6,这意味着60%的积极预测是正确的。然而,只关注精度并不能完全理解模型的性能,因为它没有考虑到假阴性。

灵敏度/真阳性率


Recall(灵敏度/真阳性率)是数据集中所有实际阳性样本的真阳性预测的比例。它衡量模型识别所有阳性实例的能力,在假阴性成本很高时至关重要。

回忆起

示例实现:

from sklearn.metrics import recall_score
y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1]
y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1]
recall = recall_score(y_true, y_pred)
print("Recall Score:", recall)


Recall

在这个例子中,我们有两个数组y_true和y_pred,表示二元分类问题的真标签和预测标签。然后,我们使用scikit-learn的recall_score函数通过传递真实和预测标签来计算召回率。在这个例子中,召回分数为0.6,表明该模型正确识别了60%的实际阳性实例。召回率和准确率得分在区分假阳性(FP)和假阴性(FN)方面可能具有相同的值,从而产生相等的值;然而,它们衡量模型性能的不同方面。这一指标的弱点在于它只关注正确预测正类。

F1得分


F1分数是衡量模型准确性的指标,考虑了精确度和召回率,目标是将实例正确分类为阳性或阴性。精确性衡量有多少预测的阳性实例实际上是阳性的,而召回率衡量有多少实际的阳性实例被正确预测。高精度得分意味着模型的误报率较低,而高召回率得分意味着该模型的漏报率较低。

从数学上讲,F1分数是精确度和召回率的加权调和平均值。它的范围从0到1,1是最好的分数。F1得分公式为:

F1得分

谐波平均值用于为低值赋予更多权重。这意味着,如果精确度或召回率低,即使另一个值很高,F1分数也会很低。例如,如果一个模型具有高精度但低召回率,那么它的F1分数就会很低,因为它没有正确识别所有阳性实例。

示例实现:

from sklearn.metrics import f1_score
# Example data
y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1]
y_pred = [1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1]
# Calculate F1 score
f1 = f1_score(y_true, y_pred)
# Print the F1 score
print("F1 Score:", f1)


F1得分

在这个例子中,我们有两个数组y_true和y_pred,表示二元分类问题的真标签和预测标签。然后,我们使用scikit-learn的f1_score函数通过传递真实和预测的标签并将平均参数设置为“加权”来计算f1分数,以便对标签间的f1分数进行加权平均。高F1分数表示在精确度和召回率方面的性能平衡,就像我们的例子一样,分数为0.9,这意味着该模型可以区分这两个类别,这表明在给定的二元分类问题中,在精确度和回忆率方面表现不错。它很容易应用于FP和FN有影响的应用中。

ROC-AUC


ROC(受试者操作特征)曲线和AUC(曲线下面积)是用于评估二元分类模型性能的ML指标。ROC-AUC提供了一个跨所有可能分类阈值的聚合性能度量。ROC曲线是真阳性率与假阳性率的二维图,显示了在不同阈值下两个轴的权衡。ROC曲线是各种阈值设置下真阳性率(TPR)与假阳性率(FPR)的曲线图,它是通过改变阈值来预测阳性或阴性结果,并绘制每个阈值的TPR与FPR的曲线图而创建的。TPR是模型正确识别为阳性的实际阳性样本的比例。

相比之下,FPR是模型错误识别为阳性的实际阴性样本的比例。在下图中,每条彩色线代表不同二元分类器系统的ROC曲线。轴表示FPR和TPR。对角线表示随机分类器,而左上角表示TPR=1和FPR=0的完美分类器。AUC是ROC曲线下的面积。AUC公式是使用梯形法则对ROC曲线下的面积进行积分。在此处阅读更多关于计算的信息。

ROC-AUC
资料来源:İlyurek Kılıç

同时,AUC代表了模型的整体性能。AUC是ROC曲线下的面积,表示随机选择的阳性样本在模型中的排名高于随机选择的阴性样本的概率。一个完美的模型的AUC为1,而一个随机模型的AUD为0.5。AUC提供了一个单一的值,总结了模型的整体性能,在比较多个模型的性能时特别有用。

当类别不平衡时,不同阈值下的真阳性率和假阳性率特别有用,这意味着阴性样本明显多于阳性样本。在这种情况下,ROC曲线和AUC可以比准确性或F1分数等指标更准确地评估模型的性能,这些指标可能偏向于多数类别。

示例实现:

from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt
# Example data
y_true = [0, 1, 0, 1, 0, 1, 1, 0] 
y_scores = [0.6, 0.8, 0.3, 0.9, 0.2, 0.7, 0.5, 0.4]
# Calculate ROC curve
fpr, tpr, _ = roc_curve(y_true, y_scores)
# Calculate ROC-AUC score
roc_auc = roc_auc_score(y_true, y_scores)
# Print ROC-AUC Score
print('ROC-AUC Score:', roc_auc)
# Plot ROC curve
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (area = {roc_auc:0.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc="lower right")
plt.show()


ROC-AUC


ROC-AUC曲线输出

在上面的例子中,有两个数组y_true和y_scores,表示二元分类问题的真实标签和预测分数。预测得分是0到1之间的连续值,表示模型对预测阳性类别的信心。然后,我们使用scikit-learn的roc_auc_score函数通过传递真实标签和预测分数来计算roc-auc分数。计算出的ROC-AUC得分为0.9375或93.75%,这意味着该模型可以在93.75%的时间内区分阳性和阴性实例。ROC-AUC得分越高,模型在区分两类方面的性能就越好。

PR-AUC


PR-AUC(曲线下的精确召回面积),也称为精确召回曲线,是一种用于评估二元分类模型性能的机器学习度量,主要是在类不平衡时。与绘制TPR与FPR的ROC曲线和AUC不同,PR曲线绘制了不同阈值设置下的精确度与召回率,其值是曲线下面积的积分。

精确度是模型做出的所有积极预测中真正积极预测的比例,而召回率是数据集中所有实际积极样本的真正积极预测比例。PR曲线是通过改变预测阳性或阴性结果的阈值并绘制每个阈值的精确度与召回率来创建的。


PR Curve, Doug Steen

PR-AUC是PR曲线下的面积,代表模型的整体性能。一个完美的模型的PR-AUC为1,而随机模型的PR-APC等于数据集中阳性样本的比率。与AUC一样,PR-AUC提供了一个总结模型整体性能的单一值,在比较多个模型的性能时特别有用。在上图中,灰色虚线表示一个基线分类器——这个分类器只会预测所有实例都属于正类。紫色线代表一个在所有阈值下都具有完美精确度和召回率的理想分类器。

PR曲线和PR-AUC提供了比准确性或F1分数等指标更准确的模型性能评估,这些指标可能偏向于多数类别。此外,它们可以深入了解精确度和召回率之间的权衡,并帮助确定进行预测的最佳阈值。

示例实现:

from sklearn.metrics import precision_recall_curve, auc
import matplotlib.pyplot as plt
# Example data
y_true = [0, 1, 0, 1, 0, 1, 1, 0] 
y_scores = [0.6, 0.8, 0.3, 0.9, 0.2, 0.7, 0.5, 0.4]
# Calculate precision-recall curve
precision, recall, _ = precision_recall_curve(y_true, y_scores)
# Calculate PR-AUC score
pr_auc = auc(recall, precision)
# Print PR-AUC Score
print('PR-AUC Score:', roc_auc)
# Plot Precision-Recall curve
plt.figure()
plt.plot(recall, precision, color='blue', lw=2, label=f'PR curve (area = {pr_auc:0.2f})')
plt.xlabel('Recall')
plt.ylabel('Precision')
plt.title('Precision-Recall Curve')
plt.legend(loc="lower left")
plt.show()


PR-AUC


PR-AUC输出

在这个例子中,我们有两个数组y_true和y_scores,表示二元分类问题的真实标签和预测分数。预测得分是0到1之间的连续值,表示模型对预测阳性类别的信心。然后,我们使用scikit-learn的precision_recall_curve函数来计算精度召回曲线,即不同阈值下的精度与召回曲线图。我们还使用scikit-learn的auc函数来计算精确召回曲线下的面积,即PR-auc得分。0.9375或93.75%的结果意味着该模型在精确性和召回率之间取得了很大的平衡。PR-AUC得分越高,模型在平衡阳性类别的精确度和召回率方面的表现就越好。

多类分类度量


分类问题超越了二进制设置,包括多个类,ML算法很容易帮助进行这种预测分析。评估由此产生的模型性能需要调整二元分类度量来处理更多的类。有关多类评估指标的更多信息,请阅读本文。

与二元分类相比,多类分类引入了一些复杂性,例如不同的类分布(具有多个少数类)、其解释和聚合(组合多个类的性能指标)。

二元度量对多类的适应性:以F1分数为例


在本节中,我们将通过实施各种聚合策略来对模型进行总体评估,从而将F1分数指标应用于多类问题。

from sklearn.metrics import f1_score
# Example data
y_true = [0, 1, 2, 2, 0, 1, 2, 0]
y_pred = [0, 2, 1, 2, 0, 0, 1, 0]
# Calculate F1 scores using different averaging methods
f1_macro = f1_score(y_true, y_pred, average='macro')
f1_micro = f1_score(y_true, y_pred, average='micro')
f1_weighted = f1_score(y_true, y_pred, average='weighted')
print("Macro Averaged F1 Score:", f1_macro)
print("Micro Averaged F1 Score:", f1_micro)
print("Weighted Averaged F1 Score:", f1_weighted)


二元度量对多类的适应性

宏观平均:这种聚合技术独立计算每个类的F1分数,然后取平均值,平等对待所有类。


宏平均

微观平均:该技术计算TP、TN、FP和TN的数量,并使用此计算F1分数。


微平均

加权平均:该技术基于上述宏观平均值,但根据每个类中的实例数量进行加权平均


加权平均

度量的优缺点总结


 

Metrics Strengths Weaknesses
Accuracy Easy to understand and compute; provides a general performance measure. It can be misleading in imbalanced datasets and does not differentiate between types of errors.
Precision Useful when the cost of false positives is high; measures the accuracy of positive predictions. It does not account for false negatives and can be less informative if not considered with recall.
Recall Crucial when the cost of false negatives is high; it measures the ability to identify positive instances. It does not account for false positives and can be less informative if not considered with precision.
F1 Score Balances precision and recall; useful in imbalanced datasets. It does not account for true negative rates
ROC-AUC It provides a comprehensive performance measure across all thresholds and is useful in imbalanced datasets. Does not take into account the cost or benefit of different types of errors.
PR-AUC Focuses on performance with respect to the positive class; useful in imbalanced datasets. It can be less intuitive to interpret.


表:指标的优缺点

结论


本文讨论了评估二元和多类分类模型性能的各种度量的重要性。F1分数是一个平衡精确度和召回率的有用指标,但不应单独使用,因为它没有考虑到真正的负面因素。准确性是一个简单的指标,但应谨慎使用,特别是对于不平衡的类。ROC曲线和AUC是评估模型在不同阈值下的性能的综合指标,对不平衡类特别有用。最后,PR-AUC是一种度量,通过在不同阈值设置下绘制精度与召回率的关系图来衡量二元分类模型的整体性能,为不平衡类的性能提供更准确的评估。

总之,了解和选择正确的分类性能指标对您的项目很重要,因为它为失败或成功做好了准备。这种分析并不简单;它涉及了解你的数据集、你愿意接受的权衡以及预测的影响。感谢您的阅读!

本文地址
最后修改
星期日, 四月 27, 2025 - 10:28
Article