Scikit-learn的accuracy_score计算总体准确率还是平均准确率?
多分类任务中类别级准确率与总体准确率的区别
问题场景
针对3类癌症样本进行病情预测时,自定义计算得到了每类的灵敏度、特异性和准确率数组,而使用Scikit-learn的accuracy_score得到的总体准确率与自定义结果的均值差异明显,需明确二者区别。
自定义ACC的计算逻辑
自定义代码中得到的ACC是类别级准确率,针对每个类别单独计算:
ACC = (TP+TN)/(TP+FP+FN+TN)
其中:
TP:当前类别被正确预测为该类的样本数TN:所有非当前类别样本中,被正确预测为非当前类的样本数- 分母为总样本数
这个指标反映的是模型对单个类别样本+其他所有类别样本的综合分类正确性,每个类别对应一个准确率值。
sklearn accuracy_score的计算逻辑
accuracy_score给出的是总体准确率,计算的是整个数据集上所有被正确分类的样本占比:
accuracy = accuracy_score(y_test,pred_y)
本质是混淆矩阵中所有对角线元素(所有类别的TP之和)除以总样本数,公式为:
总体准确率 = (所有类别的TP之和) / 总样本数
它反映的是模型在全局范围内的整体分类表现。
二者差异的核心原因
- 计算维度不同:类别级准确率是针对单个类别计算,每个结果对应一类的分类表现;总体准确率是全局统计,反映所有样本的整体正确比例。
- 样本权重影响:当数据集存在类别不平衡时,差异会被放大。比如某类样本占比极高,总体准确率会偏向该类的分类表现,而类别级准确率的均值可能受样本量少的类别影响,导致二者差距显著(极端情况下可达20%)。
验证方式
若将自定义的类别级ACC按各类样本数量加权平均,结果会与accuracy_score的输出一致:
假设三类样本数量分别为n1、n2、n3,则:
加权平均准确率 = (ACC[0]*n1 + ACC[1]*n2 + ACC[2]*n3) / (n1+n2+n3)
内容的提问来源于stack exchange,提问作者Looser
相关产品推荐
相关产品推荐

